尝试使用线性回归模型

3

我正在尝试在一个简单的示例中使用tf.estimator.LinearRegressor。输入点位于y = 2x线上,但估计器预测的值是错误的。以下是我的代码:

# Create feature column and estimator
column = tf.feature_column.numeric_column("x", shape=[1])
lin_reg = tf.estimator.LinearRegressor([column])

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": np.array([1.0, 2.0, 3.0, 4.0, 5.0])},
    y=np.array([2.0, 4.0, 6.0, 8.0, 10.0]), shuffle=False)
lin_reg.train(train_input)

 # Make two predictions
 predict_input = tf.estimator.inputs.numpy_input_fn(
     x={"x": np.array([1.9, 1.4], dtype=np.float32)},
     num_epochs=1, shuffle=False)
 results = lin_reg.predict(predict_input)

 # Print result
 for value in results:
     print(value['predictions'])

正确的输出应该是3.8和2.8,但是估计器预测为0.58和0.48。有什么想法吗?
1个回答

8
您需要指定训练模型的迭代次数,否则回归模型只会输出初始值而不进行训练。有两种方法可供尝试, 方法1:(在LinearRegressor.traning中指定训练迭代次数)
# Create feature column and estimator
column =  tf.feature_column.numeric_column('x')
lin_reg = tf.estimator.LinearRegressor(feature_columns=[column])

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": np.array([1.0, 2.0, 3.0, 4.0, 5.0])},
    y=np.array([2.0, 4.0, 6.0, 8.0, 10.0]), shuffle=False,num_epochs=None)
lin_reg.train(train_input,steps=2500) ###Edited here

# Make two predictions
predict_input = tf.estimator.inputs.numpy_input_fn(
     x={"x": np.array([1.9, 1.4], dtype=np.float32)},
     num_epochs=1, shuffle=False)
results = lin_reg.predict(predict_input)

 # Print result
for value in results:
     print(value['predictions'])

方法2(使用批量大小在train_input中指定num_epoch的数量)。

# Create feature column and estimator
column =  tf.feature_column.numeric_column('x')
lin_reg = tf.estimator.LinearRegressor(feature_columns=[column])

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": np.array([1.0, 2.0, 3.0, 4.0, 5.0])},
    y=np.array([2.0, 4.0, 6.0, 8.0, 10.0]), shuffle=False,num_epochs=2500,batch_size=1) ###Edited here
lin_reg.train(train_input)

# Make two predictions
predict_input = tf.estimator.inputs.numpy_input_fn(
     x={"x": np.array([1.9, 1.4], dtype=np.float32)},
     num_epochs=1, shuffle=False)
results = lin_reg.predict(predict_input)

 # Print result
for value in results:
     print(value['predictions'])

希望这可以帮助到您。

非常有帮助,谢谢! - MatthewScarpino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接