two-method 계약
'indexable list of sample' 로 줄일 수 있는 어떤 data shape 든, custom Dataset 은 그저 필요:
__len__(self)— 총 sample__getitem__(self, idx)— index idx 의 sample 반환
그게 전체 계약. DataLoader 가 나머지.
오백 번 짜게 될 pattern
- ImageFolder-style — subfolder 이름이 class label 인 directory tree. torchvision 이 canonical case 위
ImageFoldership; 'data 가 비슷한데 살짝 다름' 위 variant 짤 거. - CSV / pandas — path 와 label 의 manifest 파일 로드, 요청 시 disk 에서 fetch.
- HDF5 / Parquet / WebDataset — 큰 dataset 위, disk-backed 형식에서 read.
- In-memory tensor — fit 하는 작은 data 위, 그냥 attribute 로 tensor 들기.
Lazy vs eager loading
큰 dataset 은 lazy 로드 필수 — __getitem__ 안 disk 에서 read, __init__ 아님. 작은 dataset 은 eager 로드 가능, __init__ 에 pre-process. 경계는 대략 'RAM 에 여유로 fit' vs 'X' — 머신 따라 보통 10-100 GB.