2016-09-15 2 views
0

Я хочу построить регрессионную модель с двумя выходными узлами с использованием тензорного потока. Я ищу код, который может построить регрессионную модель, но с 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. Интересно, есть ли эффективный и эффективный код для регрессии. Пожалуйста, дайте мне пример.

+0

Не совсем понятно, каков ваш вопрос. Вы можете быть более конкретным? – miraculixx

ответ

0

На самом деле, я считаю, работоспособный код, используя 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 является N * 1, и она не будет выполнена, когда форма Y_train является N * 2.

Однако я хочу построить регрессионную модель, а вход N * 1000, выход - N * 2. И я не могу это исправить.