一、概念
池化就是把数据压缩的过程,属于下采样的一种方法,可以显著降低神经网络计算复杂度,减少训练中的过拟合,同时可以使数据具有一定的不变性。
池化从方法上来讲可以分为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。
import torch
import torchvision.datasets
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
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 output
wzh = Wzh()
writer = SummaryWriter("MaxPool")
step = 0
for data in dataloader:
imgs, targets = data
writer.add_images("input", imgs, step)
output = wzh(imgs)
writer.add_images("output", output, step)
step = step + 1
writer.close()
结果如下:
|