feed_dict 中的 TensorFlow 形状错误

TensorFlow shape error in feed_dict

我正在尝试使现有的 logreg 示例适应我的数据,但出现以下错误:

Epoch: 0001 cost=
Traceback (most recent call last):
  File "tflin.py", line 64, in <module>
    print "Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(sess.run(cost, feed_dict={X: train_X, Y:train_Y})), \
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 315, in run
    return self._run(None, fetches, feed_dict)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 506, in _run
    % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (60000, 6) for Tensor u'Placeholder:0', which has shape '(6,)'

源代码可以在这里找到:https://github.com/ilautar/tensorflow-test/blob/master/tflin.py

我确定这很明显,有什么指示吗?

谢谢, 伊戈尔

错误发生是因为您试图将 60000 x 6 矩阵输入定义为长度为 6 的向量的 tf.placeholder()。当您 try to feed the whole train_X matrix (as opposed to feeding a single row 时会发生这种情况成功)。

完成这项工作的最佳方法是执行以下操作:

  1. 根据批量输入定义您的占位符(和模型),它可以有不同的形状:

    # tf Graph Input
    X = tf.placeholder(tf.float32, [None, n_input])
    Y = tf.placeholder(tf.float32, [None])
    
  2. 输入单个示例时,使用 numpy.newaxis:

    将其扩展为 1 x 6 矩阵
    # Fit all training data
    for epoch in range(training_epochs):
        for (x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X: x[numpy.newaxis, ...],
                                           Y: y[numpy.newaxis, ...]})