Python 在Keras中使用earlystoping回调时如何获得最佳模型?

Python 在Keras中使用earlystoping回调时如何获得最佳模型?,python,machine-learning,neural-network,keras,Python,Machine Learning,Neural Network,Keras,我正在使用基于val_acc和patience=0的earlystoping使用Keras训练神经网络早期停止在val_acc减少时立即停止训练 然而,我得到的最终模型不是最好的模型,即具有最高val_acc的模型。但我更愿意使用对应于后一个历元的模型,即对应于aval_acc的模型,该模型略低于最佳模型,这导致了提前停止 我怎样才能买到最好的 我尝试使用“保存最佳模型”并使用回拨: ModelCheckpoint(filepath='best_model.h5', monitor='val_l

我正在使用基于
val_acc
patience=0
earlystoping
使用Keras训练神经网络<代码>早期停止在
val_acc
减少时立即停止训练

然而,我得到的最终模型不是最好的模型,即具有最高
val_acc
的模型。但我更愿意使用对应于后一个历元的模型,即对应于a
val_acc
的模型,该模型略低于最佳模型,这导致了提前停止

我怎样才能买到最好的

我尝试使用“保存最佳模型”并使用回拨:

ModelCheckpoint(filepath='best_model.h5', monitor='val_loss', save_best_only=True)]

但是我得到了相同的结果。

如果您想保存最高精度,那么您应该设置检查点
monitor='val\u acc'
它将自动保存在最高精度。最低的损失未必对应最高的准确度。您还可以设置
verbose=1
,以查看保存的模型及其原因。

在中,为回调引入了一个名为
restore\u best\u weights
的新参数,如果设置为
True
(默认为
False
),它将从具有最佳监控量的历元恢复权重:

恢复最佳权重:是否从具有监控数量最佳值的历元恢复模型权重。如果
False
,则 使用在训练的最后一步获得的模型权重


我真的这么做了。我在val_acc上进行监控。我现在将verbose设置为1,以确定发生了什么。这个答案是正确的。即使将
patiente
设置为0,您的训练也将持续1个历元。这仅仅是因为从逻辑上讲,您还需要一个新纪元来确定模型不再改进。然而,
ModelCheckpoint
为您保存了最佳模型。您只需要加载它:
best\u model=load\u model(filepath='best\u model.h5')