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

8

我正在使用Keras和TensorFlow进行时间序列预测。我需要用未来的数据重新训练模型。我的问题是,Keras是否支持这一功能?如果支持,我们该如何实现?


1
可能是加载已训练的Keras模型并继续训练的重复问题。 - CAta.RAy
2个回答

23

是的。

将您的模型保存为.h5文件。

当您想要训练您的模型时,再次加载它并像正常情况下一样执行model.fit操作。

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

有关更多信息,请参见此链接


1
嗨,我认为如果您保持相同的优化程序并保持其状态,则可以无限次编译。compile()不会影响权重。在这里: https://www.tensorflow.org/guide/keras/save_and_serialize “Keras还支持保存一个单独的HDF5文件,其中包含模型的架构、权重值和compile()信息。” load_model()使用其以前的优化器和损失函数来编译()。 检查: https://www.tensorflow.org/api_docs/python/tf/keras/Model 此外,在微调冻结和解冻层之后,您使用compile()来编译新更改的代码。 - nikolaosmparoutis

9
我会更新答案以适应新用户,因为这是很久以前的内容。如果您正在使用最近的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')

请查看详细的示例
另一个最重要的点是,当您有自定义对象时,加载模型时需要选择compile=False,然后使用自定义对象编译模型。对于上述两种方法都是如此。
希望这可以帮到你。谢谢!

谢谢你的更新。我自己还没有测试过,但是有点困惑。如果我理解你的答案正确的话,你是说“compile = True”会导致两种不同的结果,取决于加载的文件类型? - VegardKT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接