当前位置: 首页 > news >正文

深度学习(九)——神经网络:最大池化的作用

一、 torch.nn中Pool layers的介绍

官网链接:

https://pytorch.org/docs/stable/nn.html#pooling-layers

1. nn.MaxPool2d介绍

nn.MaxPool2d是在进行图像处理时,Pool layers最常用的函数

官方文档:MaxPool2d — PyTorch 2.0 documentation

(1)torch.nn.MaxPool2d类

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

(2)参数介绍

  • kernel_size(int or tuple): 用于设置一个取最大值的窗口,如设置为3,那么会生成一个3×3的窗口

  • stride(int or tuple): 默认值为kernel_size,步幅,和卷积层中的stride一样

  • padding(int or tuple): 填充图像,默认填充的值为0

  • dilation(int): 空洞卷积,即卷积核之间的距离。如卷积核的尺寸为3×3,dilation为1,那么返回一个大小为5×5的卷积核,卷积核每个元素与上下左右的元素之间空一格

  • return_indices(bool): 一般用的很少,不做介绍

  • ceil_mode(bool): 默认为False。为True时,输出的shape使用_ceil_格式(向上取整,即进一);为False时,输出的shape使用_floor_格式(向下取整)。

二、最大池化操作

1. 最大池化操作举例(理论介绍)

假设有一个5×5的图像和一个3×3的池化核(kenel_size=3),如下图。池化过程就是将池化核与图像进行匹配。下面介绍最大池化的具体操作。

  • 首先用池化核覆盖图像,如下图。然后取到最大值,作为一个输出。

  • 上图为第一次最大池化操作,最大值为2。将2作为一个输出,如下图。

  • 由于本例未对stride进行设置,故stride采取默认值,即_stride=kernel_size=3_,池化核移动如下图(移动方式与上上文中提到的卷积核移动方式相同,不再赘述)。由于池化核移动已超出范围,要不要取这3×2部分的最大值,取决于call_mode的值,若_ceil_mode=True_,则取最大值,即输出3;若_ceil_mode=False_,则不取这部分的值,即这一步不进行池化操作。

    • 假设_ceil_mode=True_,经过最大池化操作后,输出的结果如下图。

    • 假设_ceil_mode=False_,经过最大池化操作后,输出的结果如下图。

2. 操作前后的图像大小计算公式

跟卷积操作的计算公式一样。具体如下:

参数说明:

  • N: 图像的batch_size

  • C: 图像的通道数

  • H: 图像的高

  • W: 图像的宽

计算过程:

  • Input:\( (N,C_{in}​,H_{in}​,W_{in}​)\) or \((C_{in}​,H_{in}​,W_{in}​)\)

  • Output: \((N,C_{out}​,H_{out}​,W_{out}​)\) or \((C_{out}​,H_{out}​,W_{out}​)\)

    • 其中有:

      \(H_{out}​=⌊\frac{H_{in}​+2×padding[0]−dilation[0]×(kernel\_size[0]−1)−1​}{stride[0]}+1⌋\)

      \(W_{out}​=⌊\frac{W_{in}​+2×padding[1]−dilation[1]×(kernel\_size[1]−1)−1​}{stride[1]}+1⌋\)

看论文的时候,有些比如像padding这样的参数不知道,就可以用这条公式去进行推导

3. 最大池化操作代码举例

依然选取上面的例子,进行编程。

import torch
from torch import nn
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)   #输入图像数据;与卷积操作不同的是,最大池化操作要求输入的图像数据是浮点数,而不是整数(为整数第23行会报错)
input=torch.reshape(input,(-1,1,5,5))     #构造图像数据,使其符合输入标准,即分别为(输入batch_size待定,1通道,大小为5×5)
print(input.shape)  #[Run] torch.Size([1, 1, 5, 5]);数据格式符合输入标准#构造神经网络
class Demo(nn.Module):def __init__(self):super(Demo,self).__init__()self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)  #设置最大池化函数,这里以ceil_mode=True为例def forward(self,input):output=self.maxpool1(input)  #将输入的数据(input)进行最大池化草子哦return outputdemo=Demo()  #创建神经网络
output=demo(input)
print(output)
"""
[Run]
tensor([[[[2., 3.],[5., 1.]]]])符合前面ceil_mode=True例子的输出结果一致
"""

4. 为什么要进行最大池化(最大池化的作用)

  • 最大程度地保留输入特征,并使数据量减小

  • 上述例子中输入图像为5×5,经过最大池化操作之后变成了3×3,甚至为1×1。使得图像特征得以保留,而数据量大大减少了,对整个网络来说参数减少了,运算速度也变快了

  • 打个比方,这就像看视频的时候,高清(输入图像)变(经过最大池化操作)标清(输出数据)

使用具体图片示例,介绍最大池化的作用:

from torch import nn
from torch.nn import MaxPool2d
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset=torchvision.datasets.CIFAR10("./dataset",train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloder=DataLoader(dataset,batch_size=64)#构造神经网络
class Demo(nn.Module):def __init__(self):super(Demo,self).__init__()self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)  #设置最大池化函数,这里以ceil_mode=True为例def forward(self,input):output=self.maxpool1(input)  #将输入的数据(input)进行最大池化草子哦return outputdemo=Demo()  #创建神经网络writer=SummaryWriter("logs_maxpool")
step=0for data in dataloder:imgs,targets=datawriter.add_images("input",imgs,step)output=demo(imgs)writer.add_images("output",output,step)step+=1
writer.close()

对比输入输出,可以看出图像更糊了

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

http://www.lryc.cn/news/375835.html

相关文章:

  • 「前端+鸿蒙」鸿蒙应用开发-ArkTS语法说明-组件声明
  • python的subprocess 模块
  • 【Arc gis】使用DEM提取流域范围
  • 大模型技术工程师:抓住时代机遇,成为行业精英_
  • 孟德尔随机化R包:TwoSampleMR和MR-PRESSO安装
  • 6月18日 Qtday4
  • Vue3模拟国足18强赛抽签
  • mesa编译器nir信息储存问题
  • windows下mysql设置开机自启动
  • L2-002 链表去重(C++)
  • 异或运算在面试题中的应用
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 单词大师(100分) - 三语言AC题解(Python/Java/Cpp)
  • LabVIEW在SpaceX的应用
  • 【Android面试八股文】讲一讲String、StringBuffer和StringBuilder在进行字符串操作时候的效率
  • [自动驾驶 SoC]-4 特斯拉FSD
  • PostgreSQL源码分析——物化视图
  • 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(七)---- 系统调用函数与GDB(Lab: system calls)
  • ORA-12560: TNS:协议适配器错误
  • 不容小觑的“白纸黑字”:银行重空凭证的风险与防控
  • 30v-180V降3.3V100mA恒压WT5107
  • Spring Boot 和 Spring Cloud 的区别及选型
  • 【神经网络】图像的数字视角
  • ChatGPT的问题与回复的内容导出(Chorme)
  • 游戏开发中的坑之十四 photoshop的javascript脚本批量修改分辨率
  • leetcode打卡#day45 携带研究材料(第七期模拟笔试)、518. 零钱兑换 II、377. 组合总和 Ⅳ、爬楼梯(第八期模拟笔试)
  • Vite+Vue3安装且自动按需引入Element Plus组件库
  • 敬酒词大全绝对实用 万能敬酒词
  • 【Java】已解决com.mysql.cj.jdbc.exceptions.CommunicationsException异常
  • Leetcode 76. 最小覆盖子串
  • JAVAWEB--Mybatis03