模型保存为SavedModel格式
# 模型保存,注意:仅仅是多了一个save_format的参数而已
# 注意:这里的'path_to_saved_model'不再是模型名称,仅仅是一个文件夹,模型会保存在这个文件夹之下
model.save('path_to_saved_model', save_format='tf')
# 加载模型,通过指定存放模型的文件夹来加载
new_model = keras.models.load_model('path_to_saved_model')
需要注意的是,这种方式依然会保存模型的所有信息,即“网络结构、权重、配置、优化器状态”四个信息,所以可以接着训练。
使用 model.save('path_to_saved_model', save_format='tf')
保存的 TensorFlow 模型是以 SavedModel
格式存储的。SavedModel
是 TensorFlow 推荐的模型持久化和部署的标准格式,它包含了模型的所有必要信息,使得模型可以在没有原始代码的情况下被加载并进行推断。以下是 SavedModel
文件夹内部结构及各文件/目录的详解:
目录结构:
path_to_saved_model/
|-- saved_model.pb # 元数据文件,包含模型的计算图结构和签名信息
|-- variables/ # 存储模型权重的目录
| |-- variables.data-00000-of-00001 # 权重数据文件
| |-- variables.index # 权重索引文件
各文件/目录详解:
saved_model.pb
:- 元数据文件:包含模型的完整计算图结构(GraphDef)以及模型的签名信息(SignatureDefs)。签名定义了模型的输入、输出接口,包括每个输入输出的名称、类型、形状等,使得客户端能够清楚地知道如何构造请求数据和解析响应结果。此外,该文件还可能包含模型的版本信息和其他元数据。
variables/
:- 权重数据目录:存储模型训练得到的权重参数。权重通常以二进制格式分块存储,便于读写和更新。
variables.data-00000-of-00001
:- 权重数据文件:包含模型所有权重的实际数值,这些数值按照变量名和变量内部结构组织。在加载模型时,TensorFlow 会根据
variables.index
文件中的信息恢复变量结构并加载对应的权重值。
- 权重数据文件:包含模型所有权重的实际数值,这些数值按照变量名和变量内部结构组织。在加载模型时,TensorFlow 会根据
variables.index
:- 权重索引文件:包含权重变量的名称、形状、类型等信息以及指向权重数据文件中相应位置的指针。这个文件帮助 TensorFlow 在加载模型时正确地解析和组织权重数据。
总结:
SavedModel
文件夹以清晰的目录结构存储了模型的计算图结构、权重参数以及模型的输入输出签名信息。这种封装使得模型可以在不依赖原始训练代码的情况下被加载并执行推断,极大地简化了模型部署的过程。在部署或迁移模型时,只需确保目标环境安装有兼容的 TensorFlow 版本,并将整个 SavedModel
文件夹传输至目标位置即可。