打印张量名称时,为什么会得到不同的结果?

时间:2018-04-10 08:47:08

标签: tensorflow tensor

我试图在图表中打印节点的名称,并使用不同的代码得到不同的结果。

占位符定义为:

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

我很困惑。有人可以帮我解释一下吗? 感谢。

1 个答案:

答案 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'