本文主要是介绍ResNet网络学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介
Residual Network 简称 ResNet (残差网络)
下面是ResNet的网络结构:
ResNet详细介绍
原理
传统方法的问题:
- 对于一个网络,如果简单地增加深度,就会导致 梯度消失 或 梯度爆炸,我们采取的解决方法是 正则化。
- 随着网络层数进一步增加,又会出现模型退化问题,在训练集上的 准确率出现饱和甚至下降 的现象 ;
因此提出了通过利用内部的残差块实现跳跃连接,解决神经网络深度加深带来的 模型退化 问题:
残差块 Residual Block
残差块就是网络中这里使用[]的部分,旁边x num代表使用了多少个残差块。多个小残差块构成了大残差块,如conv2_x
残差块的结构如图所示,有两种结构,分别给浅层网络与深层网络使用。残差块的尾部相加时需要保证主分支与shortcut分支的尺寸与通道数要相同才能相加。
但从上面的网络结构可知,不同大残差块的主分支的输入与输出的通道与尺寸是不同的,通道数在增加而尺寸在缩小。
这里以resnet50为例,不同层次的小残差块所希望的输入尺寸与通道数
因此需要进行调整,对每个大残差块的第一个小残差块进行修改,需要在shortcut分支增加一个1x1卷积操作来调整shortcut的尺寸与通道,步长则根据是否需要缩小尺寸而设计。
下面是两种残差块的变种,
下图是不同网络的结构图,其中右边的resnet34中,不同层的第一个残差块都会使用变种的shortcut分支来适配主分支。
由于resnet34中第一个层的输入刚好是64个通道,因此不用修改shortcut分支就可以。
但对于深层网络,如50层之后的,在第一层就需要使用变种的shortcut来调整通道数,但不需要修改尺寸。其他层需要同时修改尺寸与通道数。
这篇关于ResNet网络学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!