深度学习基础课:最大池化层的前向传播推导
大家好~本课程为“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序
线上课程资料:
本节课录像回放
加QQ群,获得ppt等资料,与群主交流讨论:106047770
本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章
本课程系列文章可进入索引查看:
深度学习基础课系列文章索引
回顾相关课程内容

- 卷积神经网络的常用架构模式是是什么?
- 最大池化层在卷积神经网络中的作用是什么?
为什么要学习本课
主问题:如何推导最大池化层的前向传播?
-
最大池化层的输入和输出是什么?

答:输入是上一层(卷积层)输出的多个Feature Map,输出是对每个Feature Map进行了下采样后的多个Feature Map,其中输出的Feature Map的个数与输入的个数相同
-
最大池化层是否包含Filter?
答:是
-
Filter的作用是什么?
答:Filter属于抽象的概念,并没有实际的值。它的作用是取对应区域的最大值
-
有几个Filter?
答:1个
-
假设有一个4∗4的Feature Map,使用一个2∗2的filter和步幅为2的最大池化层,得到一个2∗2的Feature Map,如下图所示:

-
计算的公式是什么?
答:
ai,j=max(⎡⎢
⎢
⎢⎣xi∗stride,j∗stride⋯xi∗stride+stride−1,j∗stride⋮⋱⋮xi∗stride,j∗stride+stride−1⋯xi∗stride+stride−1,j∗stride+stride−1⎤⎥
⎥
⎥⎦)
用xi,j来表示输入FeatureMap的第i行第j列元素;用ai,j表示输出FeatureMap的第i行第j列元素;
- 如果输入Feature Map的深度大于1,计算的公式是什么?
答:
ad,i,j=max(⎡⎢
⎢
⎢⎣xd,i∗stride,j∗stride⋯xd,i∗stride+stride−1,j∗stride⋮⋱⋮xd,i∗stride,j∗stride+stride−1⋯xd,i∗stride+stride−1,j∗stride+stride−1⎤⎥
⎥
⎥⎦)
用xd,i,j来表示输入FeatureMap的第d层第i行第j列元素;用ad,i,j表示输出FeatureMap的第d层第i行第j列元素;
W2=?H2=?其中,W2是输出FeatureMap的宽度,H2是输出FeatureMap的高度;W1是输入FeatureMap的宽度,H1是输入FeatureMap的高度;F是Filter的宽度(等于高度),S是步幅
答:
W2=W1−FS+1H2=H1−FS+1其中,W2是输出FeatureMap的宽度,H2是输出FeatureMap的高度;W1是输入FeatureMap的宽度,H1是输入FeatureMap的高度;F是Filter的宽度(等于高度),S是步幅
任务:实现最大池化层的前向传播
- 请实现最大池化层的前向传播?
答:待实现的代码为:MaxPoolingLayer,实现后的代码为:MaxPoolingLayer_answer
- 请运行最大池化层的代码,检查前向传播的输出是否正确?
答:在Test.init函数中,构造了输入数据和MaxPooling Layer;
在Test.test函数中,进行了前向传播并打印了结果。
结果为两个Feature Map,它的数据如下所示:
["f:",[
[2,2,[3,2,1,2]],
[2,2,[5,2,2,2]]
]]
我们可以手动计算下a0,0,0,结果等于3,与输出的结果相同,证明forward的实现是正确的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?