当我试图理解以下张量流图构建代码的基本机制时,我对第3行和第4行感到困惑。我假设在+运算符重载的一侧,adder_node构建对a和b的引用。但是,当在第4行执行adder_node时,区分(a:3)和b(b:3)的机制是什么。可以说,如果占位符填充了值,并且adder_node引用了两个a,那么为什么我们必须再次传递这些参数。
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b
print(sess.run(adder_node, {a: 3, b: 4.5}))
答案 0 :(得分:1)
a
,b
和adder_node
是图表中的节点。
adder_node
知道获取a
和b
中的值并对它们执行操作。该图如下所示:
执行sess.run(adder_node)
时,您需要告知tensorflow来评估adder_node
的值(也就是执行所有相关操作并执行adder_node
的操作)。
为了计算adder_node
,tf将计算占位符a
和b
的值,因此他们的操作是从feed_dict中获取值。因此,每次需要计算adder_node
时,您都必须为占位符提供值,以便计算它们。
{a: 3, b: 4.5}
并未专门将参数传递给adder_node
,而是将参数传递给图表。
您可以使用此代码将a,b和c作为参数传递给图表,adder_node将z和c一起传递:
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
c = tf.placeholder(tf.float32)
z = a + b
adder_node = z + c
print(sess.run(adder_node, {a: 3, b: 4.5, c: 1.5}))