六、神经网络-最大池化

小土堆的视频:https://www.bilibili.com/video/BV1hE411t7RN?spm_id_from=333.788.videopod.episodes&vd_source=6cb513d59bf1f73f86d4225e9803d47b&p=19

前置知识

  • 最大池化也可以称为下采样
  • MaxPool2d中的参数:
    image
    stride:这里就和conv2d有了区别,在conv2d中stride的默认值是1,而maxpool2d中stride的默认值是kernel_size
    ceil_mode:是否要向上取整,如下图,如果为true则该情况也会保留。默认为False。
    image

最大池化的使用

目的:保留局部最大的特征,同时将数据量减小,常用于特征提取

import torch
from torch import nn

input=torch.tensor([[1,2,0,3,1],
                    [0,1,2,3,1],
                    [1,2,1,0,0],
                    [5,2,3,1,1],
                    [2,1,0,1,1]],dtype=torch.float32)
input=torch.reshape(input,(1,5,5))
print(input.shape)

class MM(nn.Module):
    def __init__(self):
        super(MM,self).__init__()
        self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=True)

    def forward(self,x):
        output=self.maxpool(x)
        return output

mm=MM()
output=mm(input)

print(output)
  • 当我们将ceil_mode设置为true的时候,保留不满的情况,得到的输出结果如下:
    image
  • 当我们将ceil_mode设置为false的时候,会舍去不满的情况,得到的输出结果如下:
    image

用tensorboard展示最大池化的结果

将上面的input删除,导入数据集进行批量处理

dataset=torchvision.datasets.CIFAR10(root='./dataset', train=False, download=True,transform=torchvision.transforms.ToTensor())
dataloader=torch.utils.data.DataLoader(dataset,batch_size=64,shuffle=True)

class MM(nn.Module):
    def __init__(self):
        super(MM,self).__init__()
        self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=False)

    def forward(self,x):
        output=self.maxpool(x)
        return output

mm=MM()

writer=SummaryWriter("logs_maxpool")
step=0
for data in dataloader:
    imgs,targets=data
    writer.add_images("input",imgs,step)
    outputs=mm(imgs)
    writer.add_images("output",outputs,step)
    step+=1

writer.close()

得到的结果如下所示,可见池化将图片变模糊了
image

posted @ 2025-03-25 20:23  W-Vicky11  阅读(82)  评论(0)    收藏  举报