神经网络中执行池化以减少方差和计算复杂性。以下是广泛使用的三种基本池化方法的比较。
三种类型的池化操作是:
- 最大池化(Maxpooling ):选择批次的最大像素值。
- 最小池化(minpooling):选择批次的最小像素值。
- 平均池化(average pooling):选择批次中所有像素的平均值。
如下图所示:
池化操作的选择基于手头的数据。平均合并方法使图像平滑,因此当使用该合并方法时可能无法识别锐利特征。
最大池化从图像中选择更亮的像素。当图像的背景很暗并且我们只对图像的较亮像素感兴趣时,它很有用。例如:在MNIST数据集中,数字以白色表示,背景为黑色。因此,使用最大池化。类似地,min pooling以相反的方式使用。
下图说明了池化对具有不同内容的两个图像的影响。
以下python代码将在输入图像上执行所有三种类型的池化并显示结果:
from skimage.measure import block_reduce import numpy as np import matplotlib.pyplot as plt from matplotlib.image import imread img = imread('black_stick.png') mean_pool=block_reduce(img, block_size=(9,9,1), func=np.mean) max_pool=block_reduce(img, block_size=(9,9,1), func=np.max) min_pool=block_reduce(img, block_size=(9,9,1), func=np.min) plt.figure(1) plt.subplot(221) imgplot = plt.imshow(img) plt.title('Original Image') plt.subplot(222) imgplot3 = plt.imshow(mean_pool) plt.title('Average pooling') plt.subplot(223) imgplot1 = plt.imshow(max_pool) plt.title('Max pooling') plt.subplot(224) imgplot1 = plt.imshow(min_pool) plt.title('Min pooling') plt.show()