pytorch에서 데이터 로드하기

JSHyeon·2023년 7월 22일
0

머신러닝

목록 보기
5/7

이 글은 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__ 두 개의 메서드를 구현하여야 한다.
  • 이 두 메서드는 데이터셋의 크기와 특정 인덱스에 있는 샘플에 접근하는 방법을 정의하며, DataLoader가 미니 배치를 구성하는 등의 작업을 할 때 활용된다.
  • 물론 생성자 __init__에는 데이터를 파일, 소스 등으로부터 불러와 객체 멤버에 저장하는 작업을 구현하여야 할 것이다.

선택사항으로, 이후 torchvision.transforms 모듈 등을 활용하여 전처리를 수행할 수 있다.
마지막으로 batch 크기 등의 정보와 함께 DataLoader 인스턴스를 만듦으로써 데이터 로드 작업을 끝낸다.

이렇게 만들어진 DataLoader는 iterable하게, 각 반복당 설정된 배치 크기만큼의 데이터에 접근할 수 있어 훈련에 쓰일 수 있다.

profile
네트워크와 인프라를 좋아하는 학부생

1개의 댓글

comment-user-thumbnail
2023년 7월 22일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기