Keras 2 API文档 / 回调API / EarlyStopping

EarlyStopping

[源代码]

EarlyStopping

tf_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: 要监控的数量。
  • min_delta: 被视为改进的监控数量的最小变化,即小于min_delta的绝对变化将被视为无改进。
  • patience: 在停止训练之前,无改进的epoch数量。
  • verbose: 详细程度模式,0或1。模式0为静默模式,模式1在回调执行操作时显示消息。
  • mode: {"auto", "min", "max"}中的一个。在min模式下,当监控的数量停止下降时,训练将停止;在"max"模式下,当监控的数量停止增加时,训练将停止;在"auto"模式下,方向将根据监控数量的名称自动推断。
  • baseline: 监控数量的基线值。如果模型没有显示出相对于基线的改进,训练将停止。
  • restore_best_weights: 是否恢复监控数量的最佳值对应的epoch的模型权重。如果为False,则使用训练最后一步获得的模型权重。无论性能相对于baseline如何,都会恢复一个epoch。如果没有epoch相对于baseline有改进,训练将运行patience个epoch,并恢复该集合中最佳epoch的权重。
  • start_from_epoch: 在开始监控改进之前等待的epoch数量。这允许一个预热期,在此期间不期望有任何改进,因此不会停止训练。

示例

>>> callback = tf.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 = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
>>> model.compile(tf.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