이 글은 OpenAI chatGPT으로부터 생성된 답변과 pytorch docs를 참고하여 작성되었습니다.
pytorch에서 데이터를 모델에 로드하는 경우 기존 머신러닝 라이브러리(필자의 경우 sklearn+pandas+numpy 조합을 많이 사용했다)와 다르게 DataLoader class를 상속받는 별도의 클래스를 만들어 로드하여야 한다.
즉 데이터를 로드할 때 한 계층이 더 생긴 셈인데, 이는 미니 배치 학습 지원, 데이터 병렬 처리, 음성 데이터 등 다양한 데이터 형식 지원을 위해서라고 한다.
pytorch 라이브러리에서 기본적으로 제공하는 데이터 처리 모듈은 torch.utils.data이다.
정적 배치 학습의 경우, 최종적으로 모델로 전달되는 것은 지정된 크기(=배치)만큼의 DataLoader에 담긴 데이터이며 데이터셋으로부터 DataLoader 생성까지의 과정은 다음과 같다.
먼저 torch.utils.data.Dataset 클래스를 상속받는 커스텀 클래스(ex. UserDataSet
)를 작성한다.
UserDataSet
클래스는 __len__
과 __getitem__
두 개의 메서드를 구현하여야 한다.__init__
에는 데이터를 파일, 소스 등으로부터 불러와 객체 멤버에 저장하는 작업을 구현하여야 할 것이다.선택사항으로, 이후 torchvision.transforms 모듈 등을 활용하여 전처리를 수행할 수 있다.
마지막으로 batch 크기 등의 정보와 함께 DataLoader 인스턴스를 만듦으로써 데이터 로드 작업을 끝낸다.
이렇게 만들어진 DataLoader는 iterable하게, 각 반복당 설정된 배치 크기만큼의 데이터에 접근할 수 있어 훈련에 쓰일 수 있다.
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.