2017-06-10 4 views
2

結果:tf.contrib.learnの例では https://www.tensorflow.org/get_started/get_startedTensorFlow LinearRegressorを予測私はtensorflowする完全に新たなんだとちょうどここGetStartedページ+チュートリアルを通過した

、私は若干yを変更しましたが、単純化のためにまっすぐな完璧なフィットラインを保っていましたしかし、私が予測するように見積もりをするとき、私はtf.contrib.learnを使用しないときに予想される結果+予測結果を得られず、誰かがその違いを説明できることを望んでいました。

tf.contrib.learn tf.contrib.learnで

私は予測し得る結果= [9.84994888 11.78239346 13.71483707]と私はそれが10、12にはるかに近いと期待していた、14

import tensorflow as tf 
import numpy as np 

features = [tf.contrib.layers.real_valued_column("x", dimension=1)] 
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features) 

x = np.array([1., 2., 3., 4.]) 
y = np.array([2., 4., 6., 8.]) 
input_fn = tf.contrib.learn.io.numpy_input_fn({"x":x}, y, batch_size=4, num_epochs=1000) 

estimator.fit(input_fn=input_fn, steps=1000) 

print(estimator.evaluate(input_fn=input_fn)) 

print(np.asarray([i for i in estimator.predict(x={'x': np.array([5., 6., 7.])})])) 

手動TensorFlowに基づいてトレーニングを始めましょページ

手動トレーニング、私=結果を予測[10 12 14]と私はEXPE何当然ですct。誰かが私に違いを説明し、なぜ/または私が欠けていると完璧にフィット結果を予測持っているtf.contrib.learnを取得するために追加する必要があることができれば

import tensorflow as tf 

sess = tf.Session() 

W = tf.Variable([2.], tf.float32) 
b = tf.Variable([0.], tf.float32) 
x = tf.placeholder(tf.float32) 
linear_model_y_result = W * x + b 

init = tf.global_variables_initializer() 
sess.run(init) 

y = tf.placeholder(tf.float32) 
squared_deltas = tf.square(linear_model_y_result - y) 
loss = tf.reduce_sum(squared_deltas) 
print(sess.run(loss, {x:[1.,2.,3.,4.], y:[2.,4.,6.,8.]})) 

y_ = tf.multiply(x, W) 

optimizer = tf.train.GradientDescentOptimizer(0.01) 
train = optimizer.minimize(loss) 

x_train = [1.,2.,3.,4.] 
y_train = [2.,4.,6.,8.] 

init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) 
for i in range(1000): 
    sess.run(train, {x:x_train, y:y_train}) 

pred_y = sess.run(y_, {x:[5.,6.,7.]}) 

print(pred_y) 

は感謝したい(私が考えるほど彼らはこの単純な例のためにすべきです)。

おかげ

答えて

0

あなたが欲しいオプティマイザを指定せずにtf.contrib.learn.LinearRegressorを呼び出すと、それはFtrlオプティマイザ(https://www.tensorflow.org/api_docs/python/tf/contrib/learn/LinearRegressor)を使用します。あなたは勾配降下オプティマイザを使用する場合は、

tf.contrib.learn.LinearRegressor(feature_columns=features, optimizer = tf.train.GradientDescentOptimizer(0.01))

[9.98047733 11.97054482 13.9606123]のようなものを予測する必要があります

を使用することができます。これはまだ手動トレーニングほど良くはありませんが、同じオプティマイザを使用する方がはるかに優れていることがわかります。 contrib.learnの例では、(少なくとも私のマシンでは)いくつかの警告が表示されるため、これらの警告を取り除くと結果は同じになることがあります。

+1

ありがとう!私はそこにオプティマイザを追加できることを知りませんでした。しかし、ええ、私はそれがすべきだと思ったことを正確にやっていません。テンソルフローのページでは、y = 0、-1、-2、-3を使用し、直線関係は完全に線形です。私はなぜy = 2,4.6,8がこれを変えるべきかわからない。ありがとう –

+0

重みの初期化が原因である可能性があります(おそらくEstimatorを使用して制御することはできません) – corradio

関連する問題