Hello Computer Vision

[pytorch] 처리하고자 하는 배치사이즈가 다를 때 해결방법 본문

딥러닝/파이토치

[pytorch] 처리하고자 하는 배치사이즈가 다를 때 해결방법

지웅쓰 2023. 12. 29. 19:25

딥러닝 모델을 돌리기 위해 데이터셋에 대한 DataLoader를 설정하고 Epoch마다 데이터셋을 돌리는 과정을 반복한다

 

그러나 이렇게 기계적으로 하는 와중에 SimCLR처럼 Similarity matrix를 고정적으로 batch_size * 2 로 만든다면 에러가 뜰 것이다. 왜냐하면 Matrix자체는 고정적으로  Batch_size * 2의 형태로 만들어지지만 실제 배치사이즈는 딱 떨어지지 않을 때도 있기 때문이다. 말로 하니까 조금 어려운데, 예시로 들어보자면

배치사이즈: 512, 총 데이터: 50,000

50,000 / 512는 딱 떨어지지 않기 때문에 에러가 생길 수 있다. 일반적인 Supervised setting에서는 일어나지 않는데 그 이유는 x, y 의 크기만 같으면 되기 때문이다.

 

추가로 Semi supervised learning을 훈련시킬 때 Unlabeled, labeled데이터의 크기가 다를 수 있다. 이를 해결할 수 있는 기능은 DataLoader 클래스 안에 내장되어있다. 바로 파라미터 drop_last이다.

 

  • drop_last (bool, optional) – set to True to drop the last incomplete batch, if the dataset size is not divisible by the batch size. If False and the size of dataset is not divisible by the batch size, then the last batch will be smaller. (default: False)

해당 파라미터는 기본값으로 False로 되어있는데 Supervised setting에서는 필요없기도 하며, 이 기능을 On 한다면 데이터셋의 끝 부분을 계속 사용하지 않을 수 있다는 단점도 있다. 따라서 이 기능은 편리하기도 하지만 직접 코드로 처리할 수 있다면 기능을 사용하지 않고 에러를 해결하는 것이 가장 좋은 방법이다.