精华内容
下载资源
问答
  • import tensorflow as tf from tensorflow.python.platform import gfile import numpy as np import time (x_train, y_train),(x_test, y_test) = tf.keras.datasets.mnist.load_data() config = tf.ConfigProto() ...
    import tensorflow as tf
    from tensorflow.python.platform import gfile
    import numpy as np
    import time
    (x_train, y_train),(x_test, y_test) = tf.keras.datasets.mnist.load_data()
    config = tf.ConfigProto()
    sess = tf.Session(config=config)
    with gfile.FastGFile('lenet5.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='')
        opname = [tensor.name for tensor in tf.get_default_graph().as_graph_def().node] 
        print(opname)
    # 获取输入tensor
    x = tf.get_default_graph().get_tensor_by_name("input_1:0")    # 不知道输入名时通过节点名查,一般情况下是每一个节点tf.get_default_graph().as_graph_def().node[0].name,名字构成后有个:0
    print("input:", x)
    # 获取预测tensor
    pred = tf.get_default_graph().get_tensor_by_name("dense_1/Softmax:0")  # tf.get_default_graph().as_graph_def().node[-1].name,有可能不是是最后一一个
    print(pred)
    
    start = time.time()
    for tx,ty in zip(x_test,y_test):
        pre = sess.run(pred, feed_dict={x:tx.reshape(1,28,28,1)/255}) # 预测直接run输出,传入输入
        pre = np.argmax(pre)
      #  print("Test Case: " + str(ty))
      #  print("Prediction: " + str(pre))
    print(time.time()-start)
    

     

    展开全文
  • tensors, feed_dict=input_dict) return output_values 我的问题是对TensorFlow基础用法掌握不够,代码能力太次,简单的代码读了半天才懂,然后知道这段代码应该放到哪里。还是要好好打基础的呀。

    ValueError: Input 0 of node import/MobilenetV2/expanded_conv/depthwise/BatchNorm/cond/Assign/Switch was passed float from import/MobilenetV2/expanded_conv/depthwise/BatchNorm/moving_mean:0 incompatible with expected float_ref.
    找到的解决方法:
    ckpt转pb,batch normalzition 出现的ValueError问题
    好多人说有用,但是我的还没解决
    参考:https://www.cnblogs.com/bonelee/p/8445261.html
    还是没解决
    我的报错代码:
    pb_loader.py

    ...省略...
    
        def _load_pb(self):
            return_elements = self.input_nodes + self.output_nodes
            input_node_num = len(self.input_nodes)
    
            with tf.gfile.GFile(self.model_path, "rb") as f:
                graph_def = tf.GraphDef()
                graph_def.ParseFromString(f.read())
            self.graph = tf.Graph()
    
    
            with self.graph.as_default() as g:
    
    
    
                tensor_nodes = tf.import_graph_def(
                    graph_def, return_elements=return_elements)
                self.input_tensors = tensor_nodes[:input_node_num]
                self.output_tensors = tensor_nodes[input_node_num:]
            self.sess = tf.Session(graph=self.graph)
    
        def run_pb(self, input_list):
            if not len(input_list) == len(self.input_nodes):
                raise Exception(
                    f"Model input error!.Expected {len(self.input_nodes)} input, got {len(input_list)}")
            input_dict = {}
            for val, name in zip(input_list, self.input_tensors):
                input_dict[name] = val
            output_values = self.sess.run(
                self.output_tensors, feed_dict=input_dict)
            return output_values
    
    

    后来看了这个GitHub issue下的解答,找到了这个,顺利解决

    for node in graph_def.node:
        if node.op == 'RefSwitch':
          node.op = 'Switch'
          for index in xrange(len(node.input)):
            if 'moving_' in node.input[index]:
              node.input[index] = node.input[index] + '/read'
        elif node.op == 'AssignSub':
          node.op = 'Sub'
          if 'use_locking' in node.attr: del node.attr['use_locking']
        elif node.op == 'AssignAdd':
          node.op = 'Add'
          if 'use_locking' in node.attr: del node.attr['use_locking']
        elif node.op == 'Assign':
          node.op = 'Identity'
          if 'use_locking' in node.attr: del node.attr['use_locking']
          if 'validate_shape' in node.attr: del node.attr['validate_shape']
          if len(node.input) == 2:
            # input0: ref: Should be from a Variable node. May be uninitialized.
            # input1: value: The value to be assigned to the variable.
            node.input[0] = node.input[1]
            del node.input[1]
    

    修改后的代码如下:

        def _load_pb(self):
            return_elements = self.input_nodes + self.output_nodes
            input_node_num = len(self.input_nodes)
            with tf.gfile.GFile(self.model_path, "rb") as f:
                graph_def = tf.GraphDef()
                graph_def.ParseFromString(f.read())
            self.graph = tf.Graph()
    ###########添加的部分#####
            for node in graph_def.node:
                if node.op == 'RefSwitch':
                    node.op = 'Switch'
                    for index in range(len(node.input)):
                        if 'moving_' in node.input[index]:
                            node.input[index] = node.input[index] + '/read'
                elif node.op == 'AssignSub':
                    node.op = 'Sub'
                    if 'use_locking' in node.attr: del node.attr['use_locking']
                elif node.op == 'AssignAdd':
                    node.op = 'Add'
                    if 'use_locking' in node.attr: del node.attr['use_locking']
                elif node.op == 'Assign':
                    node.op = 'Identity'
                    if 'use_locking' in node.attr: del node.attr['use_locking']
                    if 'validate_shape' in node.attr: del node.attr['validate_shape']
                    if len(node.input) == 2:
                        node.input[0] = node.input[1]
                        del node.input[1]
    ####################################################
            with self.graph.as_default() as g:
                # fix batch norm nodes
                tensor_nodes = tf.import_graph_def(
                    graph_def, return_elements=return_elements)
                self.input_tensors = tensor_nodes[:input_node_num]
                self.output_tensors = tensor_nodes[input_node_num:]
            self.sess = tf.Session(graph=self.graph)
    
        def run_pb(self, input_list):
            if not len(input_list) == len(self.input_nodes):
                raise Exception(
                    f"Model input error!.Expected {len(self.input_nodes)} input, got {len(input_list)}")
            input_dict = {}
            for val, name in zip(input_list, self.input_tensors):
                input_dict[name] = val
            output_values = self.sess.run(
                self.output_tensors, feed_dict=input_dict)
            return output_values
    

    我的问题是对TensorFlow基础用法掌握不够,代码能力太次,简单的代码读了半天才懂,然后知道这段代码应该放到哪里。还是要好好打基础的呀。

    展开全文
  • 再进入正题前,我们先介绍一下checkpoint(ckpt)和pb的区别和联系 model 保存方法 结果文件 加载 ckpt tf.train.Saver() 主要的4个文件 checkpoint model.ckpt.data-xxx model....

    再进入正题前,我们先介绍一下checkpoint(ckpt)和pb的区别和联系

    model保存方法结果文件加载
    ckpttf.train.Saver()

    主要的4个文件

    checkpoint                  

    model.ckpt.data-xxx  

    model.ckpt.index     

    model.ckpt.meta        

    tf.train.Saver() saver.restore() 

    pb
    SerializeToString()函数序列化
    
    pb文件见下文

    pb模型文件具有语言独立性,可独立运行,封闭的序列化格式,支持其他语言解析,而且模型的变量都是固定的,模型的大小减小,一个模型文件也便于之后的使用。

    tf生成pb文件

    import tensorflow as tf
    from tensorflow.python.framework import graph_util
    
    with tf.Session(graph=tf.Graph()) as sess:
        # 定义输入变量名
        x = tf.placeholder(tf.int32, name='x')
        y = tf.placeholder(tf.int32, name='y')
        b = tf.Variable(1, name='b')
        xy = tf.multiply(x, y)
        # 输出,需要加上变量名
        output = tf.add(xy, b, name='output')
    
        sess.run(tf.global_variables_initializer())
    
        # convert_variables_to_constants 需要指定output_node_names
        constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['output'])
    
        print(sess.run(output, feed_dict={x: 2, y: 5}))
    
        # 写入序列化的pb文件
        with tf.gfile.FastGFile('model.pb', mode='wb') as f:
            f.write(constant_graph.SerializeToString())

    tf加载pb文件

    from tensorflow.python.platform import gfile
    
    sess = tf.Session()
    with gfile.FastGFile('model.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='')  # 导入计算图
    
    # 需要有一个初始化的过程
    sess.run(tf.global_variables_initializer())
    
    # 输入
    input_x = sess.graph.get_tensor_by_name('x:0')
    input_y = sess.graph.get_tensor_by_name('y:0')
    
    op = sess.graph.get_tensor_by_name('output:0')
    
    res = sess.run(op, feed_dict={input_x: 5, input_y: 5})
    print(res)

    tips:应用到自己的程序中记得在输出添加变量名(如:output = tf.add(xy, b, name='output')),加载时获取输入输出变量名,将值传给输入变量,sess.run()即可

    展开全文
  • 生成->解析->输出结果 注意点 最近很多同事要求给培训下如何调用别人...生成PB文件-Python 注意定义request和response的名字 import os import tensorflow as tf from tensorflow.python.framework import g

    生成->解析->输出结果

    注意点

    最近很多同事要求给培训下如何调用别人tensorflow编译好的算法模型,记一笔

    如果出现引入tensorflow错误,记得将python路径选择为tensorflow下的安装路径
    直接上代码,如下

    简单输入输出:int->int

    生成PB文件-Python

    注意定义request和response的名字

    import os
    
    import tensorflow as tf
    from tensorflow.python.framework import graph_util
    
    pb_file_path = os.getcwd()
    # 该文件作用:将模型序列化至pb文件
    with tf.Session(graph=tf.Graph()) as sess:
        # name = x 代表输入request的json key = x
        x = tf.placeholder(tf.int32, name='x')
        # y = tf.placeholder(tf.int32, name='y')
        b = tf.Variable(0, name='b')
        # print(tf.VERSION)
        xy = tf.multiply(x, x)
        # 这里的输出需要加上name属性,response的json key=op_to_store
        op = tf.add(xy, b, name='results')
    
        sess.run(tf.global_variables_initializer())
    
        # convert_variables_to_constants 需要指定output_node_names,list(),可以多个
        constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['results'])
    
        # 测试 OP
        feed_dict = {x: 3}
        print(sess.run(op, feed_dict))
    
        # 写入序列化的 PB 文件
        with tf.gfile.FastGFile(pb_file_path + 'model.pb', mode='wb') as f:
            f.write(constant_graph.SerializeToString())
    
            # 输出
            # INFO:tensorflow:Froze 1 variables.
            # Converted 1 variables to const ops.
            # 31
    
    

    python解析PB文件

    注意解析request和response的名字

    import tensorflow as tf
    import os
    from tensorflow.python.platform import gfile
    pb_file_path = os.getcwd()
    
    sess = tf.Session()
    with gfile.FastGFile(pb_file_path+'model.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='') # 导入计算图
    
    # 需要有一个初始化的过程
    sess.run(tf.global_variables_initializer())
    
    
    # 输入
    input_x = sess.graph.get_tensor_by_name('x:0')
    # input_y = sess.graph.get_tensor_by_name('y:0')
    
    op = sess.graph.get_tensor_by_name('results:0')
    
    ret = sess.run(op,  feed_dict={input_x: 3})
    print(ret)
    # 输出 26
    

    java解析PB文件

    import org.apache.commons.io.IOUtils;
    import org.tensorflow.Graph;
    import org.tensorflow.Session;
    import org.tensorflow.Tensor;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class PBFileAnalizy {
        public static void main(String[] args) throws IOException {
    
            // byte[] graphDef = loadTensorflowModel("D:/Users/crwu/IdeaProjects/workspace/kbqa20201016/TensorFlowTestmodel.pb");
    
            Graph graph = new Graph();
    
            byte[] graphBytes = IOUtils.toByteArray(new FileInputStream("D:/Users/crwu/IdeaProjects/workspace/kbqa20201016/TensorFlowTestmodel.pb"));
            graph.importGraphDef(graphBytes);
            try(Session session = new Session(graph)){
                Tensor<?> out = session.runner()
                        .feed("x",Tensor.create(3))
                        .fetch("results").run().get(0);
                int i = out.intValue();
                System.out.println(i);
            }
        }
    }
    

    复杂输入输出:obj->obj

    需要注意,这里需要将request拆解至Runner的feed,fetch后得到的list对象需要封装近response,tensorflow都是张量,不支持封装obj

    生成PB文件-Python

    import os
    
    import tensorflow as tf
    from tensorflow.python.framework import graph_util
    
    pb_file_path = os.getcwd()
    # 该文件作用:将模型序列化至pb文件
    with tf.Session(graph=tf.Graph()) as sess:
        # name = x 代表输入request的json key = x
        x = tf.placeholder(tf.int32, name='x')
        y = tf.placeholder(tf.string, name='y')
        # 返回的第一个参数
        op1 = tf.multiply(x, x, name='results_xx')
        # 返回的第二个参数
        op2 = tf.string_join([y, y], '##', name='results_yy')
    
        sess.run(tf.global_variables_initializer())
    
        # convert_variables_to_constants 需要指定output_node_names,list(),可以多个
        constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['results_xx', 'results_yy'])
    
        # 测试 OP
        feed_dict = {x: 3, y: 'text'}
        print(sess.run([op1, op2], feed_dict))
    
        # 写入序列化的 PB 文件
        with tf.gfile.FastGFile(pb_file_path + 'model.pb', mode='wb') as f:
            f.write(constant_graph.SerializeToString())
    
        # 输出
        # INFO:tensorflow:Froze 1 variables.
        # Converted 1 variables to const ops.
        # 31
    
    

    python解析PB文件

    import os
    
    import tensorflow as tf
    from tensorflow.python.platform import gfile
    
    pb_file_path = os.getcwd()
    
    sess = tf.Session()
    with gfile.FastGFile(pb_file_path + 'model.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='')  # 导入计算图
    
    # 需要有一个初始化的过程
    sess.run(tf.global_variables_initializer())
    
    # 输入
    input_x = sess.graph.get_tensor_by_name('x:0')
    input_y = sess.graph.get_tensor_by_name('y:0')
    
    op1 = sess.graph.get_tensor_by_name('results_xx:0')
    op2 = sess.graph.get_tensor_by_name('results_yy:0')
    
    ret = sess.run([op1, op2], feed_dict={input_x: 3, input_y: 'text'})
    print(ret)
    # 输出 26
    
    

    java解析PB文件

    import org.apache.commons.io.IOUtils;
    import org.tensorflow.Graph;
    import org.tensorflow.Session;
    import org.tensorflow.Tensor;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.List;
    
    public class PBFileAnalizy {
        public static void main(String[] args) throws IOException {
            MyRequest myRequest = new MyRequest(3, "test");
            MyResponse result = run(myRequest);
            System.out.println(result);
    
        }
    
        public static MyResponse run(MyRequest myRequest) throws IOException {
            MyResponse myResponse = null;
            String charsetName = "UTF-8";
            Graph graph = new Graph();
            byte[] graphBytes = IOUtils.toByteArray(new FileInputStream("D:/Users/crwu/IdeaProjects/workspace/kbqa20201016/TensorFlowTestmodel.pb"));
            graph.importGraphDef(graphBytes);
            try (Session session = new Session(graph)) {
                List<Tensor<?>> out = session.runner()
                        // 解析request
                        .feed("x", Tensor.create(myRequest.getX()))
                        .feed("y", Tensor.create(myRequest.getY().getBytes(charsetName)))
                        .fetch("results_xx").fetch("results_yy").run();
    
                int x_res = out.get(0).intValue();
                String y_res = new String(out.get(1).bytesValue(), charsetName);
                // 封装response
                myResponse = new MyResponse(x_res, y_res);
    
            }
            return myResponse;
        }
    
        private static class MyRequest {
            private int x;
            private String y;
    
            public MyRequest(int x, String y) {
                this.x = x;
                this.y = y;
            }
    
            public int getX() {
                return x;
            }
    
            public String getY() {
                return y;
            }
        }
    
        private static class MyResponse {
            private int x_res;
            private String y_res;
    
            public MyResponse(int x_res, String y_res) {
                this.x_res = x_res;
                this.y_res = y_res;
            }
    
            @Override
            public String toString() {
                return "MyResponse{" +
                        "x_res=" + x_res +
                        ", y_res='" + y_res + '\'' +
                        '}';
            }
        }
    }
    
    展开全文
  • tensorflow训练网络模型 ,生成用于模型预测的pb模型文件,输入图片,进行前向预测
  • 1. tensorflow模型文件打包成PB文件 import tensorflow as tf from tensorflow.python.tools import freeze_graph with tf.Graph().as_default(): with tf.device("/cpu:0"): config = tf.ConfigProto(allow_soft...
  • c)将python36_d.dll,python36.dll,保存的pb模型和调用模型的xx.py文件都放到debug文件夹内 d)下面是 Load_OCR_pb.py 里面的源代码, 只需要关注def test_one_image(jpg_path)函数就行,其他的都是辅助函数,...
  • C++中调用Tensorflowpb文件(二)

    千次阅读 热门讨论 2019-05-16 10:54:22
    在之前的博文中有讲到如何编译安装c++版的Tensorflow,并简单调用自己训练的pb文件(若需要使用python进行调用pb文件请参考这个博文)。在本文中将进一步结合代码调用pb文件。之前经常使用google发布在github上基于...
  • Tensorflowpb 和ckpt文件加载恢复之后还能继续训练吗?
  • 简介为何要生成pb文件,大家应该有所了解吧,这里是提供Android的调用,即将Tensorflow训练好了的模型结构和参数移植到Android手机上。训练读取原始图片过程,将其ratio=0.2为校验样本,0.8的比重为训练样本。设置...
  • 返回值:精简版的GraphDef 对象,包含了原始输入GraphDef和session的网络和变量信息,它的成员函数SerializeToString()可以把这些信息串行化为字节流,然后写入文件里: constant_graph = graph_util.conver
  • 网上关于tensorflow模型文件ckpt格式转pb文件的帖子很多,本人几乎尝试了所有方法,最后终于成功了,现总结如下。方法无外乎下面两种: 使用tensorflow.python.tools.freeze_graph.freeze_graph 使用graph_util....
  • import tensorflow as tf from tensorflow.python.platform import gfile #path to your .pb ...GRAPH_PB_PATH = './model/tensorflow_inception_v3_stripped_optimized_quantized.pb' with tf.Session(config=c...
  • 一、模型训练并保存为pb文件 1.完整代码 coding: utf-8 # In[2]: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import os import time # In[3]: # 载入数据集 mnist...
  • 1、MTCNN人脸检测算法中官网训练好的参数保存在三个文件名称分别为:det1.npy、det2.npy、det3.npy的后缀名为 .npy文件中(.npy文件也是一种以二进制保存的文件),将.npy文件转换为 .pb 模型文件的方法通过以下代码...
  • 今天小编就为大家分享一篇Tensorflow读取并输出已保存模型的权重数值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看不看
  • tensorflowpb文件转化为pbtxt

    千次阅读 2019-11-19 23:49:46
    import tensorflow as tf from tensorflow.python.platform import gfile #函数功能能,将pb模型转换为pbtxt,转换好后存储到当前目录下,模型名字是protobuf.pbtxt def convert_pb_to_pbtxt(filename): with gfile....
  • tensorflow 读取模型并进行预测

    万次阅读 2018-12-27 15:40:19
    tensorflow 读取两种格式的模型并进行预测 0.模型保存 如图所示, .meta – 保存图结构,即神经网络的网络结构 .data – 保存数据文件,即网络的权值,偏置,操作等等 .index – 是一个不可变得字符串表,每...
  •  # 写入序列化的 PB 文件  with tf.gfile.FastGFile(pb_file_path+'model.pb', mode='wb') as f: #模型的名字是model.pb  f.write(constant_graph.SerializeToString())    # 输出  # INFO:tensorflow:...
  • tensorflow保存数据为.pb格式和加载pb文件

    万次阅读 多人点赞 2018-05-16 21:49:54
    谷歌推荐的保存模型的方式是保存模型为 PB 文件,它具有语言独立性,可独立运行,封闭的序列化格式,任何语言都可以解析它,它允许其他语言和深度学习框架读取、继续训练和迁移 TensorFlow 的模型。它的主要使用场景...
  • 主要介绍了tensorflow从ckpt和从.pb文件读取变量的值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 利用pb文件得到graph并在tensorboard中查看的方法: import tensorflow as tf from tensorflow.python.platform import gfile with tf.Session() as sess: model_filename = 'MODEL_PATH' with gfile.FastGFile...
  • tensorflow模型的持久化:保存与测试pb文件

    万次阅读 热门讨论 2019-01-16 17:37:36
    tensorflow模型的持久化:生成pb文件介绍pb文件把模型保存成pb文件pb文件输出测试参考 介绍 最近在做模型的量化,量化的模型是人脸检测网络mtcnn,我从Onet开始入手,原先这个模型使用的权重文件是ckpt,这种存储...
  • 这是一个使用C++的opencv调用tensorflow训练好的一...代码包括C++文件和训练的python文件,训练设备为python3.5+tensorlfow-gpu1.4.0+ubuntu16.04 C++文件也是在ubuntu下写的,但是在windows下只需要稍作修改就可直接运行
  • Keras的.h5模型转成tensorflow的.pb格式模型,方便后期的前端部署。直接上代码 from keras.models import Model from keras.layers import Dense, Dropout from keras.applications.mobilenet import MobileNet ...
  • pb文件读取失败

    2019-11-12 20:50:42
    tf模型保存为pb文件,读取时出现ValueError: Input 0 of node bilm/Assign was passed float from bilm/Variable:0 ...运行读取pb文件的操作: tf.import_graph_def(graph_def, name='') 会抛出类似如下的异常: V...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,241
精华内容 896
关键字:

tensorflow读取pb文件