pytorch初学笔记(十):神经网络基本结构之最大池化的使用
创始人
2024-02-10 03:13:06

目录

一、最大池化:下采样

1.1 参数介绍 

1.2 公式

二、最大池化的作用和目的

三、代码实战

3.1 题目要求

3.2 池化的具体实现

3.2.1 步骤

3.2.2 报错及其原因 

3.2.3 ceil_mode不同运行的结果不同

3.2.4 完整代码

3.3 tensorboard可视化


一、最大池化:下采样

官方文档:torch.nn — PyTorch 1.13 documentation

1.1 参数介绍 

Parameters:

  • kernel_size 池化核 (Union[intTuple[intint]]) – the size of the window to take a max over

  • stride (Union[intTuple[intint]]) – the stride of the window. Default value is kernel_size

  • padding (Union[intTuple[intint]]) – implicit zero padding to be added on both sides

  • dilation (Union[intTuple[intint]]) – a parameter that controls the stride of elements in the window

  • return_indices (bool) – if True, will return the max indices along with the outputs. Useful for torch.nn.MaxUnpool2d later

  • ceil_mode (bool) – when True, will use ceil instead of floor to compute the output shape,是否对结果进行保留,默认为FALSE

注意: 

1. stride的默认大小为池化核的大小 

2. dilation:空洞卷积,如右图,进行卷积操作时会隔n个取一个。

 

  

3. ceil_mode:ceil为向上取整,floor为向下取整。

  • ceil_mode=True,结果进行保留;
  • ceil_mode=False,结果不进行保留

1.2 公式

输入的input要求为四维或者三维,需要输入通道数以及长和宽。

        因此当我们自定义输入一个input矩阵时,需要再使用torch.reshape方法将其转变成(N, C, H, W)的维度。

 

二、最大池化的作用和目的

作用:最大限度的保留图片特征,同时减少数据量。加速训练速度。

三、代码实战

3.1 题目要求

输入tensor矩阵为5*5,如下图所示,池化核为大小为3*3,经过池化后根据ceil_mode的不同应输出下图所示的两个矩阵,输出如下的采样结果。

 

3.2 池化的具体实现

3.2.1 步骤

  1. 输入tensor型变量input
  2. 按照池化函数所需的input尺寸reshape输入的大小: 
    input = torch.reshape(input, (-1,1, 5, 5))
  3. 自定义神经网络,完成池化操作 
  4. 实例化神经网络,输出结果

3.2.2 报错及其原因 

import torch
from torch.nn import MaxPool2d
#输入的矩阵 
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]
])input = torch.reshape(input,(1,5,5))
print(input.shape)class Maweiyi(torch.nn.Module):def __init__(self):super(Maweiyi, self).__init__()# 设置池化self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=False)def forward(self,input):output = self.maxpool1(input)return outputmaweiyi = Maweiyi()
output = maweiyi(input)
print(output)

会出现如下报错:无法实现long型的数据。

解决:需要修改input的类型,设置tensor的dtype=float32 。

#输入的矩阵
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)

 修改过后即可成功运行。

3.2.3 ceil_mode不同运行的结果不同

1. ceil_mode = True,保留最大采样过程中的所有结果,运行出的tensor大小为4*4

self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)

 

2. ceil_mode = False,不保留最大采样过程中的所有结果,运行出的tensor大小为1*1

self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=False)

3.2.4 完整代码

import torch
from torch.nn import MaxPool2d
#输入的矩阵
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 Maweiyi(torch.nn.Module):def __init__(self):super(Maweiyi, self).__init__()# 设置池化self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)def forward(self,input):output = self.maxpool1(input)return outputmaweiyi = Maweiyi()
output = maweiyi(input)
print(output)

 

3.3 tensorboard可视化

import torch
import torchvision.datasets
from torch.nn import MaxPool2d
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10(root=".\CIFAR10",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,batch_size=64)
from torch.utils.tensorboard import SummaryWriterinput = 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))class Maweiyi(torch.nn.Module):def __init__(self):super(Maweiyi, self).__init__()self.maxPool1 = MaxPool2d(kernel_size=3,ceil_mode=True)def forward(self, input):output = self.maxPool1(input)return outputwriter = SummaryWriter("logs")
step = 0maweiyi = Maweiyi()for data in dataloader:imgs,labels=datawriter.add_images("inputs",imgs,step)output = maweiyi(imgs)writer.add_images("output",output,step)step+=1writer.close()

输出如下所示:

可以看到经过最大池化之后图片变为了马赛克形式,不太清晰,但是大体能保留原图像的特征。 

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...