伟大,
我在YouTube、谷歌上到处搜索过,也读过一些文章和研究论文,但似乎找不到我问题的确切答案
我对卷积神经网络有一些问题,我对这个问题感到困惑:为什么我们使用MaxPooling大小为2x2,为什么我们不使用任何其他大小,如3x3、4x4。。。nxn(当然小于输入的大小(,我们甚至可以使用2x2以外的任何其他吗?我的另一个问题是:为什么我们大多数时候都使用MaxPooling?这取决于图像吗?例如,如果我们有一些嘈杂的图像,那么使用MaxPooling是否合适,或者我们应该使用任何其他类型的池?
谢谢!
MaxPool2D通过为输入的每个通道在输入窗口(大小由pool_size定义(上取最大值,沿其空间维度(高度和宽度(对其输入进行下采样。例如,如果我在此阵列上应用2x2MaxPooling2D
:
array = np.array([
[[5],[8]],
[[7],[2]]
])
那么结果将是8,这是该数组中元素的最大值
另一个例子是,如果我在此阵列上应用2x2MaxPooling2D
:
array = tf.constant([[[1.], [2.], [3.]],
[[4.], [5.], [6.]],
[[7.], [8.], [9.]]])
那么输出将是这样的:
([
[[5.], [6.]],
[[8.], [9.]]
])
MaxPooling2D
在这里所做的是,它滑动了一个2x2的窗口,并取了它的最大值,导致输入数组的高度和宽度减半。如果你仍然对它的工作方式有任何问题,请从keras和SO 中查看
现在很清楚MaxPool2D
对输入进行了下采样,让我们回到您的问题——
为什么所有地方都使用2x2 MaxPooling,而不是3x3或4x4?
好吧,原因是它减少了数据,在形状为(3,3,1(的矩阵上应用3x3MaxPooling2D
将产生(1,1,1(矩阵,在形状(3,3,3(的矩阵中应用2x2MaxPooling2D
将产生(2,2,1(矩阵。显然,(2,2,1(矩阵比形状为(1,1,1(的矩阵可以保留更多的数据。通常情况下,应用池大小大于2x2的MaxPooling2D
操作会导致大量数据丢失,因此2x2是更好的选择。这就是为什么,你可以看到2x2MaxPooling2D
"无处不在",比如在ResNet50、VGG16等中