Pytorch-5 Dataset
모델에 데이터 먹이는 방법
순서 1) Data -> 2) 2) Dataset -> 4) DataLoader -> 모델 3) transforms-> 2)
2) 데이터 수집 collecting , cleaning, preprocessing
2) Dataset init, len, getitem 등 특히 getitem 은 어떤걸 반환할지, map-style을 정함
3) transforms init, call 전처리, 주로 ToTensor()로 tensor 형태로 바꾸는 일 이외에도 CentorCrop() 등등
4) DataLoader batch, shuffle 등
Dataset 클래스
데이터 입력 형태를 정의 데이터를 입력하는 방식의 표준화 image, text, audio에 따라 다르게 입력정의
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)
#인덱스 값 넣었을 때 반환되는 데이터의 형태 (X,y)
def __getitem__(self, idx):
label = self.labels[idx]
text = self.data[idx]
sample = {"Text": text, "Class": label}
return sample
Dataset 클래스 생성시 유의점
- 데이터 형태에 따라 각 함수를 다르게 정의함
- 모든 것을 데이터 생성 시점에 처리할 필요는 없음 ex) 이미지를 tensor로 변환 하는 것은 학습 직전에 해도 된다.
- 데이터 셋에 대한 표준화 처리 방법 -> 서로에게 도움이 되게
- 최근에는 HuggingFace 등 표준화된 라이브러리 사용
DataLoader 클래스
Data의 Batch를 생성해주는 클래스 학습 직전(Gpu feed 전) 데이터의 변환을 책임 Tensor로 변환 + Batch 처리
MyDataLoader = DataLoader(MyDataset, batch_size=2, shuffle=True)
next(iter(MyDataLoader))
DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
batch_sampler=None, num_workers=0, collate_fn=None,
pin_memory=False, drop_last=False, timeout=0,
worker_init_fn=None, *, prefetch_factor=2, persistent_workers=False)
이중에서 몇개만 보자면
- sampler,batch sampler 는 shuffle 과는 조금 다르게 데이터를 어떻게 뽑을지 인덱스를 정해주는 방법
- collate_fn padding 느낌으로다가, 문자들의 크기가 맞지않을 때
참고자료 https://subinium.github.io/pytorch-dataloader/
Casestudy
데이터 다운로드 부터 먹이기까지 해보자
- Property 함수 class 코드에 자꾸 @property가 나와서 데코레이터 봤는데 쪼끔 다른 것 같다. @property 는 파이썬 내장 함수라서 데코레이터처럼 함수 이름을 따라가지 않아도 되는 듯하다. 상세 정보는 아래 보고 공부함 https://www.daleseo.com/python-property/ property는 외부에 티 내지 않고 내부적으로 클래스의 필드 접근 방법을 바꿀 수 있다는 장점
댓글남기기