跳轉到

1.6 Callback 基礎

範例程式:Open In Colab

Callback 是 Keras 在訓練過程中提供的控制機制。它可以在每個 epoch 結束時檢查模型狀態,並自動停止訓練、儲存最佳模型或調整 learning rate。

1. 學習目標

這篇示範三個最常用的 callback:EarlyStoppingModelCheckpointReduceLROnPlateau。這些工具能讓訓練流程更穩定,也能降低過擬合或無效訓練的風險。

本篇定位是 Callback 的基礎入門:先知道 callback 放在哪裡、為什麼需要它、常見參數如何設定。後續 8.1 Callback 會再用完整訓練優化角度,補上更完整的紀錄保存與實驗管理流程。

Notebook 使用 Breast Cancer 二元分類資料集示範 callback 如何接到 model.fit()。這份資料是乾淨的表格分類資料,適合把注意力放在訓練控制,而不是複雜資料前處理。

2. 常見 Callback

Callback 用途
EarlyStopping 驗證集表現不再改善時,自動停止訓練
ModelCheckpoint 儲存驗證集表現最好的模型
ReduceLROnPlateau 指標停滯時降低 learning rate

3. 標準寫法

callbacks = [
    tf.keras.callbacks.EarlyStopping(
        monitor='val_loss',
        patience=10,
        restore_best_weights=True
    ),
    tf.keras.callbacks.ModelCheckpoint(
        'best_model.keras',
        monitor='val_loss',
        save_best_only=True
    ),
    tf.keras.callbacks.ReduceLROnPlateau(
        monitor='val_loss',
        factor=0.5,
        patience=5
    )
]

建立好 callback list 後,再傳入 model.fit()

history = model.fit(
    x_train,
    y_train,
    validation_data=(x_valid, y_valid),
    epochs=100,
    callbacks=callbacks
)

Callback 不改變模型架構,而是在訓練過程中根據 val_loss 等指標執行動作。

4. 為什麼 callback 很重要?

沒有 callback 時,模型會照指定 epochs 一路訓練到底,即使驗證集表現已經變差也不會停下來。加入 callback 後,訓練流程會更接近實務工作:根據驗證集表現調整,而不是盲目訓練固定輪數。

這也是公開專案與正式實驗常見的基本要求:訓練過程要能自動停止、保存最佳模型,並留下足夠資訊讓之後可以重現或比較。

Note

EarlyStopping 建議搭配 restore_best_weights=True。這樣訓練停止後,模型會回復到驗證集表現最好的那一輪,而不是最後一輪。

5. 如何套用自己的資料?

大多數任務都可以先使用同一組 callback 模板:

  1. val_loss 作為監控指標。
  2. 設定合理的 patience,避免太早停止。
  3. 使用 ModelCheckpoint 保存最佳模型。
  4. 若訓練後期卡住,可加入 ReduceLROnPlateau

如果任務沒有 validation data,就不能監控 val_loss。這時應該先建立 validation split,或改成監控訓練指標,但正式專案仍建議保留 validation data 來判斷泛化表現。

6. 小結

Callback 是讓模型訓練從「能跑」變成「可控」的重要工具。正式專案中,幾乎都應該把 callback 納入標準訓練流程。