我正在尝试将我正在研究的神经网络的输入批处理在一起,所以我可以像tensorflow MNIST教程一样将它们提供给tensorflow。但是我无论如何都找不到这样做,教程中没有介绍它。
input = tf.placeholder(tf.float32, [10, 10])
...
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))
inputs = #A list containing 50 of the inputs
sess.run(accuracy, feed_dict={input: inputs})
这会抛出以下错误:
ValueError: Cannot feed value of shape (50, 10, 10) for Tensor'Placeholder:0', which has shape '(10, 10)'
我明白为什么我会遇到上述错误,我只是不知道如何让我的输入作为一批输入来处理,而不是认为我试图将它全部作为一个形状提供。
非常感谢您的帮助!
答案 0 :(得分:1)
您必须以不同方式设置输入以获得形状[batch_size,10,10],并在调用tf.reduce_mean()时使用参数reduction_indices
。另外,tf.contrib.learn.read_batch_examples()
将使用批处理队列来处理示例,请参阅文档here。
答案 1 :(得分:1)
您需要修改占位符的签名。让我们分解错误信息:
ValueError: Cannot feed value of shape (50, 10, 10) for
Tensor'Placeholder:0', which has shape '(10, 10)'
您的inputs
变量是形状为(50, 10, 10)
的变量,表示形状为50
的{{1}}元素,而张量(10, 10)
为Placeholder:0
变量。如果您打印(input.name,您将获得值input
。
无法提供值表示无法将Placeholder:0
分配给inputs
。
第一个快速解决方案是将占位符input
的形状固定为
input
但每次要修改批次大小时,都需要更新输入中的批量大小。
指定批量大小的更好方法是使用input = tf.placeholder(tf.float32, [50, 10, 10])
为批量大小设置未定义的形状维度:
None
现在可以使用任何批量大小,从input = tf.placeholder(tf.float32, [None, 10, 10])
到您架构的硬件限制。