본문 바로가기
프로그래밍(Programming)/에러 해결(Error Resolution)

[에러][Pytorch] ValueError: Expected more than 1 value per channel when training, got input size torch.Size([1, C, 1, 1])

by stevenkim_ 2024. 7. 21.

에러:

ValueError: Expected more than 1 value per channel when training, got input size torch.
Size([1, 512, 1, 1])

 

원인:

주로 배치 정규화(Batch Normalization) 레이어에서 발생한다. 이 오류는 입력 데이터의 크기가 너무 작아서 배치 정규화를 적용할 수 없을 때 발생한다. 구체적으로, 입력 데이터의 배치 크기(batch size)가 1인 경우에 발생한다.

  • 모델 학습 중 배치 크기가 1로 설정되었거나, 데이터 로더가 작은 배치 크기를 전달하는 경우 발생할 수 있다.
  • 데이터셋의 크기가 작아서 마지막 배치가 1개의 샘플만 포함하는 경우 발생할 수 있다.
  • 네트워크 아키텍처에서 특정 레이어를 통과한 후 출력 텐서의 크기가 [1, C, 1, 1]과 같은 경우 발생할 수 있다.

 

해결: Batch Size 조절

(데이터셋의 개수 / batch_size) 를 했을 때 나머지가 1이 나오면 위 에러가 발생할 수 있다고 한다. 따라서 데이터셋이 batch_size로 딱 나눠 떨어지도록 배치 사이즈를 조절해주었다.

나의 경우 Batch Size를 기존의 200에서 256으로 바꿔서 실행하니 해결되었다.

Dataloader의 drop_last 옵션을 True로 설정하여 나누어 떨어지지 않는 부분을 날리는 방법도 있다고 하는데, 나는 Batch Size를 조절하여 모든 데이터를 사용하는 방식을 택했다.