【问题标题】:How to do regression using tensorflow with series output?如何使用带有系列输出的张量流进行回归?
【发布时间】:2016-09-15 12:04:29
【问题描述】:

我想使用 tensorflow 构建具有 2 个输出节点的回归模型。我搜索了一个可以建立回归模型但有 1 个输出节点的代码。

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/skflow/boston.py

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from sklearn import cross_validation
from sklearn import metrics
from sklearn import preprocessing
import tensorflow as tf
from tensorflow.contrib import learn


def main(unused_argv):
  # Load dataset
  boston = learn.datasets.load_dataset('boston')
  x, y = boston.data, boston.target

  # Split dataset into train / test
  x_train, x_test, y_train, y_test = cross_validation.train_test_split(
      x, y, test_size=0.2, random_state=42)

  # Scale data (training set) to 0 mean and unit standard deviation.
  scaler = preprocessing.StandardScaler()
  x_train = scaler.fit_transform(x_train)

  # Build 2 layer fully connected DNN with 10, 10 units respectively.
  feature_columns = learn.infer_real_valued_columns_from_input(x_train)
  regressor = learn.DNNRegressor(
      feature_columns=feature_columns, hidden_units=[10, 10])

  # Fit
  regressor.fit(x_train, y_train, steps=5000, batch_size=1)

  # Predict and score
  y_predicted = list(
      regressor.predict(scaler.transform(x_test), as_iterable=True))
  score = metrics.mean_squared_error(y_predicted, y_test)

  print('MSE: {0:f}'.format(score))


if __name__ == '__main__':
  tf.app.run()

我是 tensorflow 的新手,所以我搜索了与我的工作方式相似的代码,但代码的输出是一个。

在我的模型中,输入为 N*1000,输出为 N*2。我想知道是否有有效且高效的回归代码。请举个例子。

【问题讨论】:

  • 不太清楚你的问题是什么。你能说得更具体点吗?

标签: python output tensorflow regression


【解决方案1】:

其实我用 DNNRegressor 找到了一个可行的代码:

import numpy as np
from sklearn.cross_validation import train_test_split
from tensorflow.contrib import learn
import tensorflow as tf
import logging
#logging.getLogger().setLevel(logging.INFO)

#Some fake data

N=200
X=np.array(range(N),dtype=np.float32)/(N/10)
X=X[:,np.newaxis]

#Y=np.sin(X.squeeze())+np.random.normal(0, 0.5, N)
Y = np.zeros([N,2])
Y[:,0] = X.squeeze()
Y[:,1] = X.squeeze()**2

X_train, X_test, Y_train, Y_test = train_test_split(X, Y,
                                                    train_size=0.8,
                                                    test_size=0.2)


reg=learn.DNNRegressor(hidden_units=[10,10])
reg.fit(X_train,Y_train[:,0],steps=500)

但是,这段代码只有在 Y_train 的 shape 为 N*1 时才有效,当 Y_train 的 shape 为 N*2 时,它会失败。

但是,我想建立一个回归模型,输入为 N*1000,输出为 N*2。而且我无法修复它。

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 2017-08-27
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多