Graph Tensorflow图:Tensorflow图是DAG吗?在张量变量的赋值加法运算中会发生什么
这个图怎么是非循环的?assign add op将x添加到其自身Graph Tensorflow图:Tensorflow图是DAG吗?在张量变量的赋值加法运算中会发生什么,graph,tensorflow,directed-acyclic-graphs,tensorboard,Graph,Tensorflow,Directed Acyclic Graphs,Tensorboard,这个图怎么是非循环的?assign add op将x添加到其自身 import tensorflow as tf sess = tf.Session() x = tf.Variable(1300,name="x") y = tf.Variable(200, name="y") z = tf.add(x, y,name="z") b = x.assign_add(z) init = tf.initialize_all_variables() writer = tf.train.SummaryWri
import tensorflow as tf
sess = tf.Session()
x = tf.Variable(1300,name="x")
y = tf.Variable(200, name="y")
z = tf.add(x, y,name="z")
b = x.assign_add(z)
init = tf.initialize_all_variables()
writer = tf.train.SummaryWriter("/tmp/logdir", sess.graph)
sess.run(init)
print(sess.run(b))
很明显,在AssignAdd和X之间有一条双向边
为什么X被两次描述为变量
很明显,在AssignAdd和X之间有一条双向边
每个操作Assign
或AssignAdd
有两个输入,没有输出:
- a
:我们为其赋值的变量。这里您可以看到一条双向边,因为该操作从tf.Variable
读取旧值,然后写回新值x
- a
:分配给变量(或添加到变量)的值tf.Tensor
为什么X被两次描述为变量 变量
x
在名为x
的大块中的图形中出现一次,但使用两次:
- 在操作
:图形读取tf.add(x,y)
的值作为输入x
- 在AssignAdd操作中:如前所述,
是AssignAdd操作的x
输入tf.Variable
结论 该图是非循环的,因为每个想要更新
x
值的操作都有变量x
作为输入,而不是输出。如果操作Assign
有一个变量作为输出,它确实会导致循环。as,程序的图形是DAG。graph visualizer在呈现图形时有一些自由,以使其更易于理解。特别是,运行时本身没有“双向”边,但TensorFlow包含变量的“引用边”,这类似于将可变值(如指针或可变引用)传递到C/C++函数中,因为它们允许接收者修改用于变量的相同基础存储
请注意,它是合法的,甚至是嵌套循环。该函数提供了一种创建结构化循环以表示迭代计算的方法,TensorFlow可以为其计算梯度。但是,对于简单变量的使用,不需要循环