目录
Keras简介
保存整个模型
保存模型的权重
Keras简介
Keras 模型由多个组件组成:
- 架构或配置,它指定模型包含的层及其连接方式。
- 一组权重值(即“模型的状态”)。
- 优化器(通过编译模型来定义)。
- 一组损失和指标(通过编译模型或通过调用
add_loss()
或add_metric()
来定义)。
我们可以通过 Keras API 将这些片段一次性保存到磁盘,或仅选择性地保存其中一些片段:
- 将所有内容以 TensorFlow SavedModel 格式(或较早的 Keras H5 格式)保存到单个归档。这是标准做法。
- 仅保存架构/配置,通常保存为 JSON 文件。
- 仅保存权重值。通常在训练模型时使用。
保存整个模型
保存 Keras 模型:
model = ... model.save('my_model')
将模型加载回来:
from tensorflow import keras model = keras.models.load_model('my_model')
这将保存最完整的模型,包括:
- 模型的架构/配置
- 模型的权重值(在训练过程中学习)
- 模型的编译信息(如果调用了
compile()
) - 优化器及其状态(如果有的话,使您可以从上次中断的位置重新开始训练)
也可以通过以下方式切换到 H5 格式:
- 将
save_format='h5'
传递给save()
。 - 将以
.h5
或.keras
结尾的文件名传递给save()
。
注意!与 SavedModel 格式相比,H5 文件不包括以下两方面内容:
- 通过
model.add_loss()
和model.add_metric()
添加的外部损失和指标不会被保存(这与 SavedModel 不同)。如果模型有此类损失和指标且想要恢复训练,则需要在加载模型后自行重新添加这些损失。请注意,这不适用于通过self.add_loss()
和self.add_metric()
在层内创建的损失/指标。只要该层被加载,这些损失和指标就会被保留,因为它们是该层call
方法的一部分。 - 已保存的文件中不包含自定义对象(如自定义层)的计算图。在加载时,Keras 需要访问这些对象的 Python 类/函数以重建模型。
保存模型的权重
注意,在使用前需要确保你已安装了HDF5和其Python库h5py:
model.save_weights('my_model_weights.h5')
如果你需要在代码中初始化一个完全相同的模型,请使用:
model.load_weights('my_model_weights.h5')
如果你需要加载权重到不同的网络结构(有些层一样)中,例如fine-tune或transfer-learning,你可以通过层名字来加载模型:
model.load_weights('my_model_weights.h5', by_name=True)
实例:
"""
假如原模型为:model = Sequential()model.add(Dense(2, input_dim=3, name="dense_1"))model.add(Dense(3, name="dense_2"))...model.save_weights(fname)
"""# new model 构建的时候要和原来的模型一样 才可以使用保存的权重
model = Sequential()
model.add(Dense(2, input_dim=3, name="dense_1")) # will be loaded
model.add(Dense(10, name="new_dense")) # will not be loadedmodel.load_weights(fname, by_name=True)
念念不忘,必有回响