pb是protocol(协议) buffer(缓冲)的缩写。TensorFlow训练模型后存成的pb文件,是一种表示模型(神经网络)结构的二进制文件,将图中的变量保存成为常量,便于调用,一般无法将pb文件映射成源代码。pb文件的能够保存tensorflow计算图中的操作节点以及对应的各张量,方便我们日后直接调用之前已经训练好的计算图。

注:pb文件可以在训练时直接保存,也可以用.ckpt文件转化为.pb文件。

准备所需的文件:

1、训练完成的.index,.data,.mate文件。

2、编写.ckpt文件转.pb文件的代码。

output_node_names = ["Input/X_placeholder", "Inference/output"]#指定输入输出节点名
def freeze_pb(pb_file,ckpt_path):with tf.name_scope('Input'):input_data = tf.placeholder(dtype=tf.float32,shape=[None, 784], name='X_placeholder')with tf.name_scope('Inference'):# batch:20 输入:784,通道:1,输出:10W = tf.Variable(initial_value=tf.random_normal(shape=[784,10], stddev=0.01), name='Weights')b = tf.Variable(initial_value=tf.zeros(shape=[10]), name='bias')print(W)logits = tf.matmul(input_data, W) + bpred = tf.nn.softmax(logits=logits,name='output')sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True))saver = tf.train.Saver()saver.restore(sess, ckpt_path)converted_graph_def = tf.graph_util.convert_variables_to_constants(sess,input_graph_def=sess.graph.as_graph_def(),output_node_names=output_node_names)with tf.gfile.GFile(pb_file, "wb") as f:f.write(converted_graph_def.SerializeToString())

注:

1、在将ckpt文件转为pb文件的时候,一定要将输入节点名称和输出节点名称与设计的网络中的输入节点名称和输出节点名称对应起来,否则会报错。例如这里将

Input/X_placeholder改为Input/X_placeholder_e时会有如下的报错。

AssertionError: Input/X_placeholdere_e is not in graph.

output_node_names = ["Input/X_placeholder", "Inference/output"]指定输入输出。

2、tf.graph_util.convert_variables_to_constants中的output_node_names变量来指定保存的节点名称而不是张量的名称,“Input/X_placeholder:0”是张量的名称而"Input/X_placeholder"表示的是节点的名称。在固化pb文件的时候用节点名称,在调用pb文件是使用张量名称。

执行上述代码后会在指定的目录下生成pb文件。

3、编写调用pb文件代码。

return_enement = ["Input/X_placeholder:0", "Inference/output:0"]#指定输入输出张量名称
def Load_PbFile(pb_file,image):imagedata=np.array(image).reshape([1,784])config = tf.ConfigProto()config.gpu_options.allow_growth = Truewith tf.gfile.FastGFile(pb_file, 'rb') as f:frozen_graph_def = tf.GraphDef()frozen_graph_def.ParseFromString(f.read())elements = tf.import_graph_def(frozen_graph_def,return_elements=return_enement)with tf.Session(config=config) as sess:sess.run(tf.global_variables_initializer())prob=sess.run([elements[1]],feed_dict={elements[0]:imagedata})tolist=list(prob[0][0])classes = tolist.index(max(tolist))print(classes)

这里return_enement = ["Input/X_placeholder:0", "Inference/output:0"]指定的是张量名称,区别于output_node_names = ["Input/X_placeholder", "Inference/output"],否则在运行时会出现TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a Operation into a Tensor.的错误。

