Pytorch实战 |J1ResNet-50算法实战与解析

本文介绍了ResNet-50在Pytorch中的实战应用,详细探讨了ResNet解决深度神经网络退化问题的理论背景,包括残差块结构、两种不同residual的区别以及如何避免梯度消失。通过代码实现展示了模型的训练过程,指出未加载预训练模型时初始训练效果不佳,但加载最优模型参数后能显著提升模型性能。
摘要由CSDN通过智能技术生成

● 🍨 本文为🔗365天深度学习训练营 中的学习记录博客

一、我的环境

● 语言环境:Python3.8
● 编译器:pycharm
● 深度学习环境:Pytorch
● 数据来源:链接:https://pan.baidu.com/s/1shV_R21WjZ34YJzjbrwsOA 提取码:a664

二、理论知识

1、ResNet要解决的是深度神经网络的“退化”问题。

(1) “退化”指的是,给网络叠加更多的层后,性能却快速下降的情况
(2) 训练集上的性能下降,可以排除过拟合;BN层的引入也基本解决了plain net的梯度消失和梯度爆炸问题(梯度小于1,累积后容易变为0;梯度大于1,累积后容易梯度爆炸)
(3) 浅层网络的解空间是包含在深层网络的解空间中的。深层网络的解空间至少存在不差于浅层网络的解,因为只需将增加的层变成恒等映射,其他层的权重原封不动copy浅层网络,就可以获得与浅层网络同样的性能
(4)主要是由于优化问题导致的。 反映出结构相似的模型,其优化难度是不一样的,且难度的增长并不是线性的,越深的模型越难以优化。

2、解决退化问题的两种解决思路

(1) 一种是调整求解方法,比如更好的初始化、更好的梯度下降算法等
(2) 调整模型结构,让模型更易于优化——改变模型结构实际上是改变了error surface的形态

3、残差块的结构在这里插入图片描述

4、ResNet中两种不同的residual

在这里插入图片描述(1)左侧残差结构称为 BasicBlock
(2) 右侧残差结构称为 Bottleneck
(a)其中第一层的1× 1的卷积核的作用是对特征矩阵进行降维操作,将特征矩阵的深度由256降为64;
第三层的1× 1的卷积核是对特征矩阵进行升维操作,将特征矩阵的深度由64升成256。
降低特征矩阵的深度主要是为了减少参数的个数。
如果采用BasicBlock,参数的个数应该是:256×256×3×3×2=1179648
采用Bottleneck,参数的个数是:1×1×256×64+3×3×64×64+1×1×256×64=69632
(b)先降后升为了主分支上输出的特征矩阵和捷径分支上输出的特征矩阵形状相同,以便进行加法操作。
CNN参数个数 = 卷积核尺寸×卷积核深度 × 卷积核组数 = 卷积核尺寸 × 输入特征矩阵深度 × 输出特征矩阵深度

5、降维时的shortcut

在这里插入图片描述这些虚线的 short cut 上通过1×1的卷积核进行了维度处理(特征矩阵在长宽方向降采样,深度方向调整成下一层残差结构所需要的channel)

6、如何解决梯度消失

在这里插入图片描述
ResNet最终更新某一个节点的参数时,由于h(x)=F(x)+x,使得链式求导后的结果如图所示,不管括号内右边部分的求导参数有多小,因为左边的1的存在,并且将原来的链式求导中的连乘变成了连加状态(正确?),都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。

7、如何解决网络退化问题

    我们发现,假设该层是冗余的,在引入ResNet之前,我们想让该层学习到的参数能够满足h(x)=x,即输入是x,经过该冗余层后,输出仍然为x。但是可以看见,要想学习h(x)=x恒等映射时的这层参数时比较困难的。ResNet想到避免去学习该层恒等映射的参数,使用了如上图的结构,让h(x)=F(x)+x;这里的F(x)我们称作残差项,我们发现,要想让该冗余层能够恒等映射,我们只需要学习F(x)=0。学习F(x)=0比学习h(x)=x要简单,因为一般每层网络中的参数初始化偏向于0,这样在相比于更新该网络层的参数来学习h(x)=x,该冗余层学习F(x)=0的更新参数能够更快收敛,如图所示:

在这里插入图片描述

    假设该曾网络只经过线性变换,没有bias也没有激活函数。我们发现因为随机初始化权重一般偏向于0,那么经过该网络的输出值为[0.6 0.6],很明显会更接近与[0 0],而不是[2 1],相比与学
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值