2017-04-26 53 views
2

我試圖通過實施一個簡單的線性迴歸第一次tensorflow。而不是收斂,我的權重在幾次迭代中偏離到無窮大。Tensorflow權重分歧或NaN

首先我初始化我的數據

import tensorflow as tf 
import numpy as np 
T = 100 
noise = 10*np.random.random(size=T).astype(np.float32) 
x = np.array([np.arange(T), np.ones(T)]).astype(np.float32) 
w = np.array([[2,4]]).astype(np.float32) 
y = w.dot(x) + noise 
w.dot(x) 

然後創建我tensorflow變量:

X = tf.placeholder(tf.float32, [2, T], name="X") 
W = tf.Variable(tf.ones([1,2]), name="W") 
Yhat = tf.matmul(W,X) 
Y = tf.placeholder(tf.float32, [1,T], name="Y") 
MSE = (1./(2*T))*tf.reduce_sum(tf.pow(Y-Yhat, 2)) 

然後我訓練模型

sess = tf.InteractiveSession() 
tf.global_variables_initializer().run() 
trainer = tf.train.GradientDescentOptimizer(0.5).minimize(MSE) 
for _ in range(100): 
    sess.run(trainer, feed_dict={X: x, Y: y}) 
    print sess.run(MSE,feed_dict={X: x, Y: y}) 

而我得到的輸出

5.55387e+09 
1.49582e+16 
4.02866e+22 
1.08503e+29 
2.9223e+35 
inf 
inf 
inf 
inf 
inf 
inf 
nan 
nan 

我在這裏做錯了什麼?

+0

您的學習速度可能太高,以至於優化器不能下降到最小值,而是跳到參數空間中。嘗試一下學習速度,例如'1e-3'。 –

+0

我還在使用NaNs – theideasmith

+0

和'1e-5'? :-) – user1735003

回答

0

如果您在培訓期間看到您的損失增加或看到NaN,請務必先檢查您的學習率!

如果仍然存在問題,您還可以在訓練時看到漸變的值!

+0

他寫道,他檢查了他的學習率,即使是1e-5,他仍然有同樣的問題。所以你的回答沒有幫助。 –

1

由於學習率太高(0.5),權重發散並增大到NaN(Inf)。我已經提出你的代碼並將學習率設置爲0.0005,網絡可以工作。 還有另一種方法來處理學習率問題,如果您不確定哪種學習率更好,請嘗試使用AdamOptimizer而不是GradientDescentOptimizer。