[U] Week 2 - Dataset & DataLoader

JaeJun Lee ·2022년 9월 28일
0

부스트캠프 AI Tech

목록 보기
12/30

Dataset Class

데이터 입력 형태를 정의하는 클래스

  • 데이터를 입력하는 방식의 표준화
  • Image, Text, Audio 등에 따라 다른 입력 정의
import torch
from torch.utils.data import Dataset

class CustomDataset(Dataset):
	# 초기 데이터 생성 방법을 지정
	def __init__(self, text, labels):
    	self.labels = labels
        self.data = text
    
    # 데이터의 전체 길이
    def __len__(self):
    	return len(self.labels)
   	
    # index에 따라 반환되는 데이터의 형태 (X, y)
    def __getitem__(self, idx):
    	label = self.labels[idx]
        text = self.data[idx]
        sample = {"Text": text, "Class": label}
        return sample

Dataset 클래스 생성시 유의점

  • 데이터 형태에 따라 각 함수를 다르게 정의
  • 모든 것을 데이터 생성 시점에 처리할 필요는 없음
    • image의 Tensor 변화는 학습에 필요한 시점에 변환
  • 데이터 셋에 대한 표준화된 처리방법 제공 필요
    • 후속 연구자 또는 동료에게는 빛과 같은 존재
  • 최근에는 HuggingFace 등 표준화된 라이브러리 사용

관련 모듈

  • torch.utils.data: 데이터셋의 표준을 정의하고 데이터셋을 불러오고 자르고 섞는데 쓰는 도구들이 있는 모듈
  • torchvision.dataset: torch.utils.data.Dataset을 상속하는 이미지 데이터셋의 모듈
  • torchtext.dataset: torch.utils.data.Dataset을 상속하는 텍스트 데이터셋의 모듈
  • torchvision.transforms: 이미지 데이터셋에 쓸 수 있는 여러 가지 변환 필터를 담고 있는 모듈
  • torchvision.utils: 이미지 데이터를 저장하고 시각화하기 위한 도구들이 있는 모듈

DataLoader Class

Data의 Batch를 생성해주는 클래스

  • 학습직전(GPU feed전) 데이터의 변환을 책임
  • Tensor로 변환 + Batch 처리가 메인 업무
  • 병렬적인 데이터 전처리 코드의 고민 필요
from torch.utils.data import DataLoader

customDataLoader = DataLoader(customDataset, batch_size=2, shuffle=True)

DataLoader Parameters

  • sampler: 블군형 데이터셋의 경우 주로 사용하며 데이터를 어떻게 뽑을 지 index를 컨트롤하는 방법
    • index를 컨트롤하기 때문에 사용 시 shuffle=False
  • collate_fn: Variable 인자에 가변성이 있을 때 등 데이터 사이즈를 맞추기 위해 재정의
  • num_workers: 데이터를 불러올때 사용하는 서브 프로세스(process() 개수
    • 너무 높이면 데이터를 불러 CPU와 GPU 사이에서 많은 교류가 일어나 오히려 병목이 생길 수 있다
  • pin_memory: Tensor를 CUDA 고정 메모리에 할당
  • drop_last: batch_size에 따른 마지막 배치의 사용 유무
  • time_out: 양수로 주어지는 경우, DataLoader가 data를 불러오는데 제한시간
  • worker_init_fn: 어떤 worker를 불러올 것인지 리스트로 전달

0개의 댓글