tensorflow中,checkpoint和pb的区别和联系

1.checkpoint文件

1.1保存方式

tf.train.Saver()

1.2可以得到四个文件

checkpoint                  检查点文件

model.ckpt.data-xxx   保存的是参数的值

model.ckpt.index        保存的是各个参数

model.ckpt.meta        保存的是图的结构

1.3通过saver.restore()恢复整个神经网络

但是这种方式有几个缺点,首先这种模型文件是依赖 TensorFlow 的,只能在其框架下使用;其次,在恢复模型之前还需要再定义一遍网络结构,然后才能把变量的值恢复到网络中。

 

ps: 使用chpt也可以直接加载网络结构,不需要重新定义网络:

saver = tf.train.import_meta_graph('./ckpt/model.ckpt.meta') 

1.4保存和重现

使用tf.train.Saver()进行保存

使用saver.restore()进行重现

这一部分详见这一篇文章。

2.pb文件

2.1优势

(1)谷歌推荐的保存模型的方式是保存模型为 PB 文件,它具有语言独立性,可独立运行,封闭的序列化格式,任何语言都可以解析它,它允许其他语言和深度学习框架读取、继续训练和迁移 TensorFlow 的模型;

(2)保存为 PB 文件时候,模型的变量都会变成固定的,导致模型的大小会大大减小,适合在手机端运行。

2.2使用场景

实现创建模型与使用模型的解耦, 使得前向推导 inference的代码统一.

2.3格式

PB 文件是表示 MetaGraph 的 protocol buffer格式的文件

2.4需要注意

Graphdef中不保存任何 Variable 的信息,所以如果从graph_def来构建图并恢复训练的话,是不能成功的。

 

Meta Graph在具体实现上就是一个 MetaGraphDef (同样是由 Protocol Buffer来定义的). 其包含了四种主要的信息,根据Tensorflow官网,这四种 Protobuf 分别是:

[1] - MetaInfoDef,存一些元信息(比如版本和其他用户信息)

[2] - GraphDef, MetaGraph 的核心内容之一

[3] - SaverDef,图的Saver信息(比如最多同时保存的check-point数量,需保存的Tensor名字等,但并不保存Tensor中的实际内容)

[4] - CollectionDef,任何需要特殊注意的 Python 对象,需要特殊的标注以方便import_meta_graph 后取回(如 train_op, prediction 等等)
 

【参考】

1.tensorflow 模型固化文件--checkpoint 和 pb;

2.[Tensorflow] 如何从pb文件生成标准的tensorflow checkpoint文件?

你可能感兴趣的:(tensorflow)