平均池化(Average Pooling)

1. 定义与作用​

​平均池化​​是一种下采样操作,通过对输入区域的数值取​平均值来压缩数据空间维度。其核心作用包括:

  • ​降低计算量​​:减少特征图尺寸,提升模型效率。
  • ​保留整体特征​​:平滑局部细节,突出区域整体信息。
  • ​抑制噪声​​:通过平均运算降低随机噪声的影响。

与​​最大池化​​(取局部最大值)不同,平均池化更关注区域的全局统计特征,适用于需要保留背景或平缓变化的场景。


​2. 计算过程​

以二维平均池化为例:

  • ​输入​​:特征图尺寸为 H×W。
  • ​窗口​​:滑动窗口大小为 k×k(如2×2)。
  • ​步长(Stride)​​:窗口每次移动的像素数,通常与窗口大小一致(如stride=2)。
  • ​输出​​:特征图尺寸缩小为 $\frac{H}{k}\times\frac{W}{k}$(假设整除)。

​数学公式​​:
对于每个窗口区域内的值$x_{i,j}$,输出值为:

$output= \frac{1}{k^2} \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} x_{i+m,j+n}$


​3. PyTorch 实现​

在 PyTorch 中,平均池化通过 nn.AvgPool2d 实现,支持灵活的参数配置:

​(1) 基本使用​
import torch
import torch.nn as nn# 定义平均池化层:窗口2x2,步长2,无填充
avg_pool = nn.AvgPool2d(kernel_size=2, stride=2)# 输入:1张3通道的4x4图像
input = torch.randn(1, 3, 4, 4)  # 形状 (batch, channels, height, width)
output = avg_pool(input)print("输入形状:", input.shape)  # torch.Size([1, 3, 4, 4])
print("输出形状:", output.shape) # torch.Size([1, 3, 2, 2])
​(2) 带填充的池化​
# 窗口3x3,步长2,填充1(保持输出尺寸与输入相近)
avg_pool_pad = nn.AvgPool2d(kernel_size=3, stride=2, padding=1)
output_pad = avg_pool_pad(input)
print("带填充输出形状:", output_pad.shape)  # 输入4x4 → 输出2x2
​(3) 全局平均池化(Global Average Pooling)​

将整个特征图压缩为1x1,常用于替代全连接层:

gap = nn.AdaptiveAvgPool2d((1, 1))  # 输出固定为1x1
output_gap = gap(input)
print("全局平均池化输出形状:", output_gap.shape)  # torch.Size([1, 3, 1, 1])

​4. 与最大池化的对比​
​特性​​平均池化​​最大池化​
​核心操作​取窗口内平均值取窗口内最大值
​适用场景​背景信息保留(如分类任务)显著特征提取(如纹理、边缘)
​抗噪声能力​较强(噪声被平均稀释)较弱(噪声可能被误判为最大值)
​细节保留​弱(平滑局部细节)强(保留局部极值)
​典型应用​ResNet、Inception 中的下采样CNN 早期层提取边缘特征

​5. 应用场景​
  1. ​图像分类​​:
    在深层网络中逐步压缩特征图,如VGG网络的池化层。

  2. ​语义分割​​:
    编码器(Encoder)中使用平均池化压缩信息,解码器(Decoder)通过上采样恢复细节(需结合跳跃连接避免信息丢失)。

  3. ​轻量化模型​​:
    全局平均池化(GAP)替代全连接层,减少参数量(如SqueezeNet、MobileNet)。

  4. ​时序数据处理​​:
    一维平均池化用于音频或文本序列的下采样:

    # 一维平均池化:窗口长度3,步长2
    avg_pool_1d = nn.AvgPool1d(kernel_size=3, stride=2)
    input_1d = torch.randn(1, 64, 10)  # (batch, channels, seq_len)
    output_1d = avg_pool_1d(input_1d)  # 输出序列长度: (10-3)//2 +1 =4

​6. 注意事项​
  1. ​信息丢失问题​​:

    • 过度下采样可能导致小目标或细节丢失(如医学图像中的微小病灶)。
    • ​解决方案​​:结合跳跃连接(如U-Net)或多尺度特征融合。
  2. ​参数选择​​:

    • ​Kernel Size​​:较大的窗口(如4×4)加速下采样,但可能过度平滑。
    • ​Padding​​:调整填充以控制输出尺寸(如输入为奇数时需补零)。
  3. ​替代方案​​:

    • ​跨步卷积(Strided Convolution)​​:可学习的下采样方式,兼顾特征提取与尺寸压缩。
    • ​空间金字塔池化(SPP)​​:多尺度池化增强特征鲁棒性。

