我有一个fit()函数,它使用ModelCheckpoint()回调来保存模型,如果它比以前的任何模型都好,使用保存_weights_only=False,所以它保存了整个模型。这应该允许我在以后使用load_model()恢复训练。
不幸的是,在保存()/load_model()往返过程中的某个地方,度量 values 没有被保留--例如,val_loss被设置为inf。这意味着当训练恢复时,在第一个epoch之后,ModelCheckpoint()将始终保存模型,这几乎总是比早期会话中的前一个冠军更差。
我已经确定可以在恢复训练之前设置ModelCheckpoint()的当前最佳值,如下所示:
myCheckpoint = ModelCheckpoint(...)
myCheckpoint.best = bestValueSoFar
字符串
显然,我可以监控我需要的值,将它们写到一个文件中,然后在恢复时再次读取它们,但考虑到我是Keras新手,我想知道我是否错过了一些明显的东西。
2条答案
按热度按时间9gm1akwq1#
最后,我快速编写了自己的回调函数来跟踪最佳训练值,这样我就可以重新加载它们。它看起来像这样:
字符串
然后,在fit()函数中,类似这样:
型
2guxujil2#
我不认为,你必须自己存储指标值.有一个feature-request在
keras
项目非常类似的东西,但它已经关闭.也许你可以尝试使用已经提出的解决方案在那里.在keras
的哲学是不是很有用存储指标,因为你只是保存了model
,这意味着:每一层的架构和权重;而不是历史或其他任何东西。最简单的方法是创建一种
metafile
,其中包含模型的度量值和模型本身的名称。然后您可以加载metafile
,获取最佳度量值并获取产生它们的模型的名称,再次加载模型,继续训练。