# Cvičení - `reshape([inputs.shape[0], -1])` - `-1` je wild card, PyTorch použije velikost dat - je zvykem, že se obrázky ukládají jako pole bytů a pak se převádějí na floaty až během tréninku (?) - nepoužívat pythoní seznam jako seznam vrstev – PyTorch je nenajde při hledání parametrů - gym cartpole - baseline model: 128 neuronů ve skryté vrstvě, ReLU - menší model neoverfituje tak moc - pro 4 skryté neurony to funguje dost dobře - Tanh asi funguje líp než ReLU, protože vlastně nedělá nic (→ neoverfittuje) - bez skryté vrstvy to taky funguje lol - GPUčka - MetaCentrum (pro studenty VŠ) - AIC - jak pracovat s clusterem - pomocí ssh se přihlásíme do hlavy (head) clusteru - např. tarkil - pošleme tam job (specifikujeme, jaké zdroje potřebujeme – CPU, GPU apod.) - pak je tam nějaká fronta a workers - interactive job (s terminálem) × batch job (bez terminálu) - je to v FAQ sekci na webu - `%time` na začátku řádku v interaktivním režimu (ipython) stopuje čas pro daný příkaz - můžeme používat VS Code přes ssh, ale bacha, pořád je potřeba submitnout job pomocí pomocí srun - dosud naše architektury začínají zplacatěním - teďka budeme zplacatění používat až mezi konvolucí a FC vrstvami - uppercase competition - nemůžeme klasifikovat jednotlivá písmena – zajímá nás i kontext - jak reprezentovat písmena? - jako inty? ne :( - můžeme onehotovat - můžeme použít embedding - batch size 2048, 10 epoch - modely s jednou skrytou vrstvou fungujou líp než modely s více skrytými vrstvami - 8192 neuronů - zmenšení abecedy nám sníží čas trénování - label smoothing pomáhá - window size 7 - ensembling taky zlepší přesnost - průměrování pravděpodobnosti - nejlepší model (po ensemblu) - embeddingy, window 10, label_smoothing 0.4 - cifar competition - baseline: ReLU, batch 128, 200 epochs, SGD with lr 0.1 and Nesterov 0.9, cosine decay, dropout 0.2, stochastic depth 0.2, label smoothing 0.1, weight decay 0.004/10 - data augmentation - basic: horizontal flip, random move of the image - cutout - AutoAugment or RandAugment - stochastic depth funguje - bacha na „overfitting“ - vývojová množina obvykle pochází ze stejného zdroje jako tréninková množina (kdežto testovací je odjinud) - takže se nám snadno stane, že overfitneme na trénovací data, když porovnáváme hyperparametry - weight decay je citlivý parametr, je potřeba ho zvolit dobře - a taky přizpůsobovat, když měním ostatní hyperparametry - jak na transfer learning - zmrazení pretrained modulu (backbone) - backbone.requires_grad_(false) - je potřeba přepsat train metodu, aby backbone byla v eval módu - rozmražení - backbone.requires_grad_(true) - backbone do train módu – až na BatchNorm (musí zůstat v eval módu) - když trénuju model, který bych chtěl později finetunit, tak může být praktické použít group norm - cags soutěž - 232 soutěžících - není zásadní rozdíl mezi transponovanou konvolucí a upscalingem - u transponované konvoluce se používají kernely se sudou velikostí (typicky 4) - existují funkce na logaritmování součtu $e^x$ - logaddexp, logsumexp - FastText embeddingy