backbone的演化——resnet系列的进击!

ResNet深度残差网络的出现解决了梯度弥散/爆炸和网络退化问题,推动了深度学习的发展。从ResNet到ResNeXt、Res2Net和ResNeSt,这些网络在保留残差思想的基础上不断优化,提升了模型的表达能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

  深度残差网络做出了深度学习发展历程里程碑式的贡献,它的出现极大地改变了深度网络的面貌,增加了深度网络的可学习纵深,以一种更加有效地方式提升了模型抽取特征的能力,从此残差映射和思想深入人心,有力地促进了目标识别、图像分类、实例分割等领域的发展。
  自resnet出现至今,各位学者在借鉴resnet思想上,衍生出了一系列的深度学习网络,包括但不限于resnext、resnest等,下面就将对相关文章进行梳理。由于笔者才疏学浅,若有错漏之处,敬请指出。

正文

  本文当前共梳理5篇文章,分别是ResNet1、ResNeXt、Res2Net、ResNeSt、HS-ResNet。

ResNet

  神经网络作为连接主义的代表,随着BP的算法出现再次活跃在舞台上。在2012年ImageNet竞赛上,AlexNet横空出世,向世人展现了神经网络强大的特征表达能力,省去了手工提取特征的方式,自此神经网络作为表征学习的代表被广大的研究人员所青睐。
  神经网络通过一层又一层的感知机构建起前馈网络,使用激活函数来引入非线性,再通过梯度反传来不断逼近非线性目标。在这个过程中除了会有必然出现的过拟合问题(如果可以证明经验误差最小化就可以得到最优解,就能构造性地证明'P=NP',否则只要相信'P≠NP',过拟合就无法避免。) 2 ,还有两个较为普遍的问题3,一是梯度弥散/爆炸问题,二是网络退化问题。

梯度弥散/爆炸问题

  现代神经网络训练时多使用基于梯度反传的优化器,当网络愈深,其参数和激活结果的变化被放得也就愈大。最终出现梯度弥散/爆炸问题。
  比如就梯度反传来说,假设 δ i \delta^i δi是损失 ϵ \epsilon ϵ传播到第i层的结果,即 δ i = ∂ ϵ ∂ z i , z i \delta^i=\frac{\partial \epsilon}{\partial z^i},z^i δi=ziϵzi是第i层的未激活的网络结果,根据链式法则,该层的结果受到上层结果的影响即
     δ i = ∂ ϵ ∂ z i + 1 ⋅ ∂ z i + 1 ∂ a i ⋅ ∂ a i ∂ z i = δ i + 1 ⋅ ∂ z i + 1 ∂ z i , a i = σ ( z i ) \delta^i=\frac{\partial \epsilon}{\partial z^{i+1}} \cdot \frac{\partial z^{i+1}}{\partial a^i} \cdot \frac{\partial a^i}{\partial z^i}=\delta^{i+1}\cdot \frac{\partial z^{i+1}}{\partial z^i}, a^i = \sigma(z^i)

### 导入和使用 ResNet_2Branch 模型 为了在项目中正确导入并使用 `Src.backbone.ResNet` 中的 `ResNet_2Branch` 模型,需遵循特定的方法来确保模型能够被成功加载和初始化。 #### 1. 安装依赖库 首先确认已安装必要的 Python 库,特别是 PyTorch 和 torchvision。这些工具提供了构建神经网络所需的基础组件和支持函数: ```bash pip install torch torchvision ``` #### 2. 修改路径配置 如果 `Src.backbone.ResNet` 文件不在项目的根目录下,则需要调整系统的模块搜索路径以便顺利导入该模块。可以在脚本开头加入如下代码片段以临时扩展PYTHONPATH环境变量: ```python import sys sys.path.append('/path/to/project/Src/backbone') ``` 这里 `/path/to/project/Src/backbone` 是实际存放 `ResNet.py` 的绝对路径。 #### 3. 导入 ResNet_2Branch 类 接着,在Python脚本里通过 import 语句引入所需的类定义: ```python from ResNet import ResNet_2Branch ``` 此操假设 `ResNet.py` 文件内确实存在名为 `ResNet_2Branch` 的类定义[^3]。 #### 4. 初始化实例对象 创建具体的 `ResNet_2Branch` 实例时,通常会指定一些超参数为构造器输入,比如层数、预训练权重等选项。下面是一个简单的例子展示如何完成这一步骤: ```python model = ResNet_2Branch(pretrained=True) ``` 此处设置 pretrained 参数为 True 可让框架自动下载官方提供的 ImageNet 预训练权重,从而加速收敛过程并提高泛化能力。 #### 5. 调整分支逻辑 (可选) 对于某些特殊应用场景而言,可能还需要进一步定制两个分支的具体行为模式。此时可以根据需求修改前向传播方法 forward() 或者重写其他成员函数来满足业务要求。 ```python def custom_forward(self, x): # 自定义处理流程... pass setattr(model, 'forward', custom_forward.__get__(model)) ``` 以上步骤完成后即可正常使用 `ResNet_2Branch` 进行图像分类或其他视觉任务了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值