PyTorch|构建自己的卷积神经网络--池化操作

在卷积神经网络中,一般在卷积层后,我们往往进行池化操作。实现池化操作很简单,pytorch中早已有相应的实现。

nn.MaxPool2d(kernel_size= ,stride= )

这种池化叫做最大池化

最大池化原理很简单,就是一个filter以一定的stride在原数据上进行操作,就像这样:

这里是一个2x2的filter,同时stride为2,在原始数据上扫描,最终的到新的数据

通过代码来实现:

复制代码
>>> import torch>>> import torch.nn as nn>>> data=torch.tensor([[1,1,2,4],[5,6,7,8],[3,2,1,0],[1,2,3,4]],dtype=torch.float32)>>> data.size()torch.Size([4, 4])>>> data=data.unsqueeze(0)>>> data.size()torch.Size([1, 4, 4])>>> data=data.unsqueeze(0)>>> data.size()torch.Size([1, 1, 4, 4])

之所以这样操作,是为了模仿实际训练网络时的场景。这样data的尺寸变为了1x1x4x4

可以理解为Batch为1,Channel为1,Height为4,Width为4​​​​​​​

复制代码
>>> net=nn.MaxPool2d(kernel_size=2,stride=2)>>> end=net(data)>>> endtensor([[[[6., 8.],          [3., 4.]]]])

结果符合预期

当然,nn.MaxPool2d()的可接受参数很多,完整如下:

nn.MaxPool2d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False)

  • kernel_size:设置filter大小

  • stride:控制移动步长,默认为kernel_size的尺寸

  • padding:对原始数据周围进行填充

  • dilation:给原始数据之间添加0

  • return_indices :如果为True,会返回输出最大值对应的序号序列。

  • ceil_mode:控制当卷积核超过原始图像时,是否对max进行保留

这里参数很多,但很多时候我们并不需要一些参数,就像这样:

nn.MaxPool2d(kernel_size=,stride=,padding=)

或者这样:

nn.MaxPool2d(kernel_size,stride)

当然,进行池化操作后,我们很可能再来连接一个卷积层或者全连接层,所以对数据进行池化后,数据的尺寸如何变化是必须要知道的。

公式(假设输入的数据H和W相同):

输入:N,C,H,W

输出:N,C,H',W'

  • H'=(H+2*padding-kernel_size)/stride+1

  • W'=(W'+2*padding-kernel_size)/stride+1

再次回到最初的代码:​​​​​​​

复制代码
>>> import torch>>> import torch.nn as nn>>> data=torch.tensor([[1,1,2,4],[5,6,7,8],[3,2,1,0],[1,2,3,4]],dtype=torch.float32)>>> data.size()torch.Size([4, 4])>>> data=data.unsqueeze(0)>>> data.size()torch.Size([1, 4, 4])>>> data=data.unsqueeze(0)>>> data.size()torch.Size([1, 1, 4, 4])
>>> net=nn.MaxPool2d(kernel_size=2,stride=2)>>> end=net(data)>>> endtensor([[[[6., 8.],          [3., 4.]]]])

输入:1x1x4x4

输出:1x1x2x2

2=(4+2*0-2)/2+1

当然池化种类也有很多,但理解起来都不难,同时,kernel_size,dilation,stride,padding的尺寸也不一定为正方形。

相关推荐
weiwei228441 天前
神经网络模型导出及开放标准格式ONNX
pytorch·onnx
饼干哥哥1 天前
开源Skills|搭建亚马逊动态关键词库系统,每天抓SSS级机会词
人工智能·深度学习·数据分析
武子康3 天前
调查研究-191 SenseVoice 不只是 ASR:把语音从“转文字“升级成“理解状态“
人工智能·深度学习·openai
武子康4 天前
调查研究-189 Kronos 调研:金融 K 线基础模型,是真突破,还是量化圈的新玩具?
人工智能·深度学习·openai
程序猿追10 天前
那个右下角的小数字怎么“卡”住我打字——我用 HarmonyOS 自己写了一个字数限制输入框
pytorch·华为·harmonyos
xiao5kou4chang6kai410 天前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
renhongxia110 天前
世界模型作为AGI落地底层底座的作用
人工智能·深度学习·生成对抗网络·自然语言处理·知识图谱·agi
计算机科研狗@OUC10 天前
(cvpr26) AIMDepth: Asymmetric Image-Event Mamba for Monocular Depth Estimation
人工智能·深度学习·计算机视觉
闵孚龙10 天前
《PyTorch 深度修炼》Dataset 和 DataLoader:数据如何喂给模型
人工智能·pytorch·python
β添砖java10 天前
深度学习(22)网络中的网络NiN
人工智能·深度学习