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

版权声明:本文为博主原创文章,未经作者允许请勿转载。 https://blog.csdn.net/heiheiya https://blog.csdn.net/heiheiya/article/details/89214892

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

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

一般情况下用tf.train.Saver.save()方式保存下来的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.pb')

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

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

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

【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

猜你喜欢

转载自blog.csdn.net/heiheiya/article/details/89214892