何时在 Tensorflow 模型保存中使用 .ckpt、.hdf5 和 .pb 文件扩展名?
Posted
技术标签:
【中文标题】何时在 Tensorflow 模型保存中使用 .ckpt、.hdf5 和 .pb 文件扩展名?【英文标题】:When to use the .ckpt vs .hdf5 vs. .pb file extensions in Tensorflow model saving? 【发布时间】:2020-05-10 05:48:19 【问题描述】:Tensorflow 解释说模型 can be saved in three file formats:.ckpt 或 .hdf5 或 .pb。有很多文档,所以最好比较一下何时使用哪种文件格式。
这是我目前的理解:
ckpt
来自https://www.tensorflow.org/guide/checkpoint:
检查点捕获所有参数的准确值(tf.Variable 对象)由模型使用。检查点不包含任何描述 由模型定义的计算,因此通常只 当将使用保存的参数值的源代码是 可用。
因此,当您知道您的源代码将相同时,您似乎应该在训练期间使用 cpkt 进行检查点。为什么建议使用 .pb 和 .hdf5?它节省空间吗?它是否包含其他文件格式不包含的数据?
pb
同样来自https://www.tensorflow.org/guide/checkpoint:
另一方面,SavedModel 格式包括一个序列化的 模型定义的计算的描述,除了 参数值(检查点)。这种格式的模型是独立的 创建模型的源代码。它们因此适用于 通过 TensorFlow Serving、TensorFlow Lite、TensorFlow.js 或 其他编程语言(C、C++、Java、Go、Rust、 C# 等 TensorFlow API)。
SavedModel 格式是 .pb 加上一些元数据。所以在部署模型时应该保存在 .pb 中吗?
hdf5
仅在保存模型权重(数字矩阵)时使用?
【问题讨论】:
【参考方案1】:您似乎已经知道一些的差异,但只是添加。
.ckpt 这主要用于恢复 训练,也允许用户自定义保存点和加载到 (即最高精度、最新训练模型等)。 并且还可以创建来自不同训练检查点的不同模型。 这只会保存变量或图表的权重,因此正如您所指出的,您需要使用完整架构和函数。
.pb(原始缓冲区) 这是 TensorFlow 文件格式,它保存了关于 模型 的所有内容,包括 自定义对象,这是推荐的文件格式以确保在使用和导出到不同平台(即 Tensorflow Lite、Tensorflow Serving 等)时具有最大的可移植性。
.h5 (HD5F) 这是 Native Keras 的建议保存格式,它还保存了关于模型的所有内容但在 TensorFlow 2.1.0 中使用时(导入 tensorflow.keras)它不会自动保存自定义对象,并且会需要额外的步骤才能执行。
您可以在link 中了解更多信息。
【讨论】:
我注意到与.ckpt
相比,使用.h5
格式会导致检查点的大小更小。
嗨@grwlf,当您保存在.h5
时,这实际上取决于您保存的内容,但这主要用于保存整个模型,因为HD5F 是一个压缩文件。但是在使用 Tensorflow 时,您可能需要执行额外的步骤来使用数据,因为 .ckpt
和 .pb
文件类型是完全支持 Tensorflow 的。以上是关于何时在 Tensorflow 模型保存中使用 .ckpt、.hdf5 和 .pb 文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章