当前位置: 代码迷 >> 综合 >> 深度学习TensorFlow---保存和加载 Keras 模型
  详细解决方案

深度学习TensorFlow---保存和加载 Keras 模型

热度:38   发布时间:2023-11-22 20:34:29.0

目录

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)


 

念念不忘,必有回响

  相关解决方案