输入图像
import torch from torch import nninput=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]]) input=torch.reshape(input,(-1,1,5,5))#二维张量转换为一个四维张量。(batch_size, channels, height, width)print(input.shape)
ceil_mode=True
import torch from torch import nn from torch.nn import MaxPool2dinput=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,1,5,5))#二维张量转换为一个四维张量。(batch_size, channels, height, width)# print(input.shape)class Xuexu(nn.Module):def __init__(self):super().__init__()self.maxpool=MaxPool2d(kernel_size=3,ceil_mode=True)def forward(self,input):output=self.maxpool(input)return outputxuexu=Xuexu() output=xuexu(input) print(output)
ceil_mode=False
import torch from torch import nn from torch.nn import MaxPool2dinput=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,1,5,5))#二维张量转换为一个四维张量。(batch_size, channels, height, width)# print(input.shape)class Xuexu(nn.Module):def __init__(self):super().__init__()self.maxpool=MaxPool2d(kernel_size=3,ceil_mode=False)def forward(self,input):output=self.maxpool(input)return outputxuexu=Xuexu() output=xuexu(input) print(output)
输出查看
import torch import torchvision from torch import nn from torch.nn import MaxPool2d from torch.utils.data import dataset, DataLoader from torch.utils.tensorboard import SummaryWriterdataset =torchvision.datasets.CIFAR10("../dataset",train=False,download=True,transform=torchvision.transforms.ToTensor())dataloader=DataLoader(dataset,batch_size=64)class Xuexu(nn.Module):def __init__(self):super().__init__()self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=False)def forward(self,input):output=self.maxpool1(input)return outputxuexu=Xuexu() writer=SummaryWriter("./logs_maxpool") step=0 for data in dataloader:imgs,targets=datawriter.add_images("input",imgs,step)output=xuexu(imgs)writer.add_images("output",output,step)step=step+1writer.close()
终端运行
tensotboard --logdir="logs_maxpool"
点击蓝色的链接
可以看到最大池化的效果,类似于马赛克。
最大池化是一种常用的池化操作,它的主要作用包括:
-
特征降维: 最大池化通过在局部区域内选择最大值来减小图像或特征图的空间尺寸。这有助于减少模型的计算复杂性和参数数量,从而加速训练和降低过拟合的风险。
-
平移不变性: 最大池化在一定程度上提供平移不变性,即对于输入的轻微平移,最大池化仍然能够提取相同的关键特征。这对于图像识别等任务是有益的,因为图像中的目标可能出现在不同的位置。
-
特征提取: 最大池化有助于保留图像或特征图中的重要特征,因为在每个池化窗口中,只选择最显著的特征值。这有助于模型更专注于图像中最重要的信息。
总的来说,最大池化是一种常见的操作,用于在深度学习中对输入数据进行下采样和特征提取,以改善模型的计算效率和泛化能力。
参考
【PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】】 https://www.bilibili.com/video/BV1hE411t7RN/?p=19&share_source=copy_web&vd_source=be33b1553b08cc7b94afdd6c8a50dc5a