2017-04-26 9 views
2

私は単純な線形回帰を実装することで初めてテンソルを試しています。収束する代わりに、私の重みは数回の反復で無限に広がります。Tensorflow Weights Divergeまたは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に学習率を設定して、ネットワークが動作することができます。 学習率の問題を処理する別の方法があります。どの学習率が良いかわからない場合は、GradientDescentOptimizerの代わりにAdamOptimizerを使用してみてください。

関連する問題