一、概念
池化就是把数据压缩的过程,属于下采样的一种方法,可以显著降低神经网络计算复杂度,减少训练中的过拟合,同时可以使数据具有一定的不变性。
池化从方法上来讲可以分为average Pooling、max Pooling、Overlapping Pooling、Spatial Pyramid Pooling,其中max Pooling是最常见的池化方法,Overlapping Pooling值得注意的是filter的size小于stride,Spatial Pyramid Pooling(空间金字塔池化)可以将不同维度的卷积特征转化到同一个维度,可以减少一些由于croping引起的数据损失。
下图是用最大池化的方法对4 * 4的矩阵进行处理,filter为2 * 2,stride等于2,最终得到2*2的矩阵,矩阵中的值为遍历矩阵的最大值。
二、Pytorch示例
还是用CIFAR10数据集,池化方法采用最大池化,filter为3*3。
dataset = torchvision.datasets.CIFAR10("../dataset", train=False, download=True, transform=torchvision.transforms.ToTensor())dataloader = DataLoader(dataset, batch_size=64)class Wzh(nn.Module):def __init__(self):super(Wzh, self).__init__()self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=True)def forward(self, input):output = self.maxpool1(input)return outputwzh = Wzh()
w= SummaryWriter("MaxPool")
i = 0for data in dataloader:imgs, targets = data output1 = wzh(imgs)w.add_images("input", imgs, i)w.add_images("output", output1, i)i= i+ 1w.close()
结果如下: