何时在Tensorflow模型保存中使用.ckpt vs .hdf5 vs .pb文件扩展名?

20

Tensorflow解释了模型可以保存为三种文件格式:.ckpt或.hdf5或.pb。有很多文档,因此最好能够对何时使用哪种文件格式进行更简单的比较。

以下是我目前的理解:

.ckpt

来自https://www.tensorflow.org/guide/checkpoint

检查点(Checkpoints)捕获模型使用的所有参数(tf.Variable对象)的确切值。检查点不包含定义模型的计算的任何描述,因此仅在可用源代码将使用保存的参数值时才有用。

因此,在训练期间进行checkpointing时,如果您知道您的源代码将保持不变,那么似乎应该使用cpkt。但是为什么推荐它而不是.pb和.hdf5呢?它是否节省空间?它是否包括其他文件格式不包含的数据?

.pb

同样来自https://www.tensorflow.org/guide/checkpoint

另一方面,SavedModel格式除了模型定义的计算的序列化描述之外,还包括模型的权重和图结构。SavedModel是用于推理的标准格式。

这似乎是在推理期间使用的标准格式,因为它包含模型的权重和图形结构。

.hdf5

来自https://www.tensorflow.org/guide/keras/save_and_load#hdf5_format

在Keras中,我们建议使用HDF5格式保存大型模型。这是一个二进制格式,允许您快速读取/写入数据。对于大多数模型而言,HDF5格式将是最合适的选择。

因此,如果您有一个大型模型,可以考虑使用.hdf5格式。

参数值(检查点)。以此格式保存的模型与创建该模型的源代码无关。因此,它们适合通过TensorFlow Serving、TensorFlow Lite、TensorFlow.js或其他编程语言(如C、C ++、Java、Go、Rust、C#等TensorFlow API)进行部署。

SavedModel格式为.pb加上一些元数据。因此,在部署模型时应保存为.pb格式?

hdf5

仅在保存模型权重(数字矩阵)时使用?

1个回答

21

看起来你已经了解一些差异,但只是要添加一些。

.ckpt
主要用于恢复训练,还允许用户自定义保存点加载(即最高准确度、最新训练模型等),并创建不同的模型从不同的训练检查点。它只保存变量或图表的权重,因此如您所述,需要具有完整的体系结构函数

.pb(Protobuffer)
这是TensorFlow文件格式,保存关于模型所有信息,包括自定义对象。这是推荐的文件格式,以确保在使用和导出到不同平台时(例如Tensorflow Lite、Tensorflow Serving等)实现最大可移植性。

.h5(HD5F)
这是原生Keras建议的保存格式,也保存有关模型的全部内容,但当在TensorFlow 2.1.0中使用时(import tensorflow.keras),它不会自动保存自定义对象,需要执行附加步骤

你可以在这个链接中了解更多相关信息。

我注意到使用.h5格式会导致检查点的大小比.ckpt小。 - Grwlf
嗨@grwlf,当你保存为.h5时,这取决于你要保存什么,但主要用于保存整个模型,因为HD5F是一种压缩文件。但是在使用Tensorflow时,您可能需要执行额外的步骤来使用数据,因为.ckpt.pb文件类型是完全支持Tensorflow的。 - TF_Support

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接