2017-10-05 4 views
0

私はテンソルフローを学習しようとしており、テンソルフローがそのウェブサイトのチュートリアルで提供する線形回帰コードを修正して二次回帰を行っています。しかし、線形モデルのように損失を減らす代わりに、損失は爆発し、なぜそれがそれをしているのかわかりません。 python 2.7.12でTensorflowの問題

コード、:ここで

import tensorflow as tf 

# Model parameters 
A = tf.Variable([0], dtype=tf.float32) 
B = tf.Variable([0], dtype=tf.float32) 
C = tf.Variable([0], dtype=tf.float32) 
# Model input and output 
x = tf.placeholder(tf.float32) 
model = A*(x**2)+B*x+C 
y = tf.placeholder(tf.float32) 

# loss 
loss = tf.reduce_sum(tf.square(model - y)) # sum of the squares 
# optimizer 
optimizer = tf.train.GradientDescentOptimizer(0.01) 
train = optimizer.minimize(loss) 

# training data 
x_train = [0, 1, 2, 3] 
y_train = [0, 1, 4, 9] 
# training loop 
init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) 
for i in range(100): 
    sess.run(train, {x: x_train, y: y_train}) 

# evaluate training accuracy 
curr_A, curr_B, curr_C, curr_loss = sess.run([A, B, C, loss], {x: x_train, y: y_train}) 
print("A: %s B: %s C: %s loss: %s"%(curr_A, curr_B, curr_C, curr_loss)) 

が出力されます:私は間違っ

A: [ -1.85999073e+10] B: [ -6.90063821e+09] C: [ -2.75790080e+09] loss: 4.55068e+22 

何をしているのですか?ありがとうございました。

編集:投稿間違ったコード最初

+0

それはあなたが今、各データポイントの誤差の面でオーバーシュートされている可能性があります。これは、各繰り返しで増え続ける金額によって、地方の最小額が見逃されることにつながります。 tf.square(model-y)を見て、期待どおりに動作しているかどうかを確認することは有益でしょう。私のMLの知識は理論的なものです - 特にTensorFlowの点では – Steve

+0

@Steveほとんど正しいです。あなたは私がそこに集中するのを助けました。私はオプティマイザをチェックしました。私が渡した値は大きすぎました。 0.001を使用すると、関数が収束することができました。 – Jeff

答えて

0

この学習率:

optimizer = tf.train.GradientDescentOptimizer(0.01) 

が大きすぎます。

optimizer = tf.train.GradientDescentOptimizer(0.001) 

出力は次のようになります。

A: [ 0.99987358] B: [ 0.00042567] C: [-0.00021291] loss: 7.5869e-08 
関連する問題