【Tensorflow】使用tensorflow的freeze_graph.py工具固化pb权重

这里有两种方法,我使用的tensorflow版本是r1.13。

一、.index、.meta、.data文件固化

一般情况下用tf.train.Saver.save()方式保存下来的checkpoint会产生四个文件:

  • checkpoint #文本文件,该文件记录了保存的最新的checkpoint文件以及其他checkpoint文件列表
  • model.ckpt.data-00000-of-00001 #.data文件保存了当前参数值
  • model.ckpt.index #.index文件保存了当前参数名
  • model.ckpt.meta #.meta文件保存了当前图结构

执行命令:

python tensorflow/python/tools/freeze_graph.py \
--input_meta_graph=model.ckpt.meta \
--input_checkpoint=model.ckpt \
--output_graph=frozen_graph_meta.pb \
--output_node_name=logits/BiasAdd \
--input_binary=True

二、pb文件固化

网上介绍的大多是以ckpt和pb文件进行固化,但是因为默认生成的只有上面提到的三个文件,很多人不知道需要传入的一个pb文件是哪里来的。

其实只需要在代码中加入

tf.train.write_graph(sess.graph_def, '', 'graph.pbtxt')

这样就会生成一个不含权重的基础pb文件。下面就可以用这个pb文件和ckpt固化网络了。

python tensorflow/python/tools/freeze_graph.py \
--input_graph=graph.pbtxt \
--input_checkpoint=model.ckpt \
--output_graph=frozen_graph.pb \
--output_node_name=logits/BiasAdd 

【Tensorflow】使用tensorflow的freeze_graph.py工具固化pb权重_第1张图片

在固化权重的过程中可能会遇到的问题请参考链接:

【Tensorflow】UnicodeDecoderError: 'utf-8' codec can't decode byte 0xd8 in position 1: invalid continuation byte

【Tensorflow】tensorflow.python.framework.errors_impl.DataLossError: not an sstable(bad magic number)

【Tensorflow】ImportError: cannot import name 'checkpoint_management' tf1.13

你可能感兴趣的:(tensorflow)