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

Image augmentation

~8 min · data

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

공짜 데이터를 실시간 생성

작은 dataset 을 키우는 가장 싼 방법 — 사진을 더 모으는 대신, 매 epoch 마다 각 사진을 살짝 다르게 (뒤집고, 돌리고, 줌하고, 색 바꿔) 보여줘. 모델이 똑같은 입력을 두 번 못 봐서 training set 을 통째로 외우질 못해. 대신 네가 진짜 원하는 invariance 를 배우게 강제돼 — 고양이는 좀 기울어져도, 밝아져도, 가운데서 벗어나도 여전히 고양이.

학습 때 ON, inference 때 OFF

꼭 몸에 새길 동작 — Random* layer 는 training=True 일 때만 발동해. fit() 중엔 랜덤성을 주입하고, predict() / evaluate() 때는 입력을 손 안 대고 그대로 통과시켜. 정확히 원하는 거야 — augmentation 은 *학습* 을 어렵게 만들려는 거지, 채점할 이미지를 어지럽히려는 게 아니거든. 그냥 layer 라서 따로 Sequential block 에 쌓아서 아무 model 에나 끼워넣을 수 있어.

강도는 데이터에 맞춰

만능 설정 같은 건 없어. 약하게 시작 (rotation 0.05, zoom 0.05), validation accuracy 오르는 거 보면서 점점 세게. 실패 모드는 over-augmentation — 변형이 너무 과해서 *training* accuracy 마저 정체되면, 모델이 못 배울 만큼 task 를 어렵게 만든 거야. 물러나. 현실에도 맞춰 — RandomFlip("horizontal") 은 고양이엔 좋아도 손글씨 숫자엔 틀려 (뒤집힌 2 는 2 가 아니니까).

Code

내장 augmentation layer 스택·python
# Built-in Keras augmentation layers
data_augmentation = keras.Sequential([
    layers.RandomFlip("horizontal"),
    layers.RandomRotation(0.1),        # ±10% of full rotation
    layers.RandomZoom(0.1),            # ±10% zoom
    layers.RandomContrast(0.1),        # ±10% contrast
])

# Applied only during training (training=True)
# At inference time, augmentation is a no-op

External links

Exercise

CIFAR-10 을 3 augmentation 레벨 (none / mild flip+rotation 0.1 / heavy flip+rotation 0.3+zoom 0.2+contrast 0.3) 로 학습. training/validation curve 한 차트에. sweet spot 식별.

Progress

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

댓글 0

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

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