Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[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

NekocBraca

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

M̵̧̩͑̀͝î̶͍̉ć̴̝̾́̀o̶̺̟̣͂̽

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

M̵̧̩͑̀͝î̶͍̉ć̴̝̾́̀o̶̺̟̣͂̽

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

  1. Aktivacijske funkcije poput ReLU/Sigm/Tanh rade elementwise operacije - one ne mjenjaju receptivno polje
  2. Potpuno povezani (FC) slojevi rade linearnu kombinaciju svih vrijednosti - njihovo receptivno polje je cijela slika
  3. Svaka konvolucija ima dva parametra: velicinu kernela k i sirinu pomaka s - najcesce 1 ali ne mora biti
  4. operacije sazimanja (pooling) se ‘lowkey’ mogu smatrati konvolucijama gdje je k == s.
  5. 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
  • FC:
    • receptivno polje postaje rf = input.shape

Primjer

za primjer cu uzeti arhitekturu AlexNet:

  1. Input(224, 224, 3)
  2. Conv(k=11, s=4)
  3. Relu()
  4. MaxPool(2) //rekli smo ovo je isto kao Conv(2, 2)
  5. Conv(k=5, s=1)
  6. ReLU()
  7. MaxPool(2)
  8. Conv(k=3, s=1)
  9. ReLU()
  10. Conv(k=3, s=1)
  11. Tanh()
  12. Conv(k=3, s=1)
  13. Sigm()
  14. FC(4096)
  15. FC(2048)
  16. FC(1000)

Idemo redom:

  1. rf = 1, f = 1
  2. rf = 1 + (11-1)*1 == 11, f = 1*4 == 4
  3. rf = 11, f = 4
  4. rf = 11 + (2-1)*4 == 19, f = 4*2 == 8
  5. rf = 19 + (5-1)*8 == 51, f = 8*1 == 8
  6. rf = 51, f = 8
  7. rf = 51 + (2-1)*8 == 59, f=8*2 == 16
  8. rf = 59 + (3-1)*16 == 91, f = 16*1 == 16
  9. rf = 91, f=16
  10. rf = 91 + (3-1)*16 == 123, f=16*1 == 16
  11. rf = 91, f=16
  12. rf = 123 + (3-1)*16 == 155, f = 16*1 == 16
  13. rf = 155, f = 16
  14. rf = 244, f = 16
  15. rf = 244, f = 16
  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.



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. 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

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.