본문 바로가기
C.W.K.
Stream
Lesson 06 of 08 · published

콜백

~8 min · training

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

콜백은 학습 루프를 운영하는 제어 장치야

fit()이 학습 루프를 돌린다면, 콜백은 정해진 시점마다 그 루프를 관찰하고 개입해. 에포크나 배치의 시작과 끝, 전체 학습의 시작과 끝에서 평가지표를 읽고 중단·저장·학습률 조정·기록 같은 행동을 수행하지. 콜백 없이 긴 학습을 시작하면 과적합을 알아도 멈추지 못하고, 실행이 끊겼을 때 가장 좋았던 모델도 남지 않을 수 있어.

일회성 스크립트를 학습 파이프라인으로 바꾸는 네 가지

EarlyStoppingval_losspatience만큼의 에포크 동안 좋아지지 않으면 학습을 끝내. 이때 restore_best_weights=True를 켜야 마지막 가중치가 아니라 검증 손실이 가장 낮았던 가중치로 돌아가. ModelCheckpointsave_best_only=True를 주면 학습 도중 가장 좋은 모델을 디스크에 보존하므로 실행이 중단돼도 성과를 잃지 않아. ReduceLROnPlateau는 개선이 정체됐을 때 학습률을 낮춰 더 섬세한 탐색을 돕고, CSVLoggerTensorBoard는 과정을 나중에 분석할 수 있게 기록해.

콜백 목록의 순서는 중요하지 않아. 각 콜백이 자신의 상태와 관찰값을 독립적으로 관리하기 때문이야. monitor로 관찰할 값을, patience로 기다릴 기간을, min_delta로 의미 있는 최소 개선 폭을 정해. 기본 콜백으로 부족하다면 keras.callbacks.Callback을 상속하고 on_epoch_begin, on_batch_end, on_train_end 같은 훅을 재정의하면 돼. 훅에 전달되는 logs 딕셔너리에서 현재 평가지표를 읽을 수 있어.

Code

fit()에 연결할 핵심 콜백 묶음·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

위 네 콜백으로 MNIST 모델을 학습해 봐. best.keras 파일이 생기는지, 100에포크 전에 조기 종료되는지, val_loss가 정체될 때 학습률이 감소하는지, TensorBoard 기록이 남는지 차례로 확인해.

Progress

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

댓글 0

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

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