news 2026/6/16 16:21:14

掌握池化的原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
掌握池化的原理

目录

一、前言

二、什么是池化

三、为什么需要池化

四、池化层在CNN中的位置

五、最大池化(Max Pooling)

六、最大池化计算过程

七、最大池化为什么有效

八、平均池化(Average Pooling)

九、平均池化计算示例

十、最大池化与平均池化对比

十一、池化尺寸计算

十二、Stride 对池化的影响

十三、什么是全局池化

十四、全局池化的优势

十五、池化的本质

十六、使用Numpy实现最大池化

十七、使用PyTorch实现池化

十八、平均池化实现

十九、现代CNN为什么减少使用池化

二十、面试高频问题

什么是池化?

最大池化和平均池化区别?

为什么需要池化?

池化层有参数吗?

Global Average Pooling作用是什么?

为什么现代网络减少使用池化?

二十一、总结


在学习卷积神经网络(CNN)时,经常会看到这样的网络结构:

Conv ↓ ReLU ↓ Pooling ↓ Conv ↓ ReLU ↓ Pooling

很多同学刚接触 CNN 时都会产生疑问:

什么是池化? 为什么卷积后还要池化? 池化会不会丢失信息? 最大池化和平均池化有什么区别? 现代网络为什么越来越少使用池化?

事实上:

池化(Pooling) 是CNN中最经典的下采样技术

从:

LeNet AlexNet VGG

到现代视觉网络。

池化都发挥过重要作用。

本文将系统讲解:

什么是池化 池化为什么存在 最大池化 平均池化 全局池化 池化尺寸计算 池化代码实现 池化优缺点

二、什么是池化

池化(Pooling)是一种:

特征压缩 降维 下采样

技术。

其作用是:

减少特征图尺寸 保留重要特征 降低计算量

简单来说:

卷积负责发现特征 池化负责压缩特征

例如:

输入特征图:

1 3 2 4 5 6 8 2 1 4 7 9 2 3 5 8

经过池化后:

6 8 4 9

尺寸明显变小。


三、为什么需要池化

假设输入图片:

224 × 224

经过多层卷积后:

224 × 224 × 64

特征图数量很多。

如果继续卷积:

计算量巨大

因此需要:

压缩特征图

作用:

降低内存占用 减少计算量 降低过拟合风险

四、池化层在CNN中的位置

典型结构:

工作流程:

提取特征 ↓ 压缩特征 ↓ 继续提取更高级特征

五、最大池化(Max Pooling)

最常见的池化方式:

最大池化

规则:

取窗口中的最大值

输入:

1 3 5 6

最大值:

6

输出:

6

六、最大池化计算过程

输入矩阵:

1 3 2 4 5 6 8 2 1 4 7 9 2 3 5 8

池化窗口:

2 × 2

第一次覆盖:

1 3 5 6

取最大值:

6

第二次覆盖:

2 4 8 2

结果:

8

继续计算:

最终输出:

6 8 4 9

七、最大池化为什么有效

因为:

图像中的关键特征 往往表现为强响应

例如:

边缘特征:

0.1 0.2 8.7 0.3

显然:

8.7 最重要

最大池化能够保留:

最显著特征

因此:

边缘 纹理 轮廓

能够被更好地保留下来。


八、平均池化(Average Pooling)

另一种经典池化:

Average Pooling

规则:

取平均值

输入:

1 3 5 7

结果:

(1+3+5+7)/4 =4

输出:

4

九、平均池化计算示例

输入:

1 3 2 4 5 6 8 2 1 4 7 9 2 3 5 8

窗口:

2×2

第一块:

1 3 5 6

平均值:

(1+3+5+6)/4 =3.75

最终输出:

3.75 4 2.5 7.25

十、最大池化与平均池化对比

对比项最大池化平均池化
计算方式取最大值取平均值
保留特征强特征整体特征
抗噪能力一般
应用场景CNN主流早期网络

通常:

Max Pooling 使用更多

十一、池化尺寸计算

假设:

输入:

4 × 4

池化窗口:

2 × 2

步长:

2

输出尺寸:

Output = (Input - PoolSize) / Stride +1

计算:

(4-2)/2 +1 =2

结果:

2 × 2

十二、Stride 对池化的影响

Stride表示:

池化窗口移动步长

例如:

Stride=1

窗口重叠。


Stride=2

窗口不重叠。

示意:

步长越大:

输出尺寸越小

十三、什么是全局池化

现代CNN经常使用:

Global Average Pooling

简称:

GAP

作用:

整个特征图求平均

例如:

1 2 3 4

输出:

(1+2+3+4)/4 =2.5

十四、全局池化的优势

传统CNN:

卷积 ↓ 全连接层

参数很多。

例如:

512×7×7

展开后:

25088个神经元

参数巨大。

而:

Global Pooling

直接变成:

512

个值。

优势:

参数更少 更不容易过拟合

十五、池化的本质

很多人认为:

池化只是缩小图片

实际上:

池化是一种信息压缩

保留:

重要特征

舍弃:

冗余细节

