data를 모델에게 feeding 하는 것
모델에 데이터를 먹이는 방법
Dataset
Dataset 클래스
- 데이터 입력 형태를 정의하는 클래스
- 데이터를 입력하는 방식의 표준화
- Image, Text, Audio에 따라 다름
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):
label = self.labels[idx]
text = self.data[idx]
sample = {"Text":text,"Class":label}
return sample
- init에서는 일반적으로 데이터의 위치, 파일명 등을 초기화
- csv, xml 파일 등을 불러옴
생성 유의점
- 데이터 형태에 따라 각 함수를 다르게 정의함
- 모든 것을 데이터 생성 시점에 처리할 필요는 없음 (학습 때 변화해도 됨)
- 데이터 셋에 대한 표준화된 처리 방법 제공 필요
- 최근에는 HuggingFace등 표준화 된 라이브러리 사용
DataLoader
- Data의 batch를 생성
- 학습직전 데이터의 변환을 책임
- Tensor로 변환 + Batch 처리
MyDataLoader = DataLoader(MyDataset,batch_size=2,shuffle=True)
DataLoader Parameter
batch_size
shuffle
- 데이터를 dataloader에서 섞어서 사용하겠는지를 설정 (boolean)
sampler / batch_sampler
- index를 컨트롤 하는 방법으로, 설정하고 싶을 때 shuffle은 False여야 함
- SequentialSampler : 항상 같은 순서
- RandomSampler : 랜덤
- SubsetRandomSampler : 랜덤 리스트
등등
num_workers
- 데이터를 불러올 때 사용하는 서브 프로세스의 개수
- 무조건 num_workers를 높이면 병목 현상이 일어나 더욱 느려질 수도 있음
collate_fn
- map-style 데이터셋에서 sample list를 batch 단위로 바꾸는데 필요한 기능
- zero-padding 등 가변 데이터의 size를 맞추기 위해 자주 사용
- collate는 함께 합치다 라는 의미
drop_last