위의 예시처럼 꼭 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를 정해주는 기법