2017-06-03 86 views
4

张量流程中的一个非常简单的例子: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想象它,它看起来像这样

enter image description here

问题是,为什么结点 “添加”与渐变连接?我认为,既然我试图最小化y,节点“Sqaure”应该是,它是一个错误吗?任何人都可以解释它?

回答

9

没有涉及的错误。你只需要了解什么是梯度,并知道如何自己计算一个梯度。所以(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

+0

非常酷的例子!最后我可以理解所谓的*符号*渐变!非常感谢你! –

+1

@ Jie.Zhou是的,我认为这是一个非常好的问题,它揭示了许多重要的主题:1)图的构造方式2)数学中梯度的计算方式及其如何应用于TF –