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

【PyTorch】PyTorch中torch.nn模块的池化层

PyTorch深度学习总结

第八章 PyTorch中torch.nn模块的卷积层


文章目录

  • PyTorch深度学习总结
  • 前言
  • 一、池化
    • 1. 定义
    • 2. 目的
    • 3. 常见类型
    • 4. 实际效果
  • 二、池化层
    • 1. 常用的池化层
    • 2.池化层的参数
      • 2.1 最大池化层(Max Pooling)和平均池化层(Average Pooling)
      • 2.2 自适应最大池化层(Adaptive Max Pooling)和自适应平均池化层(Adaptive Average Pooling)
    • 3.函数总结


前言

上文介绍了PyTorch中介绍了torch.nn模块、卷积torch.nn模块中的卷积层函数,本文将进一步介绍池化torch.nn模块中的池化层


一、池化

池化Pooling)是卷积神经网络(CNN)中的一种常见操作,下面从定义、目的、常见类型和实际效果等方面进行简单解释:

1. 定义

池化操作是对输入的特征图进行下采样的过程,它会在输入特征图的局部区域(通常是一个小的矩形窗口)上进行计算,并输出一个代表该区域特征的值,以此来减少特征图的尺寸。

2. 目的

  • 减少数据量:通过降低特征图的尺寸,减少后续网络层需要处理的数据量,从而降低计算复杂度,加快模型的训练和推理速度。
  • 提取主要特征池化操作可以提取局部区域的主要特征,可以忽略一些微小的特征变化,使得模型更加关注重要的特征信息。

3. 常见类型

  • 最大池化(Max Pooling):在每个局部区域中,选择该区域内值最大的元素作为输出。
    例如,对于一个 2x2 的局部区域,包含元素 [1, 3, 2, 4],最大池化会选择 4 作为该区域的输出。
    最大池化能够突出局部区域中的最强特征,常用于提取图像中的边缘和纹理等重要特征。
  • 平均池化(Average Pooling):计算每个局部区域内所有元素的平均值作为输出。
    例如,对于上述 2x2 的局部区域 [1, 3, 2, 4],平均池化的输出为 (1 + 3 + 2 + 4) / 4 = 2.5。
    平均池化可以平滑特征图,保留区域内的整体信息,常用于需要考虑全局特征的任务中。

4. 实际效果

  • 尺寸变化:假设输入的特征图大小为 H × W × C \ H\times W\times C  H×W×C(高度、宽度、通道数),使用一个 2 × 2 \ 2\times2  2×2 的池化窗口,步长为 2 进行池化操作,那么输出特征图的高度和宽度会变为原来的一半,即 H 2 × W 2 × C \ \frac{H}{2}\times \frac{W}{2}\times C  2H×2W×C ,通道数保持不变。
  • 特征表示:池化操作会使得特征图变得更加抽象和紧凑。以图像为例,经过池化后,图像的细节信息会减少,但物体的整体特征会更加突出,有助于模型更好地学习和分类。

二、池化层

1. 常用的池化层

在 PyTorch 的 torch.nn 模块中,常见的池化层如下表所示:

池化层说明
nn.MaxPool1dnn.MaxPool2dnn.MaxPool3d分别用于一维、二维和三维数据的最大池化。最大池化会在每个池化窗口中选取最大值作为输出值。
nn.AvgPool1dnn.AvgPool2dnn.AvgPool3d分别用于一维、二维和三维数据的平均池化。平均池化会计算每个池化窗口内元素的平均值作为输出值。
nn.AdaptiveMaxPool1dnn.AdaptiveMaxPool2dnn.AdaptiveMaxPool3d自适应最大池化,用户只需指定输出的目标大小,模型会自动调整池化窗口和步幅来达到该目标大小。
nn.AdaptiveAvgPool1dnn.AdaptiveAvgPool2dnn.AdaptiveAvgPool3d自适应平均池化,同样用户指定输出的目标大小,模型自动调整参数以得到该目标大小的输出,计算每个区域的平均值。
nn.MaxUnpool1dnn.MaxUnpool2dnn.MaxUnpool3d最大池化的逆操作,通常和最大池化配合使用,需要最大池化时返回的索引信息来恢复数据的尺寸。

