为什么MNIST教程中的负形状重塑(-1)?

时间:2017-01-25 10:06:33

标签: python numpy tensorflow

阅读the Tensorflow MNIST tutorial,我偶然发现了

x_image = tf.reshape(x, [-1,28,28,1])

28, 28来自width, height1来自频道数量。但为什么-1

我想这与小批量培训有关,但我想知道为什么-1而不是1(这似乎在numpy中给出相同的结果)。 (可能相关:为什么numpy的重塑会为-1-21提供相同的结果?

3 个答案:

答案 0 :(得分:11)

-1表示推断该维度的长度。这是基于以下约束来完成的:重新整形时ndarrayTensor中元素的数量必须保持不变。在本教程中,每个图像都是一个行向量(784个元素),并且有很多这样的行(让它为n,因此有784n个元素)。所以,当你写

x_image = tf.reshape(x, [-1, 28, 28, 1])

TensorFlow可以推断-1n

答案 1 :(得分:0)

在您正在阅读的MNIST教程中,您输入图层的所需形状:[batch_size,28,28,1]

x_image = tf.reshape(x,[ - 1,28,28,1])

此处输入x的-1指定应根据x中的输入值的数量动态计算此维度,并保持所有其他维度的大小不变。这允许我们将batch_size(值为-1的参数)视为我们可以调整的超参数。

答案 2 :(得分:-1)

-1 表示需要根据张量总元素不变的规则自动推导出当前轴上的长度