为什么Tensorflow不显示Constant Ops的输出节点,而是显示Variable Ops的输出节点?

时间:2019-03-04 05:40:51

标签: python tensorflow

我目前正在使用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上获得以下输出-

Variable 1

突出显示的节点的详细信息是-

Variable 2

另一方面,如果将ab的值更改为以下值-

a = tf.constant([1,2,3], name="input_a"); b = tf.constant([2,3,4], name="input_b"),并对会话代码进行了适当的更改,显示了以下输出-

Constant 1

以下输出显示在TensorBoard中-

Constant 2

Variable node为什么有Output nodesConstant node没有?

1 个答案:

答案 0 :(得分:1)

tf.Operation表示一个图节点,并对张量执行计算。 tf.constant返回一种特殊类型的tf.Operation,由于它不执行任何计算,因此它以0张量作为输入并产生0张量作为输出。

尽管tf.Variable实际上是一个嵌套操作(或子图)由3个节点组成。双击tensorboard中的变量子图,您将看到: enter image description here

它以常量开头(例如initial_value,该常量突出显示),将其值写入设备内存,并读取值以馈送到其使用者。


编辑评论中的问题:

据我了解,当用户调用此方法a = tf.constant([1, 2, 3], name='input_a')时,在不同方面会发生两件事:

  1. 一个Const节点将被添加到计算图中,如您在提供的第三张图中看到的那样。它的确切值在图构造时就知道了,但是(我猜)在底层实现中它是不可调用的。因此tensorboard表示此节点没有输入和输出。也许这个节点就像一个指针,指向带有相应值的相应设备内存,等待其他可调用节点找到它。
  2. Constant Tensor将被返回,您可以稍后通过其处理程序a使用它,例如c = tf.multiply(a, b, name="mul_c"),就像您一样。

因此' return '意味着通过Python方法在Python中返回处理程序,而' outputs '(在tensorflow计算图中)列出了可调用节点输出的所有使用者