CNN网络,继续使用conv2d,不使用maxpool,阅读keras书的一个问题

Mei*_*Zhu 3 machine-learning neural-network conv-neural-network keras

我正在阅读 Francois Chollet 写的《Learning with Python》一书。在第 128 页,作者正在讨论使用连续 Conv2d 层而不是 maxpooling 层的问题。我的问题来自以下段落。我不明白7X7从何而来?

\n\n
\n

它不利于学习特征的空间层次结构。第三层中的 3 个 \xc3\x97 3 个窗口\n 仅包含来自初始输入中的 7 个 \xc3\x97 7 个窗口的信息。相对于初始输入,卷积网络学习的高级模式仍然非常小,这可能不足以学习对数字进行分类(尝试仅通过以下窗口来识别数字) n 7 \xc3\x97 7 像素!)。我们需要最后一个卷积层的特征来包含有关输入整体的信息。

\n
\n\n
Layer (type) Output Shape Param #\n================================================================\nconv2d_4 (Conv2D) (None, 26, 26, 32) 320\n________________________________________________________________\nconv2d_5 (Conv2D) (None, 24, 24, 64) 18496\n________________________________________________________________\nconv2d_6 (Conv2D) (None, 22, 22, 64) 36928\n================================================================\nTotal params: 55,744\nTrainable params: 55,744\nNon-trainable params: 0\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

我假设你的 cnn 架构只有 3*3 内核。

得益于 3*3 内核,第一层根据您的输入创建特征映射。这些特征图的每个像素仅依赖于输入的 3*3 正方形。第二层正在做完全相同的事情,将特征图作为输入。所以现在,一个像素依赖于 3*3 平方的特征图,而特征图又依赖于 5*5 平方的输入。

通过第三次这样做,第三层特征图上的像素仅依赖于输入的 7*7 窗口。

这是一个一维示例:

        *            # third layer pixel
      | | |
      * * *          # second layer pixels
    | | | | |
    * * * * *        # first layer pixels
  | | | | | | |
  * * * * * * *      # input pixels --> An unique third layer layer pixel depends on only 7 input pixels
Run Code Online (Sandbox Code Playgroud)