1.6 Callback 基礎
Callback 是 Keras 在訓練過程中提供的控制機制。它可以在每個 epoch 結束時檢查模型狀態,並自動停止訓練、儲存最佳模型或調整 learning rate。
1. 學習目標
這篇示範三個最常用的 callback:EarlyStopping、ModelCheckpoint 與 ReduceLROnPlateau。這些工具能讓訓練流程更穩定,也能降低過擬合或無效訓練的風險。
本篇定位是 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 模板:
- 用
val_loss作為監控指標。 - 設定合理的
patience,避免太早停止。 - 使用
ModelCheckpoint保存最佳模型。 - 若訓練後期卡住,可加入
ReduceLROnPlateau。
如果任務沒有 validation data,就不能監控 val_loss。這時應該先建立 validation split,或改成監控訓練指標,但正式專案仍建議保留 validation data 來判斷泛化表現。
6. 小結
Callback 是讓模型訓練從「能跑」變成「可控」的重要工具。正式專案中,幾乎都應該把 callback 納入標準訓練流程。