Tensorflow 卷积网络中的输入维度重塑

input dimension reshape in Tensorflow conolutional network

在tensorflow网站的专家mnist教程中,有这样的内容:

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

我知道整形就像

tf.reshape(input,[batch_size,width,height,channel])

Q1 : 为什么 batch_size 等于 -1? -1 是什么意思?

当我深入了解代码时,还有一件事我无法理解

W_fc1 = weight_variable([7 * 7 * 64, 1024])

Q2:image_size * 64 是什么意思?

当您在 tf.reshape 中将 -1 作为维度传递时,它会保留现有维度。来自文档:

If one component of shape is the special value -1, the size of that dimension is computed so that the total size remains constant. In particular, a shape of [-1] flattens into 1-D. At most one component of shape can be -1.

提到7 x 7 x 64是因为在这个例子之前应用的卷积层已经将图像缩小为[7,7,64]的形状,并且下一个全连接层的输入需要是单一维度,所以在示例的下一行中,张量从 [7,7,64] 重塑为 [7*7*64] 因此它可以连接到 FC 层。

有关卷积和最大池如何工作的更多信息,the wikipedia page 有一些有用的图形:

例如网络架构:

和池化:

Q1 : why is the batch_size equals -1? What does the -1 means?

-1 表示 "figure this part out for me"。例如,如果我 运行:

reshape([1, 2, 3, 4, 5, 6, 7, 8], [-1, 2])

它创建了两列,以及需要多少行才能使所有内容都适合:

array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

Q2:What does the image_size * 64 means?

它是特定过滤器激活中的过滤器数量。转换层中过滤器的形状遵循 [height, width, # of input channels (number of filters in the previous layer), # of filters].

格式