tensorflow图节点名称与操作名称不匹配

时间:2018-03-26 03:30:13

标签: python tensorflow graph import operation

我是tensorflow的新手,我对tensorflow教程label_image中的图形结构感到困惑。使用代码自爆:

import tensorflow as tf
with tf.Session() as sess:
    with open('/var/tmp/feng/tensorflow/tensorflow/examples/label_image/data/inception_v3_2016_08_28_frozen.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())

        print graph_def

我可以看到图形结构为

...
...
node {
  name: "InceptionV3/Predictions/Reshape_1"
  op: "Reshape"
  input: "InceptionV3/Predictions/Softmax"
  input: "InceptionV3/Predictions/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}

没关系。我可以看到最后一个节点名称是“InceptionV3 / Predictions / Reshape_1”,但是,当我使用代码自爆来显示所有操作时

the operation in this graph
    with tf.Session(graph=graph) as sess:
        # results = sess.run(output_tensor, {
        #     input_tensor: t
        # })
        print(sess.graph.get_operations())

它向我展示了这个

 <tf.Operation 'import/InceptionV3/Predictions/Softmax' type=Softmax>,
 <tf.Operation 'import/InceptionV3/Predictions/Shape' type=Const>, 
 <tf.Operation 'import/InceptionV3/Predictions/Reshape_1' type=Reshape>

为什么操作名称在节点名称之前添加导入。这很奇怪,因为字符串导入永远不会出现在这个模型的图形中。我谷歌但是每个人都说这个函数

get_operation_by_name

返回 tf.Operation 类型的实例,它是计算图中的一个节点,因此操作名称和节点名称之间的区别会混淆。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

最有可能的是,您使用import_graph_def或某些更高级别的函数导入了图表,最终调用import_graph_def。以下是name参数的文档副本:

name: (Optional.) A prefix that will be prepended to the names in 
      graph_def. Note that this does not apply to imported function 
      names. Defaults to "import".

如果您不想添加任何前缀,请使用name=''

调用它