如何理解tensorflow教程中的"密集连接层"部分

Dav*_* S. 9 tensorflow

在tensorflow教程的密集连接层部分,它表示图像大小是7 x 7,经过处理.我尝试了代码,似乎这些参数有效.

但我不知道如何获得这个7 x 7尺寸.我明白那个:

  • 原始图像是28 x 28,
  • 在第1个转换层中,该max_pool_2x2函数将图像尺寸减小4倍,因此在第一次合并操作后,图像尺寸为7 x 7
  • 这是我不理解的东西

    在第二CONV层,还有另一个max_pool_2x2函数调用,所以我觉得图像尺寸应的4倍来降低再次.但实际上并没有.

哪一步我错了?

jks*_*hin 24

您还需要知道最大池和卷积的步幅.

def conv2d(x, W):
  return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
  return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                        strides=[1, 2, 2, 1], padding='SAME')
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以看到卷积的步幅为1,最大池的步幅为2.如何查看最大池,是需要一个2x2的盒子,并将其滑过图像,每次都取最大值超过4个像素.如果你的步幅为2,则每次移动需要2步!图像大小应减少2倍而不是4倍.

换句话说,最大池2x2和步幅2的28x28图片将变为14x14.另一个最大池2x2和步幅2将减少到7x7.

为了进一步说明我的观点,让我们以max pool 2x2和stride 1为例.如果我们不填充图像,它将成为max pool之后的27x27图像.

这是一个更完整答案的图像: 在此输入图像描述