ValueError:无法为具有形状“(1, 3)”的张量“X:0”提供形状 (3,) 的值

数据挖掘 张量流
2022-02-18 19:50:40

我正在尝试进行多元线性回归,但遇到了一些问题。即,我收到以下错误:

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)

任何帮助将不胜感激。

1个回答

trainX有 shape (2500, 3),所以当你迭代时,trainX你会得到 shape 的值(3,)要匹配占位符“X”的形状,您需要它们具有 shape (1, 3)这可以通过以下方式完成numpy.reshape

# do this after loading trainX
trainX = trainX.reshape((-1, 1, 3))
# new shape: (2500, 1, 3)