我想用tensorflow實現多變量線性迴歸。我有一個包含200行和3列(功能)的csv文件,最後一列作爲輸出。事情是這樣的:使用Tensorflow的多變量線性迴歸
我寫了下面的下面的代碼:
from __future__ import print_function
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import csv
import pandas
rng = np.random
# Parameters
learning_rate = 0.01
training_epochs = 1000
display_step = 50
我用熊貓從文件中獲取數據,並將其存儲:
# Training Data
dataframe = pandas.read_csv("Advertising.csv", delim_whitespace=True, header=None)
dataset = dataframe.values
X1,X2,X3,y1 = [],[],[],[]
for i in range(1,len(dataset)):
X = dataset[i][0]
X1.append(np.float32(X.split(",")[1]))
X2.append(np.float32(X.split(",")[2]))
X3.append(np.float32(X.split(",")[3]))
y1.append(np.float32(X.split(",")[4]))
X = np.column_stack((X1,X2))
X = np.column_stack((X,X3))
我給你的佔位符和變量和線性迴歸模型:
n_samples = len(X1)
#print(n_samples) = 17
# tf Graph Input
X_1 = tf.placeholder(tf.float32, [3, None])
Y = tf.placeholder(tf.float32, [None])
# Set model weights
W1 = tf.Variable(rng.randn(), [n_samples,3])
b = tf.Variable(rng.randn(), [n_samples])
# Construct a linear model
pred = tf.add(tf.matmul(W1, X_1), b)
# Mean squared error
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)
# Gradient descent
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
# Initializing the variables
init = tf.global_variables_initializer()
# Launch the graph
with tf.Session() as sess:
sess.run(init)
# Fit all training data
for epoch in range(training_epochs):
for (x1, y) in zip(X, y1):
sess.run(optimizer, feed_dict={X_1: x1, Y: y})
# Display logs per epoch step
if (epoch+1) % display_step == 0:
c = sess.run(cost, feed_dict={X_1: x1, Y: y})
print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(c), \
"Weights=", sess.run(W1),"b=", sess.run(b))
我得到我無法調試的以下錯誤:
ValueError: Shape must be rank 2 but is rank 0 for 'MatMul' (op: 'MatMul') with input shapes: [], [3,?].
你能幫我解決這個問題嗎?
在此先感謝。
嘿,我想你的解決方案,我得到了以下錯誤: 'ValueError異常:張量 '佔位符:0' 不能喂形狀(3)的值(?3),它具有形狀」 ' –
這是一個不同的問題,我需要重新發布所有代碼來回答 - 而不僅僅是與此問題相關的代碼段。您現在的問題是您的輸入x1和y與您的佔位符形狀不匹配。檢查這些形狀,你會看到形狀x1是(3,),y是一個浮動。使x1 = [x1]和y = [y1],你會發現形狀現在爲x(1,3)和y(1,)。但是你也會發現你的X = np.column_stack行應該是X = np.column_stack((X1,X2,X3)),它改變了你的X_1佔位符的形狀,並且你的初始化器也是你輸入的不正確形狀。 –
我會修改我的答案以包含其他更改,但是您是否也可以修改您的問題以添加額外問題以確保完整性。 –