是否可以重新训练以前保存的 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 如何保存训练集与验证集正确率的差最小那次epoch的网络及权重