2017-06-03 90 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 –