C.W.K.
Stream
Lesson 04 of 06 · published

Image loading

~8 min · data

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

폴더가 곧 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 는 *맨 끝*.

Code

폴더 트리에서 label 붙은 이미지 dataset 로드·python
# Folder structure:
# data/
#   cats/
#     cat001.jpg
#     cat002.jpg
#   dogs/
#     dog001.jpg
#     dog002.jpg

train_ds = keras.utils.image_dataset_from_directory(
    "data/",
    image_size=(224, 224),   # Resize all images
    batch_size=32,
    validation_split=0.2,
    subset="training",
    seed=42,
    label_mode="categorical", # or "int" for integer labels
)

External links

Exercise

class 별 폴더로 정리된 random image 100 개 만들어. image_dataset_from_directory 로 로드. 한 batch 의 shape 출력. cache + prefetch 추가하고 한 epoch 시간 측정.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.