Nesprávné velikosti šarže v Pytorchu mohou nastat z různých důvodů, často souvisejících s tím, jak jsou data zpracovávána nebo přetvořena během tréninku. Zde je několik příkladů:
1. Neshoda způsobená nesprávným cílovým formátem:
- V Pytorch by při použití `crossentropyloss` měl být cílem celočíselné indexy, nikoli o jediné kódované vektory. Pokud je cíl jednoznačný kódován, může to vést k chybě neshodné velikosti šarže, protože model očekává cíl velikosti `[Batch_Size]`, ale obdrží tenzor velikosti `[Batch_size, n_classes]`. Například, pokud model předpovídá jednu z 24 tříd, cílem by měl být tenzor tvaru `(32,)` pro velikost šarže 32, ne `(32, 24)` [1].
2.. Problémy s přetvářením:
- Někdy mohou přetváření operací v modelu neúmyslně snížit velikost dávky. Například, pokud je tenzor přetvořen tak, aby se změnil jeho první dimenze (velikost šarže), může to vést k neshodě při výpočtu ztrátových funkcí, které očekávají velikost vstupu a cíle, aby se shodovaly [5].
3. chování Dataloader:
- Pytorch's „Dataloader“ může někdy vrátit šarže různých velikostí, zejména pokud velikost datového souboru není násobkem velikosti dávky. K tomu dochází, když `drop_last = false`, což způsobí, že poslední dávka je menší než zadaná velikost dávky. I když to obvykle není problém nesouladu v dávce, může to způsobit zmatek, pokud nebude správně zpracován [3].
4. Implementace vlastního datového souboru nebo modelu:
- Vlastní datové sady nebo modely mohou neúmyslně způsobit neshody velikosti šarží, pokud nejsou výstupy nebo modelové výstupy správně zarovnány. Například, pokud vlastní datový soubor vrátí data v neočekávaném formátu, nebo pokud model vpřed přepravuje data způsobem, který mění velikost dávky, může to vést k chybám během tréninku [7].
5. Požadavky na ztrátu funkcí:
- Různé funkce ztráty mají různé požadavky na vstupní a cílové tvary. Například „L1Loss“ vyžaduje, aby oba vstupy měly stejný tvar, což může vést k neshodám velikosti šarží, pokud se tvary správně nerovná [2].
[1] https://stackoverflow.com/questions/74785188/pytorch-compling-about-input-and-label-batch-size-lisMatch
[2] https://github.com/lightning-ai/pytorch-lightning/discussions/14812
[3] https://discuss.pytorch.org/t/problem-with-batch-size/114363
[4] https://discuss.pytorch.org/t/test-accuracy-with-different-batch-sides/22930
[5] https://discuss.pytorch.org/t/batch-size-misMatch/98354
[6] https://stackoverflow.com/questions/62123795/misMatch-in-batch-size
[7] https://discuss.pytorch.org/t/batch-size-mach/187427
[8] https://github.com/lightning-ai/pytorch-lightning/issues/3668