96SEO 2026-02-19 11:44 0
NetworkResNet是在神经网络模型中给非线性层增加直连边的方式来缓解梯度消失问题从而使训练深度神经网络变得更加容易。

假设为一个或多个神经层残差单元在$f()$的输入和输出之间加上一个直连边。
不同于传统网络结构中让网络去逼近一个目标函数在残差网络中将目标函数拆为了两个部分恒等函数和残差函数
一个典型的残差单元如图所示由多个级联的卷积层和一个跨层的直连边组成。
一个残差网络通常有很多个残差单元堆叠而成。
下面我们来构建一个在计算机视觉中非常典型的残差网络ResNet18并重复上一节中的手写体数字识别任务。
在本节中我们先构建ResNet18的残差单元然后在组建完整的网络。
这里我们实现一个算子ResBlock来构建残差单元其中定义了use_residual参数用于在后续实验中控制是否使用残差连接。
残差单元包裹的非线性层的输入和输出形状大小应该一致。
如果一个卷积层的输入特征图和输出特征图的通道数不一致则其输出与输入特征图无法直接相加。
为了解决上述问题我们可以使用大小的卷积将输入特征图的通道数映射为与级联卷积输出特征图的一致通道数。
卷积与标准卷积完全一样唯一的特殊点在于卷积核的尺寸是也就是不去考虑输入数据局部信息之间的关系而把关注点放在不同通道间。
通过使用卷积可以起到如下作用
实现信息的跨通道交互与整合。
考虑到卷积运算的输入输出都是3个维度宽、高、多通道所以卷积实际上就是对每个像素点在不同的通道上进行线性组合从而整合不同通道的信息
对卷积核通道数进行降维和升维减少参数量。
经过卷积后的输出保留了输入数据的原有平面结构通过调控通道数从而完成升维或降维的作用
利用卷积后的非线性激活函数在保持特征图尺寸不变的前提下大幅增加非线性。
use_residualTrue):super(ResBlock,
第一个卷积层卷积核大小为3×3可以设置不同输出通道数以及步长self.conv1
第二个卷积层卷积核大小为3×3不改变输入特征图的形状步长为1self.conv2
如果conv2的输出和此残差块的输入数据形状不一致则use_1x1conv
True添加1个1x1的卷积作用在输入数据上使其形状变成跟conv2一致if
当残差单元包裹的非线性层输入和输出通道数不一致时需要用1×1卷积调整通道数后再进行相加运算if
每个卷积层后会接一个批量规范化层批量规范化的内容在7.5.1中会进行详细介绍self.bn1
nn.BatchNorm2d(out_channels)self.bn2
nn.BatchNorm2d(out_channels)def
F.relu(self.bn1(self.conv1(inputs)))y
如果为真对inputs进行1×1卷积将形状调整成跟conv2的输出y一致shortcut
否则直接将inputs和conv2的输出y相加shortcut
残差网络就是将很多个残差单元串联起来构成的一个非常深的网络。
ResNet18
第一模块包含了一个步长为2大小为的卷积层卷积层的输出通道数为64卷积层的输出经过批量归一化、ReLU激活函数的处理后接了一个步长为2的的最大汇聚层
第二模块包含了两个残差单元经过运算后输出通道数为64特征图的尺寸保持不变
第三模块包含了两个残差单元经过运算后输出通道数为128特征图的尺寸缩小一半
第四模块包含了两个残差单元经过运算后输出通道数为256特征图的尺寸缩小一半
第五模块包含了两个残差单元经过运算后输出通道数为512特征图的尺寸缩小一半
第六模块包含了一个全局平均汇聚层将特征图变为的大小最终经过全连接层计算出最后的输出。
make_first_module(in_channels):m1
nn.Sequential(nn.Conv2d(in_channels,
nn.ReLU(),nn.MaxPool2d(kernel_size3,
0:blk.append(ResBlock(input_channels,
use_residualuse_residual))else:blk.append(ResBlock(out_channels,
use_residualuse_residual))return
模块二包含两个残差单元输入通道数为64输出通道数为64步长为1特征图大小保持不变m2
nn.Sequential(*resnet_module(64,
模块三包含两个残差单元输入通道数为64输出通道数为128步长为2特征图大小缩小一半。
m3
nn.Sequential(*resnet_module(64,
模块四包含两个残差单元输入通道数为128输出通道数为256步长为2特征图大小缩小一半。
m4
nn.Sequential(*resnet_module(128,
模块五包含两个残差单元输入通道数为256输出通道数为512步长为2特征图大小缩小一半。
m5
nn.Sequential(*resnet_module(256,
use_residualuse_residual))return
use_residualTrue):super(Model_ResNet18,
make_first_module(in_channels)m2,
make_modules(use_residual)self.net
这里同样可以使用torchsummary.summary统计模型的参数量。
为了验证残差连接对深层卷积神经网络的训练可以起到促进作用接下来先使用ResNet18use_residual设置为False进行手写数字识别实验再添加残差连接use_residual设置为True观察实验对比效果。
为了验证残差连接的效果先使用没有残差连接的ResNet18进行实验。
使用训练集和验证集进行模型训练共训练5个epoch。
在实验中保存准确率最高的模型作为最佳模型。
代码实现如下
data.DataLoader(datasettrain_dataset,
data.DataLoader(datasetdev_dataset,
data.DataLoader(datasettest_dataset,
log_stepslog_steps,eval_stepseval_steps,
使用测试数据对在训练过程中保存的最佳模型进行评价观察模型在测试集上的准确率以及损失情况。
代码实现如下
MNIST_dataset(datasettrain_set,
定义网络通过指定use_residual为True使用残差结构的深层网络
log_stepslog_steps,eval_stepseval_steps,
使用测试数据对在训练过程中保存的最佳模型进行评价观察模型在测试集上的准确率以及损失情况。
runner.load_model(best_model.pdparams)
对于Reset18这种比较经典的图像分类网络pytorch中都为大家提供了实现好的版本大家可以不再从头开始实现。
这里为高层API版本的resnet18模型和自定义的resnet18模型赋予相同的权重并使用相同的输入数据观察输出结果是否一致。
warningswarnings.filterwarnings(ignore)#
使用飞桨HAPI中实现的resnet18模型该模型默认输入通道数为3输出类别数1000
params[key]else:new_params[net.
params[key]new_params[net.0.0.bias]
将飞桨HAPI中实现的resnet18模型的权重参数赋予自定义的resnet18模型保持两者一致
model.load_state_dict(OrderedDict(new_params))#
C:\Users\29134\PycharmProjects\pythonProject\DL\实验12\ResNet.py,
model.load_state_dict(OrderedDict(new_params))
C:\ANACONDA\envs\pytorch\Lib\site-packages\torch\nn\modules\module.py,
找了很多资料但是依旧没找到怎么解决同班同学的代码也跑不通结论怎么出来的疑惑这两天时间不太充裕全是结课论文过两天会回来再次尝试解决这个问题的
首先使用带残差连接的ResNet模型相比于不带残差的模型在训练过程中表现出更好的性能。
带残差的模型具有更快的收敛速度、更低的损失和更高的准确率。
这证明了残差块确实能够为网络带来性能提升而无脑堆砌网络层并不能有效地提高模型的性能。
这个结果也打破了我一直都认为神经网络越深性能越好的理论认知同时通过学长的博客我认识到残差连接能够有效地缓解梯度消失问题减少训练难度并提高了网络的深度和表达能力。
这也算一个小小的收获吧(那一大堆推导我真没看懂哭
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback