【问题标题】:Does model.save() save the model of the last epoch or the best epoch?model.save() 是保存最后一个 epoch 还是最好 epoch 的模型?
【发布时间】:2022-02-08 18:23:21
【问题描述】:

这个单行用来保存keras深度学习神经网络模型。

model.save('my_model.h5')

model.save()是保存最后一个epoch还是最好epoch的模型?有时,最后一个 epoch 并没有提供性能改进。

【问题讨论】:

标签: machine-learning neural-network keras deep-learning


【解决方案1】:

它将模型保存在其确切的当前状态。如果这条语句在Model#fit方法完成之后,那么它代表最后一个epoch。

对于最佳时期(假设最佳 == 最小损失或更高准确度),您可以为此使用 ModelCheckpoint

epochs = 100
# other parameters...

model.fit(x, y,
          epochs=epochs,
          validation_data=valid,
          verbose=2,
          callbacks=[
              TerminateOnNaN(),
              TensorBoard('./logs'),
              ModelCheckpoint('best.h5',
                              save_best_only=True),
              ...
          ])
# the model is holding the weights optimized for 100 epochs.
model.load_weights('best.h5')  # load weights that generated the min val loss.

【讨论】:

  • 感谢您的回答。赞成。我认为总是使用ModelCheckpoint 来保存最佳模型是有意义的。为什么要保存一个不是最好的模型?至少,我想不出更好的理由。
  • 如果训练需要几个小时并且断电发生变化,那么保存最后一个是有意义的,即使它不是最好的。这样,如果出现问题,可以恢复该过程。
  • 如果最后一个 epoch 没有给出最好的权重,我认为即使我们回到给出最好权重的早期 epoch 也几乎没有学习损失。
  • 然而,您不能保证这会带来总体上最好的结果。如果您从最佳状态继续,您可能会“以与以前相同的方式进行训练”(即两次做相同的工作),而从最新(但可能不是最佳)状态开始可能会导致 much一段时间后效果更好
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 2020-03-22
  • 2022-08-20
  • 2021-09-22
  • 2021-11-28
  • 2021-08-19
  • 1970-01-01
  • 2018-12-13
相关资源
最近更新 更多