NNDL 实验六 卷积神经网络(4)ResNet18实现MNIST

目录

5.4 基于残差网络的手写体数字识别实验

5.4.1 模型构建

5.4.2 没有残差连接的ResNet18

5.4.3 带残差连接的ResNet18

5.4.4 与高层API实现版本的对比实验


5.4 基于残差网络的手写体数字识别实验

残差网络(Residual Network,ResNet)是在神经网络模型中给非线性层增加直连边的方式来缓解梯度消失问题,从而使训练深度神经网络变得更加容易。

在残差网络中,最基本的单位为残差单元

5.4.1 模型构建

构建ResNet18的残差单元,然后在组建完整的网络。

5.4.1.1 残差单元

残差单元包裹的非线性层的输入和输出形状大小应该一致。

如果一个卷积层的输入特征图和输出特征图的通道数不一致,则其输出与输入特征图无法直接相加。

可以使用1×1大小的卷积将输入特征图的通道数映射为与级联卷积输出特征图的一致通道数

1×1卷积:与标准卷积完全一样,唯一的特殊点在于卷积核的尺寸是1×1,也就是不去考虑输入数据局部信息之间的关系,而把关注点放在不同通道间。

通过使用1×1卷积,可以起到如下作用:

  • 实现信息的跨通道交互与整合。考虑到卷积运算的输入输出都是3个维度(宽、高、多通道),所以1×1卷积实际上就是对每个像素点,在不同的通道上进行线性组合,从而整合不同通道的信息;
  • 对卷积核通道数进行降维和升维,减少参数量。经过1×1卷积后的输出保留了输入数据的原有平面结构,通过调控通道数,从而完成升维或降维的作用;
  • 利用1×1卷积后的非线性激活函数,在保持特征图尺寸不变的前提下,大幅增加非线性。

5.4.1.2 残差网络的整体结构

5.4.2 没有残差连接的ResNet18

先使用没有残差连接的ResNet18进行实验。

5.4.2.1 模型训练

5.4.2.2 模型评价

5.4.3 带残差连接的ResNet18

再使用带残差连接的ResNet18重复上面的实验。

5.4.3.1 模型训练

5.4.3.2 模型评价

5.4.4 与高层API实现版本的对比实验

飞桨高层 API是对飞桨API的进一步封装与升级,提供了更加简洁易用的API,进一步提升了飞桨的易学易用性。

其中,飞桨高层API封装了以下模块:

  1. Model类,支持仅用几行代码完成模型的训练;
  2. 图像预处理模块,包含数十种数据处理函数,基本涵盖了常用的数据处理、数据增强方法;
  3. 计算机视觉领域和自然语言处理领域的常用模型,包括但不限于mobilenet、resnet、yolov3、cyclegan、bert、transformer、seq2seq等等,同时发布了对应模型的预训练模型,可以直接使用这些模型或者在此基础上完成二次开发。

飞桨高层 API主要包含在paddle.visionpaddle.text目录中。

对于Reset18这种比较经典的图像分类网络,飞桨高层API中都为大家提供了实现好的版本,大家可以不再从头开始实现。

这里为高层API版本的resnet18模型和自定义的resnet18模型赋予相同的权重,并使用相同的输入数据,观察输出结果是否一致。

Pytorch  torchvision.models

resnet18 — Torchvision 0.13 documentation (pytorch.org)

学习并在实验中使用: torchvision.models.resnet18()

Pytorch

torchvision.models.resnet18()

resnet18 — Torchvision 0.13 documentation (pytorch.org)

vision/resnet.py at main · pytorch/vision (github.com)


ref:

NNDL 实验5(上) - HBU_DAVID - 博客园 (cnblogs.com)

NNDL 实验5(下) - HBU_DAVID - 博客园 (cnblogs.com)

6. 卷积神经网络 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)

7. 现代卷积神经网络 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)

你可能感兴趣的:(DeepLearning,深度学习)