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

16. 池化层的基本使用 -- nn.MaxPool2d

池化层的基本使 – nn.MaxPool2d
1. 为什么要使用池化层
  • 池化层具有平移不变性,能够很好地适应图像数据中常见的像素平移现象

  • 池化层主要分为最大池化层和平均池化层,提取数据特征的同时能够减少数据维度

    • 最大池化:保留了数据中的显著特征
    • 平均池化:保留数据中所有特征的均值
  • 这里以二维最大池化为例

2. nn.MaxPool2d()的介绍
  • pytorch框架中提供了一维最大池化、二维最大池化、三维最大池化,对于图像数据来说应用最多的是二维最大池化,使用最多的设置参数为:kernel_size, stride, ceil_mode,dilation, padding

    from torch import nn
    pool = nn.MaxPool2d(kernel_size=2, 
                        stride=1,
                        ceil_mode=True,
                        padding=0,
                        dilation=0)
    
    • kernel_sizestride 以及 dilation: 与卷积核中的使用方式完全相同,stride默认大小为kernel_size
    • padding: 参数与卷积核中的含义相同,但是需要注意,padding 的每个维度要小于等于池化核每个维度的二分之一
    • ceil_mode: 显然易见的一件事是,核按着stride设定的单位平移的过程中,且当stride不为1时,会遇到的一种情况是,剩余的卷积核未扫描到的元素,不足以满足核按着stride为单位的下一次移动,这时候可以进行两种操作方式
      • ceil_mode=True:表示继续移动,并且仅以核包裹的内容进行池化操作
      • ceil_mode=False:表示停止移动,直接放弃后续未扫描到的数据
3. 最大池化层的使用实例
  • 加载数据集,使用 torchvision 中的数据集进行展示,并构建一个基本的DataLoader实例

    data = torchvision.datasets.CIFAR10(
        root= "./data_torchvision",
        train = False,
        transform=torchvision.transforms.ToTensor(),
        download=True
    )
    dataloader = DataLoader(data,
                            batch_size=64)
    
  • 构建一个简单的神经网络基本框架 Model,池化层一般添加在卷积层之后,在特征提取的基础上继续强化重要特征并减少数据维度

    class Model(nn.Module):
        def __init__(self):
            super(Model, self).__init__()
            self.conv = nn.Conv2d(
                in_channels=3,
                out_channels=3,
                kernel_size=3,
                stride=1,
            )
            self.pool = nn.MaxPool2d(kernel_size=3,
                                     ceil_mode=True)
        
        def forward(self, x):
            y = self.pool(self.conv(x))
            return y
    
  • 通过该网络框架对图像数据进行池化操作,并使用tensorboard记录

    with SummaryWriter("log") as writer:
        step = 0
        model = Model()
        for data in dataloader:
            imgs, labels = data
            writer.add_images("input",
                              img_tensor=imgs,
                              global_step=step)
            writer.add_images("output",
                              img_tensor=model(imgs),
                              global_step=step)
            step += 1
    
  • 展示池化前后图像数据的变化情况

    • input原始数据

      image-20240819190825291

    • output池化后的数据

      image-20240819193347626

4. 池化层输出数据维度的计算公式

image-20240820123553014


http://www.kler.cn/a/306030.html

相关文章:

  • sql server 查看io资源使用
  • 随手记:简单实现纯前端文件导出(XLSX)
  • 每日一练:二分查找-搜索插入位置
  • 嵌入式硬件杂谈(一)-推挽 开漏 高阻态 上拉电阻
  • 解决 Redis 报错:`(error) NOAUTH Authentication required`
  • gdb编译教程(支持linux下X86和ARM架构)
  • 【AcWing】【Go】789. 数的范围
  • Leetcode面试经典150题-82.删除排序链表中的重复元素II
  • NISP 一级 | 5.3 电子邮件安全
  • LottieCompositionFactory.fromUrl 加载lottie的json文件
  • 《微信小程序实战(1)· 开篇示例 》
  • Python——俄罗斯方块
  • .NET/C#⾯试题汇总系列:多线程
  • 【有啥问啥】自动提示词工程(Automatic Prompt Engineering, APE):深入解析与技术应用
  • Spring security 动态权限管理(基于数据库)
  • 多源BFS的模板以及练习题(多源BFS)
  • `character_set_server` 和 `collation_server`
  • nvm安装并配置全局缓存文件
  • 【webpack4系列】webpack初识与构建工具发展(一)
  • 【GO语言】Go语言详解与应用场景分析,与Java的对比及优缺点
  • CSP组T1怪物
  • 升级VMware
  • 视频监控摄像头国标GB28181配置参数逐条解析
  • UE5安卓项目打包安装
  • Rust 控制流
  • NarratoAI利用AI大模型,一键解说并剪辑视频