Nesúlady o veľkosti šarže v Pytorch sa môžu vyskytnúť z rôznych dôvodov, často súvisiacich s tým, ako sa údaje spracúvajú alebo pretvárajú počas tréningu. Tu je niekoľko príkladov:
1. Nesúlad z dôvodu nesprávneho cieľového formátu:
- V Pytorch, pri použití `crossentropyloss` by mal byť cieľom celočíselných indexov, nie jedným horným kódovaným vektorom. Ak je cieľ kódovaný na jednom horníku, môže to viesť k chybe nesúladu veľkosti šarže, pretože model očakáva cieľ veľkosti `[Batch_size]`, ale dostane tenzor veľkosti `[Batch_size, N_Classes]`. Napríklad, ak model predpovedá jednu z 24 tried, cieľom by mal byť tenzor tvaru `(32,)` pre veľkosť dávky 32, nie `(32, 24)" [1].
2. Problémy s prestavbou:
- Niekedy môžu pretváranie operácií v rámci modelu neúmyselne znížiť veľkosť dávky. Napríklad, ak sa tenzor pretvára tak, že sa zmení jeho prvá dimenzia (veľkosť šarže), môže to viesť k nesúladu pri výpočte funkcií straty, ktoré očakávajú, že sa zhodujú s veľkosťou vstupu a cieľom [5].
3. Správanie Dataloader:
- Pytorch's `Dataloader` niekedy môže vrátiť dávky rôznych veľkostí, najmä ak veľkosť súboru údajov nie je viacerým veľkosti dávky. Stáva sa to, keď `drop_last = false`, čo spôsobí, že posledná dávka bude menšia ako špecifikovaná veľkosť dávky. Aj keď to zvyčajne nie je problém nesúladu v rámci dávky, môže to spôsobiť zámenu, ak sa s nimi nebude správne zaobchádzať [3].
4. Implementácia vlastných údajov alebo modelu:
- Vlastné súbory údajov alebo modely môžu neúmyselne spôsobiť nezhody veľkosti šarží, ak výstupy údajov alebo modelu nie sú správne zarovnané. Napríklad, ak vlastný súbor údajov vráti údaje v neočakávanom formáte, alebo ak model Forward Pass pretvorí údaje spôsobom, ktorý mení veľkosť dávky, môže to viesť k chybám počas tréningu [7].
5. Požiadavky na stratu:
- Rôzne stratové funkcie majú rôzne požiadavky na vstupné a cieľové tvary. Napríklad `l1loss` vyžaduje, aby oba vstupy mali rovnaký tvar, čo môže viesť k nesúladom veľkosti šarže, ak sa tvary správne nezarovnajú [2].
[1] https://stackoverflow.com/questions/74785188/pytorch-complaining-about-input-ndput-nd-mabel-batch- size-mizmach
[2] https://github.com/lighning-ai/pytorch-lighning/discussions/14812
[3] https://discuss.pytorch.org/t/problem-with-batch-size/114363
[4] https://discuss.pytorch.org/t/test-accuracy-with-different-batch-saizs/22930
[5] https://discuss.pytorch.org/t/batch-saze-mizmach/98354
[6] https://stackoverflow.com/questions/62123795/Mismatch-in-batch-saze
[7] https://discuss.pytorch.org/t/batch-saze-patch/187427
[8] https://github.com/lighning-ai/pytorch-lighning/issues/3668