Pytorch의 배치 크기 불일치는 여러 가지 이유로 인해 발생할 수 있으며, 종종 훈련 중에 데이터가 처리되거나 재 형성되는 방식과 관련하여 발생합니다. 몇 가지 예는 다음과 같습니다.
1. 잘못된 대상 형식으로 인한 불일치 :
-Pytorch에서 'CrossentroPyloss'를 사용할 때 대상은 하나의 인코딩 된 벡터가 아닌 정수 지수 여야합니다. 대상이 한 번의 인코딩 된 경우 모델은 크기`[batch_size]`의 대상을 기대하지만 크기의 텐서를 수신하기 때문에 배치 크기 불일치 오류로 이어질 수 있습니다. 예를 들어, 모델이 24 개의 클래스 중 하나를 예측하는 경우 대상은`(32, 24)`[1]이 아닌 32의 배치 크기 32의 텐서`(32,)`의 텐서 여야합니다.
2. 문제 재 형성 문제 :
- 때로는 모델 내에서 작업을 재구성하면 실수로 배치 크기를 줄일 수 있습니다. 예를 들어, 텐서가 첫 번째 차원 (배치 크기)이 변경되는 방식으로 재구성되는 경우 입력 및 대상의 배치 크기가 일치 할 것으로 예상하는 손실 기능을 계산할 때 불일치가 발생할 수 있습니다 [5].
3. 데이터 로더 동작 :
-Pytorch의 'Dataloader'는 때때로 다양한 크기의 배치를 반환 할 수 있습니다. 특히 데이터 세트 크기가 배치 크기의 배수가 아닌 경우. 이것은`drop_last = false`가 발생하여 마지막 배치가 지정된 배치 크기보다 작을 때 발생합니다. 배치 내에서 일반적으로 불일치 문제는 아니지만 제대로 처리하지 않으면 혼란을 일으킬 수 있습니다 [3].
4. 사용자 정의 데이터 세트 또는 모델 구현 :
- 데이터 또는 모델 출력이 올바르게 정렬되지 않으면 사용자 정의 데이터 세트 또는 모델이 실수로 배치 크기 불일치를 유발할 수 있습니다. 예를 들어, 사용자 정의 데이터 세트가 예상치 못한 형식으로 데이터를 반환하거나 모델의 Forward Pass가 배치 크기를 변경하는 방식으로 데이터를 재구성하는 경우 교육 중에 오류가 발생할 수 있습니다 [7].
5. 손실 기능 요구 사항 :
- 다른 손실 함수마다 입력 및 대상 모양에 대한 요구 사항이 다릅니다. 예를 들어,`l1loss`는 두 입력 모두 동일한 모양을 갖도록 요구하므로 모양이 제대로 정렬되지 않으면 배치 크기 불일치로 이어질 수 있습니다 [2].
[1] https://stackoverflow.com/questions/74785188/pytorch-comeming-about-input-and-babel-batch-size-mismatch
[2] https://github.com/lightning-ai/pytorch-leightning/discussions/14812
[3] https://discuss.pytorch.org/t/problem-with-batch-size/114363
[4] https://discuss.pytorch.org/t/test-accuracy-with-different-batch-size/22930
[5] https://discuss.pytorch.org/t/batch-size-mismatch/98354
[6] https://stackoverflow.com/questions/62123795/mistath-inbatch-size
[7] https://discuss.pytorch.org/t/batch-size-match/187427
[8] https://github.com/lightning-ai/pytorch-leightning/issues/3668