如何将输入一起批量处理张量流?

时间:2016-11-18 20:28:52

标签: python neural-network tensorflow

我正在尝试将我正在研究的神经网络的输入批处理在一起,所以我可以像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)'

我明白为什么我会遇到上述错误,我只是不知道如何让我的输入作为一批输入来处理,而不是认为我试图将它全部作为一个形状提供。

非常感谢您的帮助!

2 个答案:

答案 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]) 到您架构的硬件限制。