【问题标题】:How to understand the "Densely Connected Layer" section in tensorflow tutorial如何理解 tensorflow 教程中的“密集连接层”部分
【发布时间】:2023-09-28 18:00:01
【问题描述】:

在 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 倍。但实际上并没有。

我在哪一步做错了?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

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

    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。

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

    这是更完整答案的图像:

    【讨论】:

    • 啊~strid,我忘记算了。谢谢~
    【解决方案2】:

    看看Teach Yourself Deep Learning with TensorFlowUdacity 与文森特·范胡克

    这在课程中有所涉及。我目前正在处理它。

    该课程是免费的,但您必须注册。这是一系列视频、测验和编码项目,都是自定进度和自评分的。我学到了很多东西,而且很享受。

    这是其中一项测验。

    【讨论】:

    • 这门课在我的 TODO 清单上,在我的假期计划结束后 :)
    • @GuyCoder 你还想谈谈课程吗?
    • 我做到了。我只是希望你知道该怎么做:)