张量流图中的梯度是否计算错误?

时间:2017-06-03 09:28:01

标签: tensorflow neural-network tensorboard

张量流中的一个非常简单的示例: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)

最终在张量板中显示它,它看起来像这样

enter image description here

问题是,为什么节点"添加"是否与渐变有关?我想,因为我试图最小化y,node" Square"应该是,这是一个错误吗?任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:25)

不涉及任何错误。你只需要了解什么是渐变,并知道如何自己计算。所以(x+1)^2' = 2*(x+1)。这意味着您无需计算(x+1)^2来计算渐变。如果您要放大渐变部分,您会看到它计算了方形的渐变,并发现它在那里需要图形的哪一部分:enter image description here

这是一个更有趣,更直观的例子:

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来计算渐变。这就是您在图表中看到的内容:enter image description here