张量流图中的梯度是不是计算不正确?
Posted
技术标签:
【中文标题】张量流图中的梯度是不是计算不正确?【英文标题】:Is gradient in the tensorflow's graph calculated incorrectly?张量流图中的梯度是否计算不正确? 【发布时间】:2017-11-04 15:53:31 【问题描述】: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)
最后,在 tensorboard 中可视化,如下所示:
问题是,为什么“添加”节点与渐变相连?我认为既然我试图最小化 y,那么“Square”节点应该是。这是一个错误吗?谁能解释一下?
【问题讨论】:
【参考方案1】:不涉及任何错误。您只需要了解什么是梯度并知道如何自己计算。所以(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
来计算梯度。这就是你在图中看到的:
【讨论】:
非常酷的例子!终于可以理解所谓的symbolic渐变了!非常感谢! @Jie.Zhou 是的,我认为这是一个很好的问题,它揭示了许多重要的主题:1)图形是如何构建的,2)梯度是如何在数学中计算的,以及如何计算适用于TF 这是否允许获取我无法手动计算的梯度/粗麻布的表达式?以上是关于张量流图中的梯度是不是计算不正确?的主要内容,如果未能解决你的问题,请参考以下文章