我正在尝试进行多元线性回归,但遇到了一些问题。即,我收到以下错误:
ValueError: Cannot feed value of shape (3,) for Tensor 'X:0', which has shape '(1, 3)'
我有3个特征变量,分别称为trainX和1个标签,分别称为trainY。它们的形状如下(它们是numpy数组):
trainX.shape:
(2500, 3)
trainY.shape:
(2500,)
以下代码定义了我用来计算模型的张量:
X = tf.compat.v1.placeholder("float", [1, 3], name="X")
Y = tf.compat.v1.placeholder("float", [1], name="Y")
W = tf.Variable(tf.zeros([3, 1]), name="W")
b = tf.Variable(tf.zeros([1]), name="b")
我通过执行以下操作来计算预测标签,成本函数和优化程序:
predicted_y = tf.matmul(X, W) + b
cost = tf.reduce_sum(tf.pow(predicted_y-Y, 2)) / (2 * n)
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate).minimize(cost)
我在张量流会话中收到错误,即以下代码:
with tf.Session() as sess:
sess.run(init)
for epoch in range(training_epochs):
for (_x, _y) in zip(trainX, trainY):
sess.run(optimizer, feed_dict={X: _x, Y: _y})
if (epoch + 1) % 100 == 0:
c = sess.run(cost, feed_dict={X: trainX, Y: trainY})
print("Epoch", (epoch + 1), ": cost =", c, "W =", sess.run(W), "b =", sess.run(b))
# Storing necessary values to be used outside the Session
training_cost = sess.run(cost, feed_dict={X: trainX, Y: trainY})
weight = sess.run(W)
bias = sess.run(b)
任何帮助将不胜感激。
答案 0 :(得分:0)
问题在于_x
是一个包含3个元素的向量,而X
期望一个包含1行3列的矩阵。一种可能的解决方案是重塑_x
:
_x = np.reshape(_x, [1, 3])
另一种可能性是将占位符更改为输入形状:
X = tf.compat.v1.placeholder("float", [3], name="X")
通常一个人想训练一个以上的例子。在这种情况下,您可能需要定义占位符以允许任意数量的输入:
X = tf.compat.v1.placeholder("float", [None, 3], name="X")
Y = tf.compat.v1.placeholder("float", [None], name="Y")
然后我们可以使用100个批次:
with tf.Session() as sess:
sess.run(init)
for epoch in range(training_epochs):
for i in range(trainX.shape[0] % 100):
sess.run(optimizer, feed_dict={X: trainX[i*100:(i+1)*100, ...], Y: trainY[i*100:(i+1)*100]})