2.池化层的参数

在深度学习中,池化层是卷积神经网络(CNN)的重要组成部分,其主要作用是对输入数据进行下采样,以减少数据量并增强模型的鲁棒性。不同类型的池化层涉及的重要参数有所不同:

2.1 最大池化层(Max Pooling)和平均池化层(Average Pooling)

在 PyTorch 中,最大池化和平均池化可使用 torch.nn.MaxPoolXdtorch.nn.AvgPoolXdX 代表维度,如 1、2、3 分别对应一维、二维、三维),它们有以下重要参数:

  1. kernel_size
    - 建议内容:合理设置池化窗口的大小。
    - 原因说明:该参数决定了池化操作的局部区域大小,影响着特征提取的粒度。较大的 kernel_size 可以提取更全局的特征,但会损失更多细节;较小的 kernel_size 则能保留更多局部信息。
    - 实际操作方式:它可以是一个整数,如 kernel_size = 2,表示池化窗口为 2x2(对于二维池化);也可以是一个元组,如 kernel_size = (2, 3),代表窗口在高度和宽度方向上分别为 2 和 3。例如在图像识别任务中,若图像的纹理细节较多,可选择较小的 kernel_size 如 2 或 3;若更关注整体的形状特征,可适当增大到 4 或 5。
    - 注意事项kernel_size 过大可能导致信息丢失过多,过小则可能增加计算量且无法有效降低数据维度。
  2. stride
    - 建议内容:根据数据特点和任务需求调整步长。
    - 原因说明:步长控制着池化窗口在输入数据上的滑动间隔,影响输出特征图的尺寸。较大的步长会使输出尺寸显著减小,减少计算量,但可能丢失部分信息;较小的步长能保留更多信息,但计算量会相应增加。
    - 实际操作方式:同样可以是整数或元组。默认值通常为 kernel_size 的值。例如在处理大尺寸图像时,为了快速降低数据维度,可将 stride 设置为 2 或更大;若希望保留较多信息,可将 stride 设置为 1。
    - 注意事项:步长设置不合理可能导致输出特征图尺寸不符合预期,影响后续网络层的设计。
  3. padding
    - 建议内容:根据需要在输入数据边界添加填充。
    - 原因说明:填充可以控制输出特征图的尺寸,避免因池化操作导致特征图尺寸过小,同时也能使边缘信息得到更充分的利用。
    - 实际操作方式:可以是整数或元组,默认值为 0。例如当 padding = 1 时,会在输入数据的边界周围添加一圈 0;若 padding = (1, 2),则在高度和宽度方向分别填充 1 和 2 个 0。在需要保持输出特征图尺寸与输入相近时,可适当设置 padding
    - 注意事项:过多的填充可能引入噪声,影响模型的性能。

2.2 自适应最大池化层(Adaptive Max Pooling)和自适应平均池化层(Adaptive Average Pooling)

在 PyTorch 中使用 torch.nn.AdaptiveMaxPoolXdtorch.nn.AdaptiveAvgPoolXd,重要参数如下:

  1. output_size
    - 建议内容:明确指定输出特征图的目标尺寸。
    - 原因说明:该参数是自适应池化的核心,它可以根据输入数据自动调整池化窗口和步长,使输出达到指定的尺寸,方便后续网络层的处理。
    - 实际操作方式:可以是一个整数或元组。例如在多模态数据融合任务中,不同模态的数据经过卷积层后输出的特征图尺寸不同,使用自适应池化并设置相同的 output_size,可以将这些特征图统一到相同的尺寸。
    - 注意事项:设置的 output_size 要与后续网络层的输入要求相匹配。

3.函数总结

