Keras 3 API 文件 / 回呼 API / EarlyStopping

提前停止 (EarlyStopping)

[原始碼]

EarlyStopping 類別

keras.callbacks.EarlyStopping(
    monitor="val_loss",
    min_delta=0,
    patience=0,
    verbose=0,
    mode="auto",
    baseline=None,
    restore_best_weights=False,
    start_from_epoch=0,
)

當監控的指標停止改善時,停止訓練。

假設訓練的目標是最小化損失。因此,要監控的指標將會是 'loss',而模式將會是 'min'model.fit() 訓練迴圈將會在每個 epoch 結束時檢查損失是否不再減少,並考慮 min_deltapatience(如果適用)。一旦發現不再減少,model.stop_training 會被標記為 True,訓練將會終止。

要監控的量需要可以在 logs 字典中取得。為了做到這一點,請在 model.compile() 中傳入損失或指標。

參數

  • monitor:要監控的量。預設值為 "val_loss"
  • min_delta:被監控量要被視為改善的最小變化量,也就是說,小於 min_delta 的絕對變化將被視為沒有改善。預設值為 0
  • patience:在停止訓練之前,沒有改善的 epoch 數。預設值為 0
  • verbose:詳細模式,0 或 1。模式 0 為靜音,模式 1 會在回呼執行動作時顯示訊息。預設值為 0
  • mode{"auto", "min", "max"} 其中之一。在 min 模式下,當監控的量停止減少時,訓練將停止;在 "max" 模式下,當監控的量停止增加時,訓練將停止;在 "auto" 模式下,方向會從監控的量名稱自動推斷。預設值為 "auto"
  • baseline:監控量的基準值。如果不是 None,如果模型沒有顯示出比基準值更好的改善,訓練將會停止。預設值為 None
  • restore_best_weights:是否從監控量具有最佳值的 epoch 還原模型權重。如果為 False,則會使用在訓練的最後一步取得的模型權重。無論相對於 baseline 的效能如何,都會還原 epoch。如果沒有 epoch 比 baseline 好,訓練將會執行 patience 個 epoch,並還原該組中最佳 epoch 的權重。預設值為 False
  • start_from_epoch:開始監控改善之前要等待的 epoch 數。這允許一段暖機期,在此期間不預期有任何改善,因此訓練不會停止。預設值為 0

範例

>>> callback = keras.callbacks.EarlyStopping(monitor='loss',
...                                               patience=3)
>>> # This callback will stop the training when there is no improvement in
>>> # the loss for three consecutive epochs.
>>> model = keras.models.Sequential([keras.layers.Dense(10)])
>>> model.compile(keras.optimizers.SGD(), loss='mse')
>>> history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),
...                     epochs=10, batch_size=1, callbacks=[callback],
...                     verbose=0)
>>> len(history.history['loss'])  # Only 4 epochs are run.
4