Невідповідності розміру партії в Піторі можуть виникати через різні причини, часто пов'язані з тим, як обробляються або переробляються дані під час навчання. Ось кілька прикладів:
1. Невідповідність через неправильне формат цільових:
- У Pytorch, використовуючи `Crossentropyloss`, ціль повинна бути цілими індексами, а не векторованими векторами. Якщо ціль є кодованою однією, це може призвести до помилки невідповідності розміру партії, оскільки модель очікує ціль розміру `[batch_size]`, але отримує тензор розміру `[batch_size, n_classes]`. Наприклад, якщо модель прогнозує один із 24 класів, ціль повинна бути тензор форми `(32,)` для розміру партії 32, а не `(32, 24)` [1].
2. Переробка питань:
- Іноді переробка операцій у моделі може ненавмисно зменшити розмір партії. Наприклад, якщо тензор переробляється таким чином, щоб його перший вимір (розмір партії) змінився, це може призвести до невідповідності при обчисленні функцій втрат, які очікують розмірів партії введення та цілі [5].
3. Поведінка DataLoader:
- "Dataloader" Pytorch іноді може повертати партії різних розмірів, особливо якщо розмір набору даних не є кратним розміром партії. Це трапляється, коли `drop_last = false`, внаслідок чого остання партія була меншою, ніж вказаний розмір партії. Хоча це, як правило, не невідповідна проблема в партії, це може спричинити плутанину, якщо не впоратися належним чином [3].
4. Спеціальний набір даних або реалізація моделі:
- Спеціальні набори даних або моделі можуть ненавмисно спричинити невідповідності розміру партії, якщо дані даних або моделі не правильно вирівняні. Наприклад, якщо спеціальний набір даних повертає дані в несподіваному форматі, або якщо передовий пропуск моделі перетворює дані таким чином, що змінює розмір партії, це може призвести до помилок під час тренінгу [7].
5. Вимоги до функції втрат:
- Різні функції втрат мають різні вимоги до вхідних та цільових форм. Наприклад, `l1loss` вимагає, щоб обидва входи мали однакову форму, що може призвести до невідповідності розміру партії, якщо форми не вирівнюються належним чином [2].
[1] https://stackoverflow.com/questions/74785188/pytorch-complaint-about-input-and-label-batch-size-mismatch
[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-accurracy-with-different-batch-sizes/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-match/187427
[8] https://github.com/lightning-ai/pytorch-lightning/issues/3668