​7. 代码示例:可视化平均池化效果​
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
plt.rcParams['font.sans-serif'] = ["SimSun"]  
plt.rcParams['axes.unicode_minus'] = False  
# 生成示例图像(单通道5x5)
input_img = torch.tensor([[[1, 2, 3, 4, 5],[6, 7, 8, 9, 10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]
]], dtype=torch.float32)  # 形状 (1,1,5,5)# 平均池化(窗口3x3,步长2,填充1)
avg_pool = nn.AvgPool2d(3, stride=2, padding=1)
output_img = avg_pool(input_img)# 打印形状
print("输入图像形状:", input_img[0,0].shape)
print("输出图像形状:", output_img[0,0].shape)# 确保输入和输出是二维张量
input_to_show = input_img[0,0] if input_img[0,0].dim() == 2 else input_img[0,0].unsqueeze(0)
output_to_show = output_img[0,0] if output_img[0,0].dim() == 2 else output_img[0,0].unsqueeze(0)# 可视化
plt.figure(figsize=(10,4))
# 获取 Axes 对象
ax1 = plt.subplot(121)
ax1.imshow(input_to_show, cmap='viridis')
ax1.set_title('输入 (5x5)')ax2 = plt.subplot(122)
ax2.imshow(output_to_show, cmap='viridis')
ax2.set_title('输出 (3x3)')plt.show()

​输出效果​​:

  • 输入5x5经过3x3平均池化(步长2,填充1)后,输出3x3。
  • 每个输出值是其对应3x3窗口的平均值(边缘区域因填充0导致平均值较低)。

输入图像形状: torch.Size([5])
输出图像形状: torch.Size([3])


​总结​

平均池化通过局部平均运算实现下采样,平衡计算效率与特征保留,是CNN中的基础操作。在PyTorch中通过 nn.AvgPool2d 快速实现,需根据任务需求选择窗口大小和步长。关键注意事项包括:

  • ​任务适配​​:分类任务多用平均池化,检测/分割需谨慎避免细节丢失。
  • ​参数调优​​:kernel_size和padding影响输出尺寸与信息保留程度。
  • ​高级变体​​:全局平均池化(GAP)可大幅减少模型参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【dify实战】chatflow结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载

dify结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载 观看视频,您将学会 在dify下如何快速的构建一个chatflow,来完成数据分析工作;如何在AI的回复中展示可视化的图表;如何在AI 的回复中加入Excel报…

加一:从简单问题到复杂边界的深度思考

加一:从简单问题到复杂边界的深度思考 引言 在算法世界里,有些问题看似简单,实则暗藏玄机,其中“加一”问题就是一个典型例子。所谓“加一”,通常指的是给一个由数字组成的数组表示的整数加一,这听起来简…

PointCore——利用局部全局特征的高效无监督点云异常检测器论文与算法解读

概述 三维点云异常检测旨在从训练集中检测出异常数据点,是工业检测、自动驾驶等众多应用的基础。然而,现有的点云异常检测方法通常采用多个特征存储库来充分保留局部和全局特征表示,这带来了高昂的计算成本以及特征之间的不匹配问题。为解决…

桌面应用UI开发方案

一、基于 Web 技术的跨平台方案 Electron Python/Go 特点: 技术栈:前端使用 HTML/CSS/JS,后端通过 Node.js 集成 Python/Go 模块或服务。 跨平台:支持 Windows、macOS、Linux 桌面端,适合开发桌面应用。 生态成熟&…

redis 配置日志和数据存储位置

Redis配置日志和数据存储位置 介绍 Redis是一个开源的高性能键值存储数据库,常用于缓存、消息队列和实时分析等场景。在使用Redis时,我们需要配置日志和数据存储位置,以便更好地管理和监控Redis的运行状态。本文将介绍如何配置Redis的日志和数…

OSI七层网络模型详解

OSI七层网络模型详解 OSI(开放系统互连)模型是国际标准化组织(ISO)提出的网络通信框架,旨在规范不同系统间的通信。它分为七层,每层承担特定功能,协同实现端到端的数据传输。 1. 物理层&#x…

Springboot 学习 之 logback-spring.xml 日志打印

文章目录 1. property2. springProperty3. appender4. logger4.1. 通过包路径控制日志4.2. 通过类名控制日志4.3. 按自定义 Logger 名称控制日志 5. root6. springProfile SpringBoot 项目中可以通过自定义 logback-spring.xml 中各项配置,实现日志的打印控制 1. p…

