阅读the Tensorflow MNIST tutorial,我偶然发现了
x_image = tf.reshape(x, [-1,28,28,1])
28, 28
来自width, height
,1
来自频道数量。但为什么-1
?
我想这与小批量培训有关,但我想知道为什么-1
而不是1
(这似乎在numpy中给出相同的结果)。
(可能相关:为什么numpy的重塑会为-1
,-2
和1
提供相同的结果?
答案 0 :(得分:11)
-1
表示推断该维度的长度。这是基于以下约束来完成的:重新整形时ndarray
或Tensor
中元素的数量必须保持不变。在本教程中,每个图像都是一个行向量(784个元素),并且有很多这样的行(让它为n
,因此有784n
个元素)。所以,当你写
x_image = tf.reshape(x, [-1, 28, 28, 1])
TensorFlow可以推断-1
是n
。
答案 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 表示需要根据张量总元素不变的规则自动推导出当前轴上的长度