本文将李沐《动手学深度学习》中CV经典网络章节的mxnet代码,用Paddle 2.0重写。介绍了NiN(用1×1卷积)、GoogLeNet(Inception模块多分支)、Batch Normalization(加速收敛)、ResNet(跨层连接防梯度问题)、DenseNet(极致跨层连接)的结构与特点。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

李沐老师的经典教程 -《动手学深度学习》深入浅出,相信是很多小伙伴加入深度学习门派的“接引人”,我也是读这本书入门的~。书中的内容既不要求读者已经掌握充分的数学基础,又深入到深度学习的原理层面而不只是使用现成的经典模型结构,学起来很容易上手。美中不足的是,书中的代码是用 mxnet 框架实现的。为了方便 AI Studio 上的各位大佬们通过阅读此书提高炼丹技艺,(在紫涵大佬的唆使下(狗头~))我将书中的部分介绍 CV 经典网络章节的用 mxnet 框架实现的代码(包括 NetworkInNetwork、GoogLeNet、Batch Normalization、ResNet、DenseNet),用 Paddle 2.0 版本的 API 进行了重写。
NiN(Network In Network) 结构就是在卷积核大于1×1的普通卷积后加入多个1×1卷积核的卷积组成“网络中的内嵌网络(NiN)”。每个 NiN 模块都可以被看成一个小型的全连接神经网络,而又没全连接层那么多的参数量。这是第一个使用1×1卷积网络结构,后来的 GoogLeNet 和 ResNet 的 BottleNeck 结构等都借鉴了这一思想。

NiN的结构(图片来自网络)
详情参考项目:《动手学深度学习》Paddle 版源码-5.08章(NIN)
GoogLeNet 通过一种称为 Inception 的模块将1×1、3×3、5×5的卷积层和3×3的最大池化层拼接在一起,使其能够在一层网络中提取不同视野范围的特征。这是一种多分支结构,让模型自行提取效率最佳的感受野特征。

Inception 模块的结构:(图片来自网络)
详情参考项目:《动手学深度学习》Paddle 版源码-5.09章(GoogLeNet)
批归一化(Batch Normalization)的作用是:当数据在 DNN 网络中传播时,不断的将数据分布拉回来,避免数据的分布越来越极端,以加快模型的收敛。

(图片来自网络)
由上图可见,在不使用 BN 层的网络中,每经过一个神经网络层,数据都向数据分布区间的两端进一步靠拢,导致部分数据引起网络权重的剧烈变化,而另部分数据几乎起不到训练作用。在使用 BN 层后,各层输出的特征图的值的分布都是相近的,使每个特征都能比较平等的影响网络权重的更新。
详情参考项目:《动手学深度学习》Paddle 版源码-5.10章(BatchNorm)
与 GoogLeNet 一样,ResNet 也是一种多分支结构。但是 ResNet 的多分支是通过跨层连接来实现的,这样能够使梯度更好的进行传播,避免梯度消失/爆炸的问题。在 ResNet 之前网络的深度只能达到20多层,在深就会导致网络退化问题。ResNet 横空出世之后网络的深度能够达到上千层,拟合能力大大提升。即使现在,ResNet 的残差结构也是应用最广泛的网络基本结构之一。下图是 ResNet 的残差结构:

详情参考项目:《动手学深度学习》Paddle 版源码-5.11章(ResNet)
DenseNet 将 ResNet 的跨层连接发挥到了极致。ResNet 将相邻的层之间加入快层连接,而 DenseNet 将网络中的每一层都与其他所有层进行了跨层连接。也因此,为了结构的模块化,DenseNet 的跨层连接是通过拼接而非加和实现的。实验得出,DenseNet 并不需要很宽的网络,所以作者在 DenseNet 的稠密块之间加入了转换层控制网络宽度。下图是 DenseNet 与 ResNet 的网络结构对比:

以上就是《动手学深度学习》Paddle 版源码(经典CV网络合集)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号