[PyTorch] PyTorch datasets & dataloaders

hj choi·2022년 9월 28일
0

AI

목록 보기
10/27

Dataset

Dataset클래스

  • 데이터 입력 형태를 정의하는 클래스
  • 데이터를 입력하는 방식의 표준화
  • image, text, audio 등에 따른 다른 입력정의

  • CustomDataset()

    • 초기 데이터 생성 방법을 지정
    • Image의 경우 data directory정의
  • len()

    • 데이터의 전체 길이를 받아서 반환
  • getitem()

    • index 값을 주었을 때 해당하는 데이터를 반환
    • 위의 예시처럼 꼭 dict 타입으로 반환하는것만은 아니다. 일반적으로 classification의 경우 dict타입으로 반환하고, detection의 경우 조금씩 다르다.

Dataset 클래스 생성시 유의점

  • 데이터 형태에 따라 각 함수를 다르게 정의함
  • 모든 것을 데이터 생성 시점에 처리할 필요는 없음 : image의 Tensor 변화는 학습에 필요한 시점에 변환. init에서 모든것을 변환 해줘야되는지 생각 할 수 있으나 그렇지 않다. getitem을 할 때 변환된 텐서를 반환해주는게 아니라 학습을 하는 시점에서 CPU에서는 Tensor로 변환하고 GPU에서는 학습을 진행하는 방식으로 하기 때문이다.
  • 데이터 셋에 대한 표준화된 처리방법 제공 필요 -> 후속 연구자 또는 동료에게는 빛과 같은 존재
  • 최근에는 HuggingFace등 표준화된 라이브러리 사용

DataLoader 클래스

  • Data의 Batch를 생성해주는 클래스 : dataset은 하나의 데이터를 어떻게 가져올 것인가라면, dataloader는 그 index를 가지고 여러개의 데이터를 한번에 묶어서 모델에 가져다주는 역할을 한다.
  • 학습직전(GPU feed전) 데이터의 변환을 책임
  • Tensor로 변환 + Batch 처리가 메인 업무
  • 병렬적인 데이터 전처리 코드의 고민 필요

  • batch_size = 2 : 한번에 두개의 데이터를 뽑음

  • shuffle = True : 데이터를 뽑을 때 섞어서 뽑게해줌

  • DataLoader의 경우 iterable한 객체이기 때문에 iter를 넣어주면 generator형태로 변환이 되고 next를 넣어주면 다음 데이터를 추출해준다.

DataLoader의 여러가지 parameter들

  • sampler : shuffle이 아니고, 데이터를 어떻게 뽑을지 index를 정해주는 기법

0개의 댓글