배우기 · 7
데이터
진짜 학습은 배치로 읽고, 섞고, 검증용을 떼어 둔다. 이름은 torch 의 것이다 —
TensorDataset·DataLoader·randomSplit 이
data 아래 있고, 그 자리가 torch.utils.data 다.
데이터셋과 로더
TensorDataset 은 첫 축이 같은 텐서들을 받아 한 줄씩 돌려준다.
DataLoader 가 그것을 배치로 묶고, 순회할 수 있다 —
for (const [x, y] of loader) 가 파이썬과 같은 모양으로 읽힌다.
섞기, 그리고 마지막 짧은 배치
shuffle 은 에폭마다 순서를 바꾼다. dropLast 는 남는
것을 어떻게 할지 정한다 — 남기면 마지막 배치가 작아지고, 모델 어딘가가 배치
크기를 고정으로 가정하는 순간 그것이 문제가 된다.
떼어 두기
randomSplit 은 같은 데이터를 가리키는 뷰를 준다 — 복사가 아니다.
학습에 쓴 줄로 잰 수를 보고하는 것이 틀리면서 맞다고 느끼는 가장 흔한 길이다.
이미지
vision 이 torchvision.transforms 자리이고 변환만 있다 —
사전학습 가중치는 여기 없고 앞으로도 없다. Normalize 는 채널별
평균과 표준편차를 받고, Compose 가 순서대로 잇는다.
배치, 그려보기
축 0 에 쌓은 여섯 샘플을 띠로 그렸다. 모델은 한 번에 한 예제를 보지 않는다 — 배치 전체를 한꺼번에 본다. 그게 GPU 학습을 빠르게 한다.
기억할 것
- 데이터셋은 샘플을 내주고, 배치는 축 0 에 쌓으며, 셔플은 에폭마다 순서를 섞는다.
- 검증 분리를 떼어 두고 절대 학습에 쓰지 말 것 — 그게 과적합을 잡는 법.
- 변환(크롭·플립·정규화)은 학습 데이터를 증강한다.
- 망은 배치 전체를 한꺼번에 본다.