Keras的EarlyStopping是否保存最佳模型?

cra*_*ash 5 python machine-learning keras

当使用类似的东西时:

callbacks = [
    EarlyStopping(patience=15, monitor='val_loss', min_delta=0, mode='min'),
    ModelCheckpoint('best-weights.h5', monitor='val_loss', save_best_only=True, save_weights_only=True)
]

model.fit(..., callbacks=callbacks)

y_pred = model.predict(x_test)
Run Code Online (Sandbox Code Playgroud)

model是使用训练过程中计算出的最佳权重进行预测还是使用最后的权重(可能不是最佳权重)?

因此,以上是安全的方法,还是best-weights.h5即使在训练后立即进行预测,也应该将其加载到模型中吗?

tod*_*day 5

在通过EarlyStopping回调停止训练之后,当前模型可能不是监视数量最高/最低的最佳模型。因此,如果您想恢复最佳权重restore_best_weights,则在Keras 2.2.3版本中引入了新的参数,用于EarlyStopping回调。

restore_best_weights:是否从时期以受监视数量的最佳值恢复模型权重。如果为False,则使用训练的最后一步获得的模型权重。


Tom*_*ini 1

EarlyStopping 回调本身不会保存任何内容(您可以仔细检查其源代码https://github.com/keras-team/keras/blob/master/keras/callbacks.py#L458)。因此,您的代码会保存在提前停止回调停止训练之前在开发集上取得最佳结果的最后一个模型。我想说的是,如果你只根据开发保存最好的模型,那么提前停止回调是没有用的(除非你不想节省时间并且你确信你不会找到任何如果继续训练,模型会更好)