【问题标题】:Is there a way to save a model at a specified epoch in tf.keras?有没有办法在 tf.keras 中的指定时期保存模型?
【发布时间】:2019-08-17 16:36:37
【问题描述】:

使用 tf.keras.callbacks,我只能通过选择一个要监控的属性(通常是验证准确度)来自动保存最佳模型,但有时,我需要根据验证和训练准确度的比较来保存它.我该怎么做?

tf.keras.history 文件是否记录了模型在每个时期的权重?如果是这样,我如何通过指定我想要的时代来从历史文件中保存我的模型?这是另一种可能的解决方案。

这是我遇到的情况:有时,我的验证准确度在早期阶段非常高(我想这纯粹是偶然),而我的训练准确度仍然远低于它。这个时期最终成为自动保存的模型。这是一个糟糕的模型,因为它的训练精度很差,但它却因为它的高验证精度而被保存下来。如果它保存在训练和验证准确性相遇的地方,那将是一个非常好的模型。因此,在每个时期,我更愿意比较训练准确度和验证准确度,选择两者中最低的一个,并据此决定我的最佳模型。关于如何做到这一点的任何建议?

【问题讨论】:

    标签: python tensorflow keras tf.keras


    【解决方案1】:

    您可以像这样实现自定义回调:

    class CustomModelCheckpoint(tf.keras.callbacks.Callback):
        def on_epoch_end(self, epoch, logs=None):
            # logs is a dictionary
            print(f"epoch: {epoch}, train_acc: {logs['acc']}, valid_acc: {logs['val_acc']}")
            if logs['val_acc'] > logs['acc']: # your custom condition
                self.model.save('model.h5', overwrite=True)
    
    cbk = CustomModelCheckpoint()
    model.fit(....callbacks=[cbk]...)
    

    【讨论】:

    • 正是我想要的!谢谢!
    【解决方案2】:

    https://keras.io/callbacks/检查回调ModelCheckpoint

    您可以保存每个 epoch 的模型,并在文件名中包含准确度/val 准确度(或之后检查历史对象)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 2020-05-27
      • 2019-07-27
      • 1970-01-01
      • 2020-03-21
      • 2018-02-01
      • 2012-07-31
      相关资源
      最近更新 更多