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

Callback

~8 min · training

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

callback 은 학습의 control plane

fit() 이 루프를 돌리지만, 그 루프를 *똑똑하게* 만드는 건 callback 이야. Keras 가 정해진 지점에서 터뜨리는 hook — epoch 시작/끝, batch 마다, 전체 run — 이고, 그 안에서 callback 이 metric 읽고 행동해. 일찍 멈추고, checkpoint 저장하고, learning rate 내리고, log 쓰고. callback 없는 학습은 fire-and-forget 스크립트라 GPU 시간을 overfitting 에 날리고 best model 을 건질 방법도 안 남겨.

스크립트를 pipeline 으로 만드는 4 개

Code 섹션이 핵심 set 을 연결해. EarlyStoppingval_loss 를 보다가 patience epoch 동안 개선 없으면 중단 — 그리고 결정적으로 restore_best_weights=True 가 살짝 overfit 된 마지막 상태 말고 best 지점으로 model 을 되돌려줘. ModelCheckpointsave_best_only=True 는 진행하면서 best weight 를 disk 에 남겨서 crash 나도 run 을 안 잃어. ReduceLROnPlateau 는 진전 멈추면 LR 깎아서 plateau 에서 정확도를 더 짜내. 네 번째 자리는 logger — 여기선 CSVLogger, live curve 원하면 TensorBoard 로 교체.

이 4 개는 list 순서 상관없어 — 각자 독립적으로 state 읽거든. monitor='val_loss' 로 어떤 metric 볼지, patience 로 몇 epoch 기다릴지, min_delta 로 의미있는 변화 최소값 지정. built-in 으로 안 되면 keras.callbacks.Callback subclass 해서 필요한 hook override — on_epoch_begin, on_batch_end, on_train_end 다 현재 metric 의 logs dict 를 받아.

Code

fit() 에 연결한 핵심 callback set·python
callbacks = [
    # Stop when val_loss hasn't improved for 5 epochs
    keras.callbacks.EarlyStopping(
        monitor="val_loss",
        patience=5,
        restore_best_weights=True,  # Go back to best model
    ),

    # Save the best model
    keras.callbacks.ModelCheckpoint(
        "best_model.keras",
        monitor="val_loss",
        save_best_only=True,
    ),

    # Reduce LR when stuck
    keras.callbacks.ReduceLROnPlateau(
        monitor="val_loss",
        factor=0.5,     # Halve the LR
        patience=3,
        min_lr=1e-6,
    ),

    # Log to CSV
    keras.callbacks.CSVLogger("training_log.csv"),
]

model.fit(x_train, y_train, epochs=50, callbacks=callbacks)

External links

Exercise

위 4 callback 으로 MNIST 학습. 확인 — best.keras 파일 생성, 100 epoch 전 중단 (early stop), val_loss plateau 에 lr 감소, TensorBoard log 쓰여짐.

Progress

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

댓글 0

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

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