2017-06-10 127 views
2

我完全新的tensorflow并通过GetStarted页面+教程正要在这里: https://www.tensorflow.org/get_started/get_startedTensorFlow LinearRegressor contrib.learn预测不手动训练赛预测结果

随着tf.contrib.learn例如,我稍微改变了一下,但为了简单起见,我仍保持着一条完美的线条。但是,当我要求估算人员进行预测时,我没有得到我的预期结果+当我不使用tf.contrib.learn时得到的预测结果,我希望有人能够解释这种差异。

tf.contrib.learn

随着tf.contrib.learn我得到预测结果= [9.84994888 11.78239346 13.71483707]和我期待它是更为接近10,12,14

手动基于TensorFlow
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.])})])) 

培训获取手动启动页面

训练,我的预测结果= [10 12 14]和自然是我EXPE克拉。

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) 

希望如果有人能向我解释,我错过的差异,为什么/或什么,需要为了得到tf.contrib.learn有加预测,伏贴(因为我认为结果他们应该为这个简单的例子)。

感谢

回答

0

如果调用tf.contrib.learn.LinearRegressor没有指定要优化,这将使用的FTR1优化(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

谢谢!我没有意识到我可以在那里添加一个优化器,所以很高兴知道。但是,没有完全按照我认为应该做的。在tensorflow页面上,他们使用y = 0,-1,-2,-3,线性关系+预测它是完全线性的。我不明白为什么y = 2,4.6,8应该改变这一点。谢谢 –

+0

可能是由于权重的初始化(您可能无法使用Estimator来控制) – corradio

相关问题