为什么我们使用 Max Pooling 2x2?我们可以使用任何其他尺寸,例如 3x3 或 5x5 吗?以及如何select在什么场景下选择哪个pooling?

Why do we use MaxPooling 2x2? Can we use any other size like 3x3 or 5x5? And how to select which pooling to choose in what scenrio?

太棒了,

我在 YouTube 上到处搜索,Google 也阅读了一些文章和研究论文,但似乎找不到我的问题的确切答案

我有几个关于卷积神经网络的问题,我对这个问题感到困惑:为什么我们使用 MaxPooling 大小 2x2 为什么我们不使用任何其他大小,如 3x3、4x4 ... nxn(当然小于输入的大小),我们甚至可以使用 2x2 以外的任何东西吗?我的另一个问题是:为什么我们大多数时候总是使用 MaxPooling?它取决于图像吗?例如,如果我们有一些嘈杂的图像,那么是否适合使用 MaxPooling 还是我们应该使用任何其他类型的池化?

谢谢!

MaxPool2D 通过对每个输入通道的输入 window(大小由 pool_size 定义)取最大值,沿其空间维度(高度和宽度)对其输入进行下采样。例如,如果我在此数组上应用 2x2 MaxPooling2D

array = np.array([
[[5],[8]],
[[7],[2]]
])

那么结果就是8,这是这个数组中元素的最大值。
另一个例子,如果我在这个数组上应用 2x2 MaxPooling2D

array = tf.constant([[[1.], [2.], [3.]],
                     [[4.], [5.], [6.]],
                     [[7.], [8.], [9.]]])

那么输出将是这样的:

([
[[5.], [6.]],
[[8.], [9.]]
])

MaxPooling2D 在这里做的是它滑动了 2x2 window 并取了它的最大值,导致输入数组的维度沿其高度和宽度减半。如果您仍然对它的工作原理有任何疑问,check this from keras and

现在很明显 MaxPool2D 对输入进行了下采样,让我们​​回到你的问题 -

为什么到处都使用 2x2 MaxPooling 而不是 3x3 或 4x4?

嗯,原因是它减少了数据,在形状为 (3,3,1) 的矩阵上应用 3x3 MaxPooling2D 会产生 (1,1,1) 矩阵,并且在形状为 (3,3,1) 的矩阵上应用 2x2 MaxPooling2D 将产生 (2,2,1) 矩阵。显然 (2,2,1) 矩阵比形状为 (1,1,1) 的矩阵可以保存更多的数据。通常,应用池化大小超过 2x2 的 MaxPooling2D 操作会导致大量数据丢失,因此 2x2 是更好的选择。这就是为什么你会看到 2x2 MaxPooling2D 'everywhere',就像在 ResNet50、VGG16 等中一样