何时在 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 文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow训练好的模型,怎么调用?

在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现

何时在模型中使用“保存”与“保存!”?

tensorflow中一种融合多个模型的方法

保存tensorflow模型为pb文件

如何在tensorflow中使用保存的模型[重复]