Keras 3 API 文档 / 回调 API / 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