권장 Pipeline 순서
tf.data의 힘은 변환 chain에서 와. 각각이 새 Dataset 반환 (lazy, 아직 실행 안 됨). 순서가 중요해 — 잘못하면 randomization이 조용히 망가지거나 메모리 낭비.
| 단계 | 변환 | 이 순서인 이유 |
|---|---|---|
| 1 | .map(parse, num_parallel_calls=AUTOTUNE) | raw 데이터 디코드/파싱 |
| 2 | .cache() | 비싼 파싱 후, randomization 전에 캐시 |
| 3 | .shuffle(buffer) | 매 epoch 재셔플, batch 전에 |
| 4 | .batch(size, drop_remainder=True) | batch로 묶기 |
| 5 | .map(augment, num_parallel_calls=AUTOTUNE) | batch 후 augment (batched op이 더 빠름) |
| 6 | .prefetch(AUTOTUNE) | 항상 마지막 — CPU/GPU 오버랩 |
핵심 규칙: shuffle은 batch 전에. batch 다음에 shuffle하면 batch만 랜덤되고 batch 안 element들은 뭉친 상태로 남아.