【问题标题】:Training a keras model on pretrained weights using load_weights()使用 load_weights() 在预训练权重上训练 keras 模型
【发布时间】:2021-04-14 09:21:15
【问题描述】:

我在 Databricks 环境中使用自定义 keras 模型。 对于自定义 keras 模型,model.save(model.h5) 不起作用,因为自定义模型不可序列化。相反,建议使用model.save_weights(path) 作为替代。

model.save_weights(pathDirectory) 有效。这会在 pathDirectory 中生成 3 个文件 checkpoint,.data-00000-of-00001,.index

对于加载重量,以下机制工作正常。

model = Model()

model.load_weights(path)

但我想在我刚刚保存的预训练权重上训练我的模型。就像我保存了模型权重一样,然后继续对这些保存的权重进行训练。

所以,当我加载模型权重并应用训练循环时,我收到了这个错误,TypeError: 'CheckpointLoadStatus' object is not callable

【问题讨论】:

  • 你试过没有“.h5”结尾吗?
  • 是的,我尝试了很多变化。 “.h5”,没有扩展名,“.tf”,“.hpy5”等。model.save()在任何情况下都不起作用,除了“.hpy5”,但是model.load(“.hpy5”)不起作用.
  • 好的,你是在加载权重后重新编译模型吗?
  • 我只是这样做model = model.load_weights(model_path) 然后训练循环照常继续
  • 好的,我认为您需要在加载权重后重新编译模型。加载权重仅加载权重,因此您需要重新创建模型结构(您的层)、优化器和损失,然后在拟合之前对其进行编译。

标签: tensorflow keras databricks


【解决方案1】:

经过大量研究,我找到了解决方法,

我们也可以使用 model.save("model.hpy5") 并读取数据块中保存的模型。

model.h5 不适用于定制模型,但适用于标准模型。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2017-08-19
    • 2019-01-20
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    相关资源
    最近更新 更多