2017-05-23 16 views
1

私はちょうど最適化問題のためにPythonでTensorflowを使い始めました。そして、私はちょうど本当に単純な回帰モデルで試してみました。しかし、私が得た結果(傾きと定数の両方)は、私が期待しているところからかなり離れているように見えました。私が間違っていたことを指摘することはできますか?(コードは実行されますが、Tensorflowを適切に使用すれば、Tensorflow:単純な線形回帰

私がした:
1インポートモジュール:

import matplotlib.pyplot as plt 
import numpy as np 
import random as ran 
import tensorflow as tf 

2線状構造(Y = 3 X + 4 +誤差)に基づいてデータを作成します。設定

train_X = np.array(range(-20,20,1)) 
b = 3; c = 4; sd = 0.5; 
error = np.random.normal(loc=0.0, scale=sd, size=40); 
deterministic = b* train_X + c; 
train_Y = np.add(deter,error) 

3最適化のため:

X = tf.placeholder(tf.float32,[40]) 
Y = tf.placeholder(tf.float32,[40]) 

beta = tf.Variable(np.random.randn(), name="beta") 
alpha = tf.Variable(np.random.randn(), name="alpha") 

n_samples = 40 
learning_rate = 0.01 

pred_full = tf.add(tf.scalar_mul(beta, X),alpha) 
cost = tf.reduce_mean(tf.pow(tf.subtract(Y, pred_full),2)) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

4実行中:

init = tf.global_variables_initializer() 
with tf.Session() as sess: 
     sess.run(init) 
     sess.run(optimizer, feed_dict={X: train_X, Y: train_Y}) 
     result = sess.run(cost, feed_dict={X: train_X, Y: train_Y}) 
     result_beta = sess.run(beta, feed_dict={X: train_X, Y: train_Y}) 
     result_alpha = sess.run(alpha, feed_dict={X: train_X, Y: train_Y}) 
     print('result:', result, ';', 'result_beta:', result_beta, ';', 'result_alpha:',result_alpha) 

私が得た結果は次のとおりです。

明らか
result: 1912.99 ; result_beta: 6.75786 ; result_alpha: -0.209623 

ベータは3に近いものになっているとalhpaは、私は私のコードで何が悪かったのか疑問に思って4.に近いすべきですか?あなたは勾配降下の複数の反復のためにオプティマイザを複数回呼び出す必要があり

おかげ

+1

よくモデルを1回だけ実行します...? (コスト、オプティマイザ、結果_アルファ、結果_ベータ)、フィード= ...) – dv3

答えて

1

。複数のテンソルは(実行するために、個々の呼び出しで、各値にアクセスする必要はありません):DV3 @指摘として、

init = tf.global_variables_initializer() 
with tf.Session() as sess: 
    sess.run(init) 
    for i in range(50): 
     opt, result_alpha, result_beta = sess.run([optimizer, alpha, beta], feed_dict={X: train_X, Y: train_Y}) 

    print('beta =', result_beta, 'alpha =', result_alpha) 

NBを試してみてください。フェッチする値のリストでこれを行うことができます。

+0

ああ、ありがとう、それは非常に感謝します!私は各トレイルで、オプティマイザがそれ以上のコストを見つけることができない場合にのみ停止すると考えました。私はあなたが私に与えたコードを実装しています。できます! –

関連する問題