Gradle与Idea整合

文章目录 1. Groovy 简介2. Groovy 安装[非必须]3. 在idea中创建java工程 1. Groovy 简介 在某种程度上,Groovy可以被视为Java的一种脚本化改良版,Groovy也是运行在JVM上,它可以很好地与Java代码及其相关库进行交互操作。它是一种成熟的面向对象编程语言…

OpenFeign终极指南:超时控制、重试策略、拦截器与自定义Starter

目录 前言 使用 引入依赖 开启feign 编写feign客户端 效果 日志 超时配置 重试机制 拦截器 Fallback兜底返回 引入依赖 编写兜底实现 连接池 引入依赖 开启连接池 制作OpenFeign Starter 编写配置类 自动装配 前言 在RPC框架中,有openFeign和Du…

Windows桌面图标变白的解决方案

一、问题原因 桌面图标变白通常是由于系统图标缓存文件(IconCache.db)损坏或系统图表示现异常导致。图标缓存是Windows用于存储应用程序和文件夹图标图像的临时文件,当该文件损坏或系统未正确更新缓存时,图标会因无法加载原始图像…

【mysql】Mac 通过 brew 安装 mysql 、启动以及密码设置

Mac 通过 brew 安装 mysql 、启动以及密码设置 使用 brew 安装 mysqlmysql 启动mysql密码设置参考文章: 使用 brew 安装 mysql brew install mysqlmysql 启动 下载完毕,终端告诉我们mysql数据库没有设置密码的,我们可以直接执行 mysql -u r…

Manus AI:突破多语言手写识别技术壁垒之路

Manus AI与多语言手写识别 讨论Manus AI如何突破多语言手写识别的技术壁垒。 写一篇详细的博客有重点有链接超详细 Manus AI:突破多语言手写识别技术壁垒之路 在人工智能领域,多语言手写识别一直是极具挑战性的难题。不同语言的字符形态、书写规则大相…

Redis字符串类型实战:解锁五大高频应用场景

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis的字符串(String)类型是最基础的数据结构,但其灵活性和原子性操作使其成为解决高并发场景问题的利器。本文通过真实项…

边沿耦合与宽边耦合的串扰

边沿耦合与宽边耦合的串扰 我们知道,如果两条走线位于同一层,由于耦合两条线之间会存在串扰。如果PCB层叠中有相邻的信号层,那么同样存在耦合,这两个相邻信号层的走线之间也会存在串扰。同层走线之间的耦合称为边沿耦合&#xff0…

B端可视化像企业数据的透视镜,看清关键信息

在数字化时代,数据已成为企业最宝贵的资产之一。然而,数据的价值不仅取决于其数量,更在于企业能否快速、准确地提取关键信息并据此做出决策。B端可视化技术的出现,为企业提供了一种强大的工具,它如同企业的“透视镜”&…

苍穹外卖项目中所涉及到的测试内容

1.使用JWT令牌封装用户令牌,并且设置相应的拦截器校验JWT的有效性,从而确保了项目的安全可靠 1.基本功能测试: 验证合法JWT是否能够正常通过拦截器的校验 验证非法的JWT能否正常通过拦截器的校验 2.可靠性测试: 3.易用性测试 …

模拟投资大师思维:AI对冲基金开源项目详解

这里写目录标题 引言项目概述核心功能详解多样化的AI投资智能体灵活的运行模式透明的决策过程 安装和使用教程环境要求安装步骤基本使用方法运行对冲基金模式运行回测模式 应用场景和实际价值教育和研究价值潜在的商业应用与现有解决方案的对比局限性与发展方向 结论 引言 随着…

YOLO拓展-锚框(anchor box)详解

一.锚框(anchor box)概述 1.1什么是锚框 锚框就是一种进行预测的像素框,通过遍历输入图像上所有可能的像素框,然后选出正确的目标框,并对位置和大小进行调整就可以完成目标检测任务。 对于yolo锚框的建设须基于实际…

Excel自定义函数取拼音首字母

1.启动Excel 2003(其它版本请仿照操作),打开相应的工作表; 2.执行“工具 > 宏 > Visual Basic编辑器”命令(或者直接按“AltF11”组合键),进入Visual Basic编辑状态; 3.执行“…

Cril 截取字段-生成hostname

有些event 是不规则,需要用regular express 来加工一下, 下面说一下sample 数据: 2021-10-26 17:00:12 PDT sample log data from host eagle1 2021-10-26 17:00:12 PDT sample log data from host eagle2 2021-10-26 17:00:12 PDT sample log data from host eagle3 2021…