Graph Tensorflow图:Tensorflow图是DAG吗?在张量变量的赋值加法运算中会发生什么

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

这个图怎么是非循环的?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.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操作中:如前所述,
    x
    是AssignAdd操作的
    tf.Variable
    输入

结论 该图是非循环的,因为每个想要更新
x
值的操作都有变量
x
作为输入,而不是输出。如果操作
Assign
有一个变量作为输出,它确实会导致循环。

as,程序的图形是DAG。graph visualizer在呈现图形时有一些自由,以使其更易于理解。特别是,运行时本身没有“双向”边,但TensorFlow包含变量的“引用边”,这类似于将可变值(如指针或可变引用)传递到C/C++函数中,因为它们允许接收者修改用于变量的相同基础存储

请注意,它是合法的,甚至是嵌套循环。该函数提供了一种创建结构化循环以表示迭代计算的方法,TensorFlow可以为其计算梯度。但是,对于简单变量的使用,不需要循环