폴더가 곧 label
keras.utils.image_dataset_from_directory 는 디스크의 이미지 파일 더미 → batch 된 학습용 dataset 으로 가는 표준 진입로야. 핵심은 *폴더 구조* 를 label 체계로 읽는다는 거 — class 하나당 sub-folder 하나, 안에 이미지. 부모 폴더를 가리키면 class 이름 추론하고, 이미지 로드하고, 균일한 image_size 로 resize 하고, batch 하고, shuffle — 한 호출로 다. 수동 label array 도, glob 루프도 없어.
split 은 같은 seed 로
validation_split + subset + seed 셋이 같은 폴더에서 train 과 validation 을 잘라내는 방법. 많이 놓치는 함정 — 두 번 호출해야 해. 한 번은 subset="training", 한 번은 subset="validation", 두 번 다 *같은* seed 로. seed 가 두 호출이 겹치지 않고 데이터를 일관되게 쪼개는 걸 보장해. label_mode="categorical" 은 one-hot target (categorical_crossentropy 랑 짝), "int" 는 정수 label (sparse_categorical_crossentropy 랑 짝).
그다음 빠르게
매 epoch 디스크에서 로드하면 느려. .cache() 붙여서 첫 pass 후 decode 된 이미지를 들고 있고, .prefetch(tf.data.AUTOTUNE) 붙여서 GPU 가 현재 batch 씹는 동안 CPU 가 다음 batch 준비하게 해. 둘이 epoch 시간 종종 절반 이하로 줄여. 순서 중요 — random augmentation 보다 *앞*에 cache (cache 가 raw 이미지 저장하고 augmentation 은 매 epoch 변하게), prefetch 는 *맨 끝*.