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

Mar*_*oma 8 python numpy tensorflow

阅读Tensorflow MNIST教程,我偶然发现了这条线

x_image = tf.reshape(x, [-1,28,28,1])
Run Code Online (Sandbox Code Playgroud)

28, 28来自width, height,1来自多个渠道.但为什么-1呢?

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

Pri*_*ham 12

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

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

TensorFlow可以推断出-1n.


Raj*_*jat 5

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

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

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