Несоответствия партийных размеров в Pytorch может возникнуть по различным причинам, часто связанным с тем, как данные обрабатываются или изменяются во время обучения. Вот несколько примеров:
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-comploing-about-input-and-drabel-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-accuracy-with-different-batch-sises/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