我试图在图表中打印节点的名称,并使用不同的代码得到不同的结果。
占位符定义为:
x = tf.placeholder("float", shape=[None, 784], name = 'input_x')
如果我运行代码:
node_names = [node.name for node in tf.get_default_graph().as_graph_def().node]
for item in node_names:
print(item)
我得到的结果如下:
input_x
origin_y
truncated_normal/shape
truncated_normal/mean
truncated_normal/stddev
truncated_normal/TruncatedNormal
truncated_normal/mul
truncated_normal
但如果我运行以下代码:
print('Name for input:')
print(x.name)
名称末尾添加了“:0”:
Name for input:
input_x:0
我很困惑。有人可以帮我解释一下吗? 感谢。
答案 0 :(得分:1)
图中的节点表示操作。在循环中,您遍历节点并打印其名称。
以:<num>
结尾的名称对应于张量。张量是操作的输出。
tf.placeholder
函数返回张量,但您也可以得到相应的操作:
x = tf.placeholder('float', shape=[None, 784], name = 'input_x')
print(repr(x)) # <tf.Tensor 'input_x:0' shape=(?, 784) dtype=float32>
print(repr(x.name)) # u'input_x:0'
print(repr(x.op)) # <tf.Operation 'input_x' type=Placeholder>
print(repr(x.op.name)) # u'input_x'