2017-10-21 51 views
0

我有一個簡單的程序,應該爲某些數據創建邏輯迴歸訓練模型。如何正確地爲張量邏輯迴歸程序塑造我的張量

有一個輸出類y(0 = false,1 = true) 有25個功能 我很努力地正確定義我的變量和佔位符形狀。
這是代碼。

#!/usr/bin/env python3 

import tensorflow as tf 
import numpy as np 
import pandas as pd 
from sklearn import preprocessing 
from sklearn import model_selection 
import matplotlib.pyplot as plt 
import seaborn as sns 
import sys 

sns.set(style='white') 
sns.set(style='whitegrid',color_codes=True) 



bank_data = pd.read_csv('data/bank.csv',header=0,delimiter = ';') 
bank_data = bank_data.dropna() 

bank_data.drop(bank_data.columns[[0,3,8,9,10,11,12,13]],axis=1,inplace=True) 
data_set = pd.get_dummies(bank_data,columns = ['job','marital','default','housing','loan','poutcome']) 
data_set.drop(data_set.columns[[14,27]],axis=1,inplace=True) 
data_set_y = data_set['y'] 
data_set_y.replace(('yes','no'),(1.0,0.0),inplace=True) 
data_set_X = data_set.drop(['y'],axis=1) 
num_samples = data_set.shape[0] 
num_features = data_set_X.shape[1] 
print ('num_features = ', num_features) 


X = tf.placeholder('float',[None,num_features]) 
y = tf.placeholder('float',[None,1]) 

W = tf.Variable(tf.zeros([num_features,1]),dtype=tf.float32) 
b = tf.Variable(tf.zeros([1]),dtype=tf.float32) 

train_X,test_X,train_y,test_y = model_selection.train_test_split(data_set_X,data_set_y,random_state=0) 

print (train_y.head()) 
print (train_X.head()) 

prediction = tf.add(tf.matmul(X,W),b) 
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y)) 
num_epochs = 1000 


with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    for epoch in range(num_epochs): 
     _,l = sess.run([optimizer,cost],feed_dict = {X: train_X, y: train_y}) 
     if epoch % 50 == 0: 
      print ('loss = %f' % (l)) 

電流誤差我得到是: ValueError異常:不能飼料的張量 'PLACEHOLDER_1:0' 的形狀的值(3390) '(?,1)',其具有形狀

y_train是一個只包含0或1的熊貓系列。 我是否需要將y_train重塑爲兩個單獨的向量,並相應地爲y佔位符更改尺寸?

這裏是y訓練數據的頭部輸出。 4384 0.0 2560 0.0 1470 0.0 1771 0.0 2604 0.0

不得不應付塑造我的張量正成爲一個嚴重的噩夢。 任何幫助表示讚賞。

+0

這不是第一次當我看到這個很奇怪的事情。您的「預測」對於批量中的每個元素都是一個標量。您如何看待,將softmax應用於標量的結果如何? –

+0

有很多使用TF的邏輯迴歸實例。例如,斯坦福TF類是開放訪問和Github上的代碼。還包括TF回購的邏輯迴歸示例。請首先閱讀大量的例子。 –

回答

0

您應該將train_y從1維張量轉換爲2維。例如,添加行:

.... 
train_X,test_X,train_y,test_y 
    = model_selection.train_test_split(data_set_X,data_set_y,random_state=0) 
train_y = np.reshape(train_y, (-1,1)) 
....