我正在使用基于val_acc
和patience=0
的earlystopping
使用Keras来训练一个神经网络。 earlystopping
在val_acc
减少时立即停止训练。
然而,我得到的最后一个模型并不是最好的模型,即具有最高val_acc
的模型。 但是我更愿意使用与之后的纪元相对应的模型,即与val_acc
相对应的模型,该模型只比最好的模型低一点,并且导致了早期停止!
我怎么才能得到最好的呢?
我尝试使用回调的save the best model:
ModelCheckpoint(filepath='best_model.h5', monitor='val_loss', save_best_only=True)]
但我得到了同样的结果。
如果您想保存最高精度,那么您应该设置检查点monitor='val_acc'
,它将自动保存为最高精度。 最低损耗不一定对应最高精度。 您还可以设置verbose=1
来查看保存的是哪个模型以及为什么。
在Keras 2.2.3中,为earlystopping
回调引入了一个名为restore_best_weights
的新参数,如果将该参数设置为true
(默认为false
),它将从具有最佳监控量的纪元恢复权重:
restore_best_weights:是否从具有监控量的最佳值的纪元恢复模型权重。 如果false
,则使用在训练的最后一步获得的模型权重。