tensorflow 转换ckpt 到pb

  • 大家转成pb文件应该是只想用forward过程就可以了, 我主要借鉴了这篇博客https://www.jianshu.com/p/c9fd5c01715e,写的比较详细,默认情况下在把变量转成常量时,会把依赖的前面节点都会保存。值得注意的就是output_node_names 怎么确定;
  constant_graph = graph_util.convert_variables_to_constants(sess, graph_def,
                                                                   output_node_names=['dense_1/BiasAdd'])
  • 我的问题是,由于我没有给每层网络起名字,所以只能用默认的网络op的名字,我用下面这几句话打印出来op之后,猜测了一个名字应该是最后一个层的op名字吧,但是我错了。我这个网络是前面比较久远的tensorflow 1.4.0训练的,所以网络名字和1.9的不一致;
        graph_def = sess.graph.as_graph_def()
        ops = sess.graph.get_operations()
        for op in ops:
            print(op.name, op.outputs)
  • 我贴出我的名字给大家参考一下
    tensorflow 1.4.0 我虽然只用了两层dense操纵,但是输出的op包含三个dense, 节点名字是 dense_2/BiasAdd
dense_1/kernel/Initializer/random_uniform/shape
dense_1/kernel/Initializer/random_uniform/min
dense_1/kernel/Initializer/random_uniform/max
dense_1/kernel/Initializer/random_uniform/RandomUniform
dense_1/kernel/Initializer/random_uniform/sub
dense_1/kernel/Initializer/random_uniform/mul
dense_1/kernel/Initializer/random_uniform
dense_1/kernel
dense_1/kernel/Assign
dense_1/kernel/read
dense_1/bias/Initializer/zeros
dense_1/bias
dense_1/bias/Assign
dense_1/bias/read
dense_2/MatMul
dense_2/BiasAdd

tensorflow 1.9.0 结果就变了,就变成dense_1/BiasAdd
tensorflow1.9训练的模型不能在tf 1.4 下面转换,相反则可以。

你可能感兴趣的:(tensorflow 转换ckpt 到pb)