我是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 类型的实例,它是计算图中的一个节点,因此操作名称和节点名称之间的区别会混淆。任何人都可以帮助我吗?
答案 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=''