我目前正在使用TensorFlow for Machine Intelligence学习TensorFlow。我正在执行以下代码-
import tensorflow as tf
tf.reset_default_graph()
a = tf.Variable([1,2,3], name="input_a")
b = tf.Variable([2,3,4], name="input_b")
c = tf.multiply(a,b, name="mul_c")
d = tf.add(a,b, name="add_d")
e = tf.add(c,d, name="add_e")
sess = tf.Session()
sess.run(a.initializer)
sess.run(b.initializer)
output = sess.run(e)
writer = tf.summary.FileWriter('./my_graph', sess.graph)
writer.close()
sess.close()
我在TensorBoard上获得以下输出-
突出显示的节点的详细信息是-
另一方面,如果将a
和b
的值更改为以下值-
a = tf.constant([1,2,3], name="input_a"); b = tf.constant([2,3,4], name="input_b")
,并对会话代码进行了适当的更改,显示了以下输出-
以下输出显示在TensorBoard中-
Variable node
为什么有Output nodes
但Constant node
没有?
答案 0 :(得分:1)
tf.Operation
表示一个图节点,并对张量执行计算。 tf.constant
返回一种特殊类型的tf.Operation
,由于它不执行任何计算,因此它以0张量作为输入并产生0张量作为输出。
尽管tf.Variable
实际上是一个嵌套操作(或子图)由3个节点组成。双击tensorboard中的变量子图,您将看到:
它以常量开头(例如initial_value
,该常量突出显示),将其值写入设备内存,并读取值以馈送到其使用者。
编辑评论中的问题:
据我了解,当用户调用此方法a = tf.constant([1, 2, 3], name='input_a')
时,在不同方面会发生两件事:
Const
节点将被添加到计算图中,如您在提供的第三张图中看到的那样。它的确切值在图构造时就知道了,但是(我猜)在底层实现中它是不可调用的。因此tensorboard表示此节点没有输入和输出。也许这个节点就像一个指针,指向带有相应值的相应设备内存,等待其他可调用节点找到它。Constant Tensor
将被返回,您可以稍后通过其处理程序a
使用它,例如c = tf.multiply(a, b, name="mul_c")
,就像您一样。因此' return '意味着通过Python方法在Python中返回处理程序,而' outputs '(在tensorflow计算图中)列出了可调用节点输出的所有使用者