Tensorflow操作和Tensor之间的区别?

时间:2018-07-09 22:18:22

标签: tensorflow

我对Tensorflow操作和Tensor对象之间的区别感到困惑。更具体地说,它们之间的关系是什么以及它们背后的设计哲学是什么。

x = tf.constant([[37.0, -23.0], [1.0, 4.0]])
w = tf.Variable(tf.random_uniform([2, 2]))
y = tf.matmul(x, w)
output = tf.nn.softmax(y, name="output")

output
<tf.Tensor 'output_7:0' shape=(2, 2) dtype=float32>

output2 = tf.get_default_graph().get_operation_by_name("output")
output2
<tf.Operation 'output' type=Softmax>

如果我想将output2传递给sess.run([output2]),我将得到None。有没有办法将output2转换为输出?

我是PyTorch用户,PyTorch中的Operation和Tensor有何相似之处?

1 个答案:

答案 0 :(得分:2)

我没有使用PyTorch,但是您可以假设它是Layer类的方法和变量。因此,运算是一种方法,张量就像可以存储数据的变量。因此,当您运行sess.run([output2])时,您尝试访问的是方法的值而不是变量。

要从图层名称访问张量,可以使用以下函数:

output2 = tf.get_default_graph().get_tensor_by_name("output:0")

使用:0是因为它是张量的第一个实例。如果您创建同一图层的更多实例,它将被索引为:1, :2,依此类推。

编辑:要注意的另一件事是,在tensorflow sess.run([output])中提取输出的值,并且不将其输入到图形中。通过使用feed_dict或Feed字典将值提供给图形。