Tensorflowの非常に単純な例:min (x + 1)^2
ここで、x
はスカラーです。コードは次のとおりです。
import tensorflow as tf
x = tf.Variable(initial_value=3.0)
add = tf.add(x, 1)
y = tf.square(add)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(y)
次に、グラフをディスクに書き込みます
graph = tf.get_default_graph()
writer = tf.summary.FileWriter("some/dir/to/write/events")
writer.add_graph(graph=graph)
最終的にテンソルボードで視覚化すると、次のようになります
問題は、ノード「追加」がグラデーションに接続されている理由です。 yを最小化しようとしているので、ノード「Square」はそうあるべきだと思いますが、それはバグですか?誰かがそれを説明できますか?
関係するバグはありません。勾配とは何かを理解し、自分で勾配を計算する方法を知っている必要があります。したがって、_(x+1)^2' = 2*(x+1)
_。つまり、勾配を計算するために_(x+1)^2
_を計算する必要はありません。グラデーション部分を拡大すると、正方形のグラデーションが計算され、グラフのどの部分が必要かがわかります:
これは、より興味深く、より直感的な例です。
_import tensorflow as tf
x = tf.Variable(initial_value=3.0)
y = tf.cos(x)
train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(y)
with tf.Session() as sess:
writer = tf.summary.FileWriter('logs', sess.graph)
writer.close()
_
cos(x)' = - sin(x)
であることを知っておく必要があります。つまり、勾配の計算に必要なのはx
だけです。そして、これはあなたがグラフで見るものです: