如何使contrib.learn(SKFLOW)回归预测多个值(TensorFlow 0.12.1)

时间:2017-01-16 03:49:52

标签: tensorflow skflow

这与问题skflow regression predict multiple values非常相似。但是,TensorFlow的更高版本似乎使这个问题的答案过时了。

我希望能够在TensorFlow Learn回归神经网络( DNNRegressor )中拥有多个输出神经元。我将引用问题的代码升级到TensorFlow中的更改,但仍然出错。

import numpy as np
import tensorflow.contrib.learn as skflow
import tensorflow as tf
from sklearn.metrics import mean_squared_error

# Create random dataset.
rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(100, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T

# Fit regression DNN model.
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=X.shape[0])]
regressor = skflow.DNNRegressor(hidden_units=[5, 5],feature_columns=feature_columns)
regressor.fit(X, y)
score = mean_squared_error(regressor.predict(X), y)
print("Mean Squared Error: {0:f}".format(score))

但结果是:

ValueError: Shapes (?, 1) and (?, 2) are incompatible

我没有看到任何关于破坏更改的发行说明,这些更改表明多输出的方法已更改。还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

正如tf.contrib.learn.DNNRegressor文档中所述,您可以使用label_dimension参数,这正是您要查找的内容。

您使用此参数的代码行将执行您想要的操作:

regressor = skflow.DNNRegressor(hidden_units=[5, 5],
                                feature_columns=feature_columns,
                                label_dimension=2)

标准predict()返回生成器对象。要获取数组,您必须添加as_iterable=False

score = metrics.mean_squared_error(regressor.predict(X, as_iterable=False), y)