본문 바로가기

Programming

[pytorch] Dataset & Dataloader

728x90
반응형

Dataset 클래스

하나의 데이터를 어떻게 가져올 것인가?
  • 데이터 입력 형태를 정의하는 클래스
  • 데이터를 입력하는 방식을 표준화
  • 이미지, 텍스트, 오디오 등 데이터 포맷에 따라 다른 입력을 정의해야 한다.
import torch
from torch.utils.data import Dataset, DataLoader


class CustomDataset(Dataset):
    def __init__(self, text, labels):  # 초기 데이터 생성 방법 지정
        self.labels = labels
        self.data = text

    def __len__(self):                 # 데이터의 전체 길이
        return len(self.labels)


    def __getitem__(self, idx):		   # index값을 주었을 때 반환되는 데이터의 형태 
        label = self.labels[idx]
        text = self.data[idx]
        sample = {"Text": text, "Class": label}
        return sample

Dataset 클래스 생성 유의사항

  • 데이터 형태에 따라 함수를 다르게 정의
  • 모든 것을 데이터의 생성 시점에 처리할 필요는 없음. 예를 들어 이미지의 Tensor변화는 학습 중 필요한 시점에 수행하면 됨
  • 최근에는 HuggingFace등 표준화된 라이브러리를 사용함

DataLoader 클래스

여러개 데이터를 한 번에 어떻게 묶을 것인가?
  • 데이터의 Batch를 생성해 주는 클래스
  • 학습 직전 데이터의 변환을 담당
  • Tensor로 변환 + Batch처리를 메인으로 함
  • 병렬적인 데이터 전처리 코드의 고민이 필요한다.
text = ["Happy", "Amazing", "Sad", "Unhappy", "Glum"]
labels = ["Positive", "Positive", "Negative", "Negative", "Negative"]

MyDataset = CustomDataset(text, labels)
728x90
반응형