池化操作说明主要参数适用场景
nn.MaxPool1dnn.MaxPool2dnn.MaxPool3d分别用于一维、二维和三维数据的最大池化。最大池化会在每个池化窗口中选取最大值作为输出值。kernel_size:池化窗口的大小;stride:窗口移动的步幅;padding:在输入数据外围增加一圈 0;dilation:控制窗口中元素步幅;return_indices:若为 True,将返回最大索引以及输出,适用于 torch.nn.MaxUnpool 后续操作;ceil_mode:若为 True,将使用 ceil 而不是 floor 来计算输出形状。图像、音频等数据特征提取,能保留数据中最显著的特征,减少数据量的同时突出重要信息,例如在图像识别中可以提取图像的边缘、纹理等关键特征。
nn.AvgPool1dnn.AvgPool2dnn.AvgPool3d分别用于一维、二维和三维数据的平均池化。平均池化会计算每个池化窗口内元素的平均值作为输出值。kernel_sizestridepaddingceil_modecount_include_pad(若为 True,在计算平均值时会包含填充的 0)。对数据进行平滑处理,适用于需要保留整体信息而不是突出局部最大值的场景,如语义分割中对特征图的下采样。
nn.AdaptiveMaxPool1dnn.AdaptiveMaxPool2dnn.AdaptiveMaxPool3d自适应最大池化,用户只需指定输出的目标大小,模型会自动调整池化窗口和步幅来达到该目标大小。output_size:指定输出的目标大小。当需要固定输出尺寸时使用,例如在不同输入尺寸的图像数据处理中,将不同大小的特征图统一到相同的尺寸。
nn.AdaptiveAvgPool1dnn.AdaptiveAvgPool2dnn.AdaptiveAvgPool3d自适应平均池化,同样用户指定输出的目标大小,模型自动调整参数以得到该目标大小的输出,计算每个区域的平均值。output_size和自适应最大池化类似,适用于需要统一输出尺寸且更注重整体平均信息的场景,在多模态数据融合中对不同尺度的特征进行统一处理。
nn.MaxUnpool1dnn.MaxUnpool2dnn.MaxUnpool3d最大池化的逆操作,通常和最大池化配合使用,需要最大池化时返回的索引信息来恢复数据的尺寸。kernel_sizestridepadding在一些需要恢复数据尺寸的场景中使用,如卷积神经网络的解码器部分,用于图像的重建等任务。
http://www.lryc.cn/news/581583.html

相关文章:

  • 全能视频处理工具介绍说明
  • [shad-PS4] docs | 内核/系统服务 | HLE-高等级模拟
  • Spark流水线数据质量检查组件
  • UNet改进(16):稀疏注意力(Sparse Attention)在UNet中的应用与优化策略
  • Redis集群和 zookeeper 实现分布式锁的优势和劣势
  • 物联网实施与运维【路由器/网关配置】+智能楼道系统
  • python库 dateutil 库的各种案例的使用详解
  • 【Note】《Kafka: The Definitive Guide》第三章: Kafka 生产者深入解析:如何高效写入 Kafka 消息队列
  • Android studio在点击运行按钮时执行过程中输出的compileDebugKotlin 这个任务是由gradle执行的吗
  • 升级AGP(Android Gradle plugin)和gradle的版本可以提高kapt的执行速度吗
  • 【python】对纯二进制向量(仅包含 0 和 1,长度为 8 或 16)的检测和提取
  • 基于腾讯云开发与“人·事·财·物”架构理念的家政预约小程序设计与实现
  • 【Python练习】030. 编写一个函数,实现字符串的反转
  • Python 中 ffmpeg-python 库的详细使用
  • 一条 SQL 语句的内部执行流程详解(MySQL为例)
  • 2025 JuniorCryptCTF re 部分wp
  • 重力翻转者:原创趣味小游戏
  • 前端开发常见问题(从布局到性能优化)
  • 【libm】 10 rem_pio2函数 (rem_pio2.rs)
  • 人工智能之数学基础:线性回归算法的矩阵参数求导
  • 传统微商困境与开源链动2+1模式、AI智能名片及S2B2C商城小程序的转型破局
  • AUTOSAR进阶图解==>AUTOSAR_SWS_V2XFacilities
  • Hadoop MapReduce 入门
  • Hadoop高可用集群搭建
  • k8s-服务发布基础
  • 小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)
  • 【Linux网络编程】Socket - UDP
  • 儿童趣味记忆配对游戏
  • 【CSS-15】深入理解CSS transition-duration:掌握过渡动画的时长控制
  • Java的各种各样的生命周期——思考历程