Python Keras在最佳模型达到训练状态后保存该模型

Python Keras在最佳模型达到训练状态后保存该模型,python,tensorflow,keras,Python,Tensorflow,Keras,我使用Keras的回调模型检查点来保存最佳模型的权重 然而,有时最佳验证精度(即我监控的指标)在训练开始时很高,因为我的模型中有相当多的噪声。但我不想保存这个模型,因为它还没有时间学习 我想从某个时代获得最佳模型,理想情况下,我会通过检查训练精度>95%来获得,因此我知道在学习了训练数据集中的特征后,我得到了最佳模型 有没有办法通过Keras的回调或其他方式实现这一点?您可以编写一个自定义回调函数,该函数在每个历元后都会触发 将触发自定义回调函数中的_epoch_end函数,并将“logs”作为

我使用Keras的回调模型检查点来保存最佳模型的权重

然而,有时最佳验证精度(即我监控的指标)在训练开始时很高,因为我的模型中有相当多的噪声。但我不想保存这个模型,因为它还没有时间学习

我想从某个时代获得最佳模型,理想情况下,我会通过检查训练精度>95%来获得,因此我知道在学习了训练数据集中的特征后,我得到了最佳模型


有没有办法通过Keras的回调或其他方式实现这一点?

您可以编写一个自定义回调函数,该函数在每个历元后都会触发

将触发自定义回调函数中的_epoch_end函数,并将“logs”作为其参数之一

根据文件,参数为

历元:整数,历元的索引

日志:dict,此训练时期的度量结果,以及 如果执行了验证,则为验证期。验证结果密钥 前缀为
val\

因此,您可以通过自定义回调类中on_epoch_end方法内的日志[“accurity”]访问精度

要保存模型权重,请参阅ModelCheckpoint回调方法中的这一行,它是一个简单的函数调用

所以基本上你的代码看起来是这样的

class MyCallback(Callback):
    def __init__():
        #TODO
        #INITIALIZE ALL U NEED, lets say the accuracy threshold, filepath to save the model etc.. 
    def on_epoch_end(self,epoch,logs=None):
        if(logs["accuracy"]>0.95):
            #TODO SAVE MODEL
            self.model.save_weights(filepath)

您可以编写自定义回调。谢谢,我正在考虑这个问题。你知道我如何从这个自定义回调中访问列车精度吗?谢谢。这看起来不错,但我还需要添加逻辑以仅保存最佳模型,因此我考虑覆盖现有的ModelCheckpoint回调以添加我对列车精度的一个条件,这有意义吗?是的。您可以查看现有代码的实现,并在回调中复制和编辑它。是的!我就是这么做的。再次感谢,我会把你的答案标记为正确