Comentarii

Copiați linkul Citat răspuns

densenet

haithanhp comentat 23 decembrie 2017

Vă mulțumesc pentru o muncă grozavă. Am văzut că ați valorificat factorii de scalare ai normalizării în lot pentru a tăia greutățile de intrare și de ieșire la straturile de conv. la cel al stratului convoluțional anterior pentru tăiere. Deci, Cum poți tăia greutăți în acest caz?

Apropo, când raritatea antrenamentului DenseNet este terminată cu lambda 1e-5, observ că mulți factori de scalare nu sunt suficient de mici pentru tăiere. Acest lucru afectează performanța rețelei comprimate?

Textul a fost actualizat cu succes, dar s-au întâlnit aceste erori:

liuzhuang13 comentat 28 decembrie 2017

Multumesc pentru interesul tau. Tundem canalele în funcție de factorii de scalare ai BN și, după acest proces, stabilim factori mici (și părtiniri) la 0, apoi vedem ce canale putem tăia fără a afecta rețeaua. Aceasta se aplică tuturor structurilor de rețea. În DenseNet, de fapt, dimensiunea factorilor de scalare se potrivește cu dimensiunea convoluției, datorită structurii „pre-activare”.

Parametrul lambda necesită reglare pentru diferite seturi de date și hiperparametri (de exemplu, rata de învățare), deci este posibil să fie necesar să vedeți performanța finală.

haithanhp comentat 28 dec. 2017 •

Multumesc pentru raspunsul tau. Am un exemplu al unei părți din DenseNet-40 (k = 12):

[N, C, K, K]: [# filtre, # canale, kernel_size, kernel_size]

„norm.weight” aici este factorul de scalare în normalizarea lotului. Pentru mine, fiecare strat norm.weight încearcă să prăbușesc 40% #canalele de normalizare a lotului corespondente la #filtere ale greutății anterioare conv. Și #canale ale celei din urmă. Cum puteți tăia intrările și ieșirile în acest caz? Vă rog să mă corectați dacă fac greșeli la tăiere.

Apropo, când parametrii straturilor sunt tăiați, cum afectează performanța rețelei? Există vreo modalitate de a urmări cum se schimbă performanța ?

liuzhuang13 comentat 29 decembrie 2017

În acest DenseNet de bază puteți tăia numai greutățile de ieșire. De exemplu, dacă setați 10 din cele 36 de greutăți și părtiniri în acestea
module.features.denseblock_1.dense_basicblock_2.conv_33.norm.weight: torch.Size ([36])
module.features.denseblock_1.dense_basicblock_2.conv_33.norm.bias: torch.Size ([36])
la zero, puteți tăia greutățile corespunzătoare (a doua dimensiune) în
module.features.denseblock_1.dense_basicblock_2.conv_33.conv.weight: torch.Size ([12, 36, 3, 3]).

Poate ai putea vizualiza parametrii de scalare ca în Fig. 4 în hârtie. Sau puteți monitoriza performanța pe un set de validare. Pe baza experienței mele, nu este foarte greu să aleg valoarea.

haithanhp comentat 29 decembrie 2017

Când a doua dimensiune a greutății conv. Este tăiată la 26 (eliminați 10), dimensiunea activării de intrare este încă 36 și nu va fi potrivită. Cum poți face operatorul de convoluție în acest caz?

Mulțumesc, și eu încerc să vizualizez valorile cu lambda lasso de 1e-5 și 1e-4 și există multe valori aproape de zero.