covolution2d 和 maxpolling2d 如何应用于 Keras 中的输入?

How do covolution2d and maxpolling2d apply on input in Keras?

我对我要谈论的所有内容都是陌生的,所以问题可能太简单了。

预先感谢您的回答!

我的问题来自下图:

更清楚:

  1. 对于第一个卷积,从1 x 28 x2825 x 26 x26,输入(1层)经过过滤器(25层)。因此,一层被过滤了 25 次(对吗?)。
    但是对于第二个卷积,从25 x 13 x 1350 x 11 x 11,过滤器50 x 3 x 3应用于输入的操作是什么25 x 13 x 13?我对手术感到困惑。因为如果输入的每一层 25 x 13 x 13 通过过滤器 50 x 3 x 3,输出应该是 1250 x 11 x 11。为什么输出还是50层?

  2. 对于第二个Max PoolingMaxPooling2D()如何处理奇数层? (11 mod 2) 的余数是 1。上图中,从1151上发生了什么?

    另外,Max Pooling奇数输入层的常用操作是什么?

每个卷积应用于输入(前一层的输出)的所有通道,在这种情况下,一个过滤器(来自 50x3x3 Conv2d)应用于所有 25(来自 25x3x3 Conv2d)输入然后结果将总结为50Conv2d的一个输出特征图,这将进行50次。 here 是关于如何将过滤器应用于特征映射的 link。经验法则是,如果下一个卷积有 N 个过滤器,它的输出也应该有 N 个特征映射。

对于maxPooling,MaxPooling2D中padding的默认值;在您的情况下应用的是 "valid|",这意味着池化函数将不包含不能包含在内核大小中的值。在您的示例中,内核为 2,这意味着第 11 个元素未包含在操作中。 是一个很好的 link 关于 padding="valid" 标志,第二个答案很好地说明了在此操作期间输入的某些元素是如何被遗漏的。

此外,使用 strides 而不是 max pooling 可能是个好主意。

你很容易在网上找到人们讨论和比较它。当您遇到维度问题时,使用 strides 就不那么令人难以置信了。

希望对您有所帮助。