类似于:

看缩略图 依然知道图片内容

虽然:

细节减少

但:

主体信息保留

十六、使用Numpy实现最大池化

import numpy as np feature_map = np.array([ [1,3,2,4], [5,6,8,2], [1,4,7,9], [2,3,5,8] ]) result = np.zeros((2,2)) for i in range(2): for j in range(2): region = feature_map[ i*2:i*2+2, j*2:j*2+2 ] result[i,j] = np.max(region) print(result)

输出:

[[6. 8.] [4. 9.]]

十七、使用PyTorch实现池化

最大池化:

import torch import torch.nn as nn pool = nn.MaxPool2d( kernel_size=2, stride=2 ) x = torch.randn( 1, 3, 32, 32 ) y = pool(x) print(y.shape)

输出:

torch.Size([1,3,16,16])

尺寸减半。


十八、平均池化实现

avg_pool = nn.AvgPool2d( kernel_size=2, stride=2 ) y = avg_pool(x) print(y.shape)

结果:

torch.Size([1,3,16,16])

与最大池化尺寸相同。

区别仅在于:

计算方式不同

十九、现代CNN为什么减少使用池化

近年来:

ResNet EfficientNet Vision Transformer

越来越少使用传统池化。

原因:

卷积步长Stride 也能完成下采样

例如:

nn.Conv2d( 64, 128, kernel_size=3, stride=2 )

直接:

完成卷积 同时完成降采样

效果更好。


二十、面试高频问题

什么是池化?

对特征图进行下采样压缩

最大池化和平均池化区别?

最大池化取最大值 平均池化取平均值

为什么需要池化?

降低计算量 减少过拟合 压缩特征

池化层有参数吗?

没有 属于无参数层

Global Average Pooling作用是什么?

替代全连接层 减少参数量

为什么现代网络减少使用池化?

Stride卷积能够同时完成 特征提取和降采样

二十一、总结

池化层是卷积神经网络中的经典组件。

其核心作用:

压缩特征图 ↓ 保留重要信息 ↓ 减少计算量 ↓ 提升模型泛化能力

常见池化方式:

最大池化(Max Pooling) ↓ 平均池化(Average Pooling) ↓ 全局平均池化(GAP)

在CNN的发展历程中:

卷积 ↓ 池化 ↓ 深层卷积 ↓ 残差网络 ↓ 视觉Transformer

池化一直扮演着重要角色。

可以说:

卷积负责发现特征,而池化负责压缩特征。掌握池化原理,不仅能够理解 CNN 的整体架构,更能够理解现代计算机视觉模型为何能够在有限计算资源下处理海量图像数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 3:31:32

FOC轮腿机器人:嵌入式运动控制系统的技术实现与创新

FOC轮腿机器人:嵌入式运动控制系统的技术实现与创新 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software development. | …

作者头像 李华
网站建设 2026/6/14 5:20:50

嵌入式工程师必备:Linux文件操作核心命令实战与安全指南

1. 从命令行到生产力:嵌入式工程师的Linux文件操作实战指南在嵌入式开发、硬件调试乃至整个电子工程领域,Linux命令行早已不是系统管理员的专属工具。无论是编译一个MCU的交叉工具链,还是通过串口分析FPGA的日志文件,亦或是管理海…

作者头像 李华
网站建设 2026/6/14 3:31:30

Solidworks导出URDF及STL模型相关

导出URDF 导出URDF文件时,所选的参考轴一定要是场景中根层级的参考轴,而不是零部件中的,否则导出的模型不对。关于每个关节/link所选用的坐标系和轴,我暂时还是理解得不够透彻。有时假如在场景中选的坐标系和零件本身的坐标系的朝…

作者头像 李华
网站建设 2026/6/14 3:31:34

从裸机到RTOS:基于RT-Thread Nano的机智云物联网设备移植实战

1. 项目概述与背景最近在做一个智能家居的温湿度监测节点,硬件核心是STM32F103,云端服务用的是机智云。机智云平台确实方便,一键生成设备端代码,快速就能完成数据上报和指令接收。但生成的代码是裸机(Bare Metal&#…

作者头像 李华
网站建设 2026/6/14 4:18:37

Windows批处理FOR命令与CALL子程序实现嵌入式工程批量编译自动化

1. 项目概述与需求拆解作为一名长期在嵌入式领域摸爬滚打的工程师,我经常需要面对一个让人头皮发麻的场景:手头管理着几十甚至上百个基于Keil、IAR或类似IDE的MCU工程。这些工程可能来自不同的客户、不同的产品线,或者仅仅是同一产品的不同版…

作者头像 李华
网站建设 2026/6/14 3:31:34

如何快速集成ECharts到微信小程序:终极完整指南

如何快速集成ECharts到微信小程序:终极完整指南 【免费下载链接】echarts-for-weixin 基于 Apache ECharts 的微信小程序图表库 项目地址: https://gitcode.com/gh_mirrors/ec/echarts-for-weixin 想在微信小程序中实现专业级数据可视化吗?EChart…

作者头像 李华