[DUBUCE] 2. laboratorijska vježba - 2019/2020
Jimothy
Što ste koristili za računanje loss-a i updatanje parametara modela u 3. zadatku?
NekocBraca
Ja za loss koristim CrossEntropyLoss(), a parametre updateam s SGD optimizatorom
model = CovolutionalModel()
optimizer = optim.SGD(model.parameters(), lr=1e-1)
criterion = CrossEntropyLoss()
...
loss_train = criterion(output_train, torch.max(train_y, 1)[1])
loss_train_acc += loss_train
loss_train.backward()
optimizer.step()
Jimothy
Jesi za regularizaciju koristio weight decay u optimizeru?
NekocBraca
Jimothy ne, ali to zato sto sam zaboravio da to postoji
micho
Jimothy Za ovako malu mrežu ti je weight decay nebitan jer je mala mreža sama po sebi jedna vrsta regularizacije.
Jimothy
Tako je zadano u zadatku.
micho
Jimothy Koristeći implementaciju L2 regularizacije iz prethodnog zadatka, ne u optimizatoru. Referencirao sam na to da za ovakvu mrežu takvo ponašanje ionako nije potrebno, a to što je zadano da se izvrši usporedba s modelom iz prošlog zadatka koji ima sloj koji to obavlja, to je sasvim druga stvar.
Jimothy
Razumijem sto si htio reci 👍
Mislim da je ideja bila da se ne koristi nista iz modula layers u 3. zadatku pa tako ni regularizacija. Mozda se varam 😄
InCogNiTo124
Tutorial: računanje (efektivnog) receptivnog polja
Osnovne postavke
- Aktivacijske funkcije poput ReLU/Sigm/Tanh rade elementwise operacije - one ne mjenjaju receptivno polje
- Potpuno povezani (FC) slojevi rade linearnu kombinaciju svih vrijednosti - njihovo receptivno polje je cijela slika
- Svaka konvolucija ima dva parametra: velicinu kernela
k
i sirinu pomakas
- najcesce 1 ali ne mora biti - operacije sazimanja (pooling) se ‘lowkey’ mogu smatrati konvolucijama gdje je
k == s
. - receptivno polje nikad ne moze biti vece od ulazne slike
Algoritam
Pocetno receptivno polje rf
je 1
, pocetni faktor f
je isto 1
(vidit cemo sta to znaci). idemo sloj po sloj. Ako je sloj
- aktivacija:
rf
ostaje nepromjenjen
- konvolucija / pooling layer:
- racuna se po formuli
rf = rf + (k-1)*f
f = f*s
- racuna se po formuli
- FC:
- receptivno polje postaje
rf = input.shape
- receptivno polje postaje
Primjer
za primjer cu uzeti arhitekturu AlexNet:
Input(224, 224, 3)
Conv(k=11, s=4)
Relu()
MaxPool(2) //rekli smo ovo je isto kao Conv(2, 2)
Conv(k=5, s=1)
ReLU()
MaxPool(2)
Conv(k=3, s=1)
ReLU()
Conv(k=3, s=1)
Tanh()
Conv(k=3, s=1)
Sigm()
FC(4096)
FC(2048)
FC(1000)
Idemo redom:
rf = 1, f = 1
rf = 1 + (11-1)*1 == 11, f = 1*4 == 4
rf = 11, f = 4
rf = 11 + (2-1)*4 == 19, f = 4*2 == 8
rf = 19 + (5-1)*8 == 51, f = 8*1 == 8
rf = 51, f = 8
rf = 51 + (2-1)*8 == 59, f=8*2 == 16
rf = 59 + (3-1)*16 == 91, f = 16*1 == 16
rf = 91, f=16
rf = 91 + (3-1)*16 == 123, f=16*1 == 16
rf = 91, f=16
rf = 123 + (3-1)*16 == 155, f = 16*1 == 16
rf = 155, f = 16
rf = 244, f = 16
rf = 244, f = 16
rf = 244, f = 16
Tutorial izmisljen osobno, a algoritam izveden odavdje i isproban na Segvicevoj zadaci, s tim da sam izmjenio imena varijabli da budu meni logicna 😃
Takoder, ovo pretpostavlja da nema neke razlike izmedu valid i same konvolucija sto se tice receptivnog polja
micho
BTW ako netko mozga kako na lijep način ne regularizirati posljednji sloj bez da se radi nova loss funkcija, kolega @InCogNiTo124 mi je pokazao sljedeći način:
optimizer = torch.optim.SGD([
{"params": [*self.conv_1.parameters(),
*self.conv_2.parameters(),
*self.fc_1.parameters()], "weight_decay": weight_decay},
{"params": self.fc_2.parameters(), "weight_decay": 0}
], lr=1e-1)
s tim da mi je weight_decay = 1e-3
kao što je postavljeno u 2. zadatku.
InCogNiTo124
M̵̧̩͑̀͝î̶͍̉ć̴̝̾́̀o̶̺̟̣͂̽ s tim da mi je weight_decay = 1e-3 kao što je postavljeno u 2. zadatku.
kj ne treba isprobacat weight_decay za sve mogucnosti?
micho
InCogNiTo124 Ima samo jedan weight decay u njihovom primjeru, pa pretpostavljam da treba trenirati samo s tim
EDIT: NVM sad vidim na što misliš, da, treba proći po svim parametrima ali u načelu je formula za optimizator ista.
InCogNiTo124
Jel ima netko informacija o tome kako ce izgledati ova obrana laboratorijskih vjezbi? Sta pitaju i sta sve treba?
feel_d_boot
InCogNiTo124 Pita sam čovika. Proslijedit ću odgovor čim mi se javi.
feel_d_boot
Ovisi ko te dopadne, al poprilicno detaljno pitaju
Nas su znali pitat da izvedemo neke jednostavnije koncepte na papiru, tipa konvoluciju neku jednostavnu
Sad vas vjerojatno nece pitat na papiru nista
Al skupi za prag iz prva 3 kako god znas hahaha jer je zadnji labos za ubit se
Ne znam koliko je korisno, al evo sto je frend napisa u vezi labosa.
micho
NekocBraca
InCogNiTo124 Jel mozes mozda reci sto se pitalo na labosu?
micho
NekocBraca Bio sam prije kolege:
- 1. labos
- 2. zadatak
- pokaži gdje si radio backprop
- pokaži gdje računaš gradijent gdje je ReLU ulaz
- 7. zadatak
- pokaži filtere 1. sloja
- pokaži kako si implementirao mini-batch učenje
- 2. zadatak
- 2. labos
- 1. zadatak
- pokaži implementaciju potpuno povezanog sloja
- koju od backwards metoda nemamo u L2Regularizer?
- 4. zadatak
- pokaži grafove
- misliš li da je ova mreža prenaučena?
- pokaži slike filtera
- 1. zadatak
Radi mojih implementacijskih detalja smo i nešto sitno pričali oko mijenjaja optimizatora tijekom učenja, dao sam mu moju hipotezu zašto moja mreža ima 77% accuracy s neinterpretabilnih filterima 1. sloja (koristio sam batch norm a maknuo weight decay), i pokazao sam mu kako gradim mrežu u 2. labosu 4. zadatku i kako je učim jer je mislio da ima neki bug, ali mislim da je to bilo izvan ispitivanja.