4

このグラフはどのように非循環的ですか? 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))

計算のための TensorBoard グラフ

AssignAdd と X の間には明らかに双方向のエッジがあります。

X が変数として 2 回表示されるのはなぜですか?

4

2 に答える 2

4

Olivier が指摘しているように、プログラムのグラフは DAG です。グラフ ビジュアライザーは、グラフをレンダリングする際に理解しやすくするために多少の調整を行います。特に、ランタイム自体には「双方向」エッジはありませんが、代わりに TensorFlow には変数の「参照エッジ」が含まれています。これは、変更可能な値 (ポインターや変更可能な参照など) を C/C++ 関数に渡すようなものです。受信者は、変数に使用されているのと同じ基本ストレージを変更できます。

TensorFlow グラフが 1 つ以上のサイクル、またはネストされたサイクルを含むこと正当であることに注意してください。この関数は、TensorFlow が勾配を計算できる反復計算を表す構造化サイクルを作成する手段を提供します。ただし、単純な変数を使用する場合は、循環は必要ありません。tf.while_loop()

于 2016-06-01T15:50:49.787 に答える