在tensorflow教程的Densely Connected Layer部分中,它说图像大小在经过处理后为 7 x 7 。我尝试了代码,看来这些参数有效。

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

  • 原始图像为28 x 28,
  • 在第一个转换层中的
  • 中,max_pool_2x2函数会将两个图像的尺寸减小4倍,因此在第一次合并操作之后,图像大小为 7 x 7
  • 这是我不了解的内容

    在第二个conv层中,还有另一个max_pool_2x2函数调用,因此我认为图像大小应再减小4倍。但是实际上没有。

  • 我错了哪一步?

    最佳答案

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

    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')
    

    在这里,我们可以看到卷积的步幅为1,最大池的步幅为2。如何看待最大池,它需要2x2的框,并在图像上滑动,每次取最大值超过4像素。如果跨度为2,则每次移动都需要2步!图像大小应减少2倍,而不是4倍。

    换句话说,一张最大池为2x2,跨度为2的28x28图片将变为14x14。另一个最大池2x2和跨度2会将其减小到7x7。

    为了进一步说明我的观点,让我们以最大池为2x2并跨步为1的情况为例。如果不填充图像,它将在最大池后变成27x27的图像。

    这是更完整答案的图片:
    tensorflow - 如何理解Tensorflow教程中的 "Densely Connected Layer"部分-LMLPHP

    10-08 13:48