tensorflow之pb文件保存与载入相关推荐

  1. TF:利用TF的train.Saver将训练好的W、b模型文件保存+新建载入刚训练好模型(用于以后预测新的数据)

    TF:利用TF的train.Saver将训练好的W.b模型文件保存+新建载入刚训练好模型(用于以后预测新的数据) 目录 输出结果 代码设计 输出结果 代码设计 import tensorflow as ...

  2. Tensorflow之pb文件分析

    使用Tensorboard分析pb文件有两种方法: 方法一: 利用pb文件恢复计算图 利用Tensorboard查看计算图的结构 方法二 利用tensorflow提供的tools里的import_pb ...

  3. tensorflow查看pb文件

    运行下面代码: from tensorflow.python.platform import gfile import tensorflow as tfmodel = './saved_pb/expe ...

  4. tensorflow保存数据为.pb格式和加载.pb文件(转)

    最近接触了tensorflow的object detection API发现里面读取的预先训练模型都是pb格式. 谷歌推荐的保存模型的方式是保存模型为 PB 文件,它具有语言独立性,可独立运行,封闭的 ...

  5. tensorboard ckpt pb 模型的输出节点_FlyAI小课堂:Tensorflow-模型和数据的保存和载入...

    在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台.每周免费提供项目开源算法样例,支持 ...

  6. 【tensorflow】生成.pb文件

    Saving, Freezing, Optimizing for inference, Restoring of tensorflow models 在训练完tensorflow模型后,会有三个文件: ...

  7. 模型保存的序列化文件pb 什么是PB文件 pb是protocol(协议) buffer(缓冲)的缩写

    pb是protocol(协议) buffer(缓冲)的缩写 TensorFlow 模型保存为pb文件的解释,怎么使用pb文件/模型的Save and Restore_u014264373的博客-CSD ...

  8. TensorFlow:将ckpt文件固化成pb文件

    TensorFlow:将ckpt文件固化成pb文件 本文是将yolo3目标检测框架训练出来的ckpt文件固化成pb文件,主要利用了GitHub上的该项目. 为什么要最终生成pb文件呢?简单来说就是直接 ...

  9. 使用C#把Tensorflow训练的.pb文件用在生产环境

    训练了很久的Tf模型,终于要到生产环境中去考验一番了.今天花费了一些时间去研究tf的模型如何在生产环境中去使用.大概整理了这些方法. 继续使用分步骤保存了的ckpt文件 这个貌似脱离不了tensorf ...

最新文章

  1. 【Python初级】009-错误与异常
  2. eclipse如何使用log4j详解,你get了吗???
  3. Python学习—pyhton中的进程
  4. virtual多态 你不知道的事情
  5. php无法用mail函数发送邮件之原因
  6. List与Set接口的方法
  7. 基于JAVA+Swing+MYSQL的电影院购票管理系统
  8. Linux下安装Docker,报错docker: unrecognized service的两种解决方案
  9. 并发编程 进程基础
  10. 天体物理科研作图格式-要求-plot_example.py
  11. 使用IK中文分词器做敏感词过滤
  12. SPEA2算法原理及应用方向
  13. Kibana:改善地理位置数据摄入 - 7.10
  14. Android中设置ListView内容刷新问题
  15. android 恢复出厂,安卓(Android)手机恢复出厂设置的方法
  16. Sailfish OS 2.0之初体验
  17. fcpx如何用光流法_5分钟掌握FCPX所有剪辑技巧
  18. 拓嘉启远电商:拼多多店铺没有成交,原因是什么
  19. PID的增量式与位置式
  20. Android 短彩信数据模型介绍

热门文章

  1. 思迈特软件Smartbi完成C轮融资,推动国产BI加速进入智能化时代
  2. 操作系统成组链接法(@王道论坛)
  3. Electron常见问题 3-Error: sha512 checksum mismatch, expected
  4. android的contentResolver,contentProvider简介(附带个获取手机联系人及头像实例)
  5. 光脚丫思考Vue3与实战:第04章 模板语法 第04节 指令的缩写
  6. linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生...
  7. picgo 上传成功,无法显示图片
  8. VS2013+WDK8.1 驱动开发环境配置
  9. python大数快速判断质数与分解质因数
  10. 手机壳 套图 软件 imageEn(Delphi实现)