是否可以重新训练以前保存的 keras 模型?

Posted

技术标签:

【中文标题】是否可以重新训练以前保存的 keras 模型?【英文标题】:is it possible to retrain a previously saved keras model? 【发布时间】:2019-01-22 01:56:09 【问题描述】:

我正在使用 keras 和 tensorflow 进行时间序列预测。我需要用未来的数据重新训练模型。我的问题是,这在 keras 中是否可行,我们如何做到这一点?

【问题讨论】:

Loading a trained Keras model and continue training的可能重复 【参考方案1】:

是的。

将模型另存为 .h5

当你想训练你的模型时,再次加载它并像往常一样做一个 model.fit。

确保在加载模型后不要编译模型,因为这会重置您的权重。

查看link了解更多信息

【讨论】:

【参考方案2】:

我正在为任何新用户更新答案,因为这是很久以前的事了。如果您使用的是最近的Tensorflow(例如TF2.1 或更高版本),则可以如上所述重新训练模型。

有两个重要的选项(保存为 *.tf 格式和保存为 *.h5 格式)。两种选项的保存方式相似,但加载保存的模型时有所不同。

1。保存为 *.tf 格式

当您加载保存的模型时,compile = True 默认为默认值,它将保留权重而不会出现任何问题。加载保存的模型后,您可以像往常一样使用loaded_model.fit() 重新训练。

model.save('./MyModel_tf',save_format='tf')
# loading the saved model
loaded_model = tf.keras.models.load_model('./MyModel_tf')

# retraining the model
loaded_model.fit(x_train, y_train, epochs = 10, validation_data = (x_test,y_test),verbose=1)

2。保存为 *.h5 格式

当你加载保存的模型时,compile = True 是默认的,它会显示如下警告。

WARNING:tensorflow:Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer

上述错误意味着它将使用新初始化的优化器。加载保存的模型后,您可以像往常一样使用loaded_model.fit() 重新训练。

model.save('./MyModel_h5.h5', save_format='h5')
# loading the saved model
loaded_model_h5 = tf.keras.models.load_model('./MyModel_h5.h5')

请查看详细example here。

另外最重要的一点是,当你有custom_objects时,你需要在加载模型时选择compile=False,然后用custom_objects编译模型。上述两种方法都是如此。

希望这会有所帮助。谢谢!

【讨论】:

感谢此次更新。我自己没有测试过,但我有点困惑。如果我正确理解您的回答,您是说“compile = True”会根据加载的文件类型导致两种不同的结果?

以上是关于是否可以重新训练以前保存的 keras 模型?的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 Keras 中继续训练以前的模型?

keras 如何保存训练集与验证集正确率的差最小那次epoch的网络及权重

在 Keras 训练期间动态更改损失函数,无需重新编译优化器等其他模型属性

如何减小 keras 保存模型的大小?

在 Keras 模型中保存元数据/信息

Keras - 管理历史