ResNet50的初步认知和复现链接

下文是自己学习和了解到的,可能比较浅显,也可能比较散,主要作用还是帮自己记录,方便日后查看,所以很多东西都给出了链接,但愿对读者有所帮助,主要学习来源

一、前言

在2015年的Imagenet比赛中五项都是第一,错误率降低到了3.6%,超出了人眼的识别精度
论文:Deep Residual Learning for Image Recognition

回顾之前的网络:
LeNet:5层
AlexNet:8层
VGG:19层
GoogLeNet:22层
ResNet:152层
神经网络层数越深,越可以提取更多层次的特征,对特征进行融合,可以提升模型表现,但具有两面性

二、存在问题

Problem of Deep Network(存在的问题)

Vanishing gradients:梯度消失
Exploding gradients:梯度爆炸

Solution:(解决方法)

Normalized initialization 归一化
Intermediate normalization layers(BatchNorm) 中间层归一化

当然对于梯度消失可以通过改变激活函数来解决,梯度爆炸可以通过梯度裁剪(clip)来解决

当神经网络的层数增加时,容易引发神经网络的退化(峰型)

1
伴随着网络深度的增加,精度饱和,然后迅速退化,于是发现神经网络退化才是神经网络难以训练的原因,而不是梯度消失和梯度爆炸,于是提出了ResNet网络

三、残差块

介绍残差块之前,先看下面是一个简单的模型介绍,右边模型相较于左边多一个网络,正常来说B模型比A模型的效果好,如果B的网络为恒等因式,那么A模型的解其实是B模型解的子空间

在这里插入图片描述
恒等因式:输出与输入相同,后来何凯明也写了一篇关于恒等因式的论文,下面图片下方的*号是论文名称,有兴趣可以看看

3
残差块:F(x)就是残差,整个网络被称为残差网络
4
输入是x,如果使用恒等因式,那么输出为H(x)—>y = x;但如果使用跨层连接,那么最终的输出就会变成F(x)+x;使用F(x)+x减去H(x)就可以得到F(x),他就是残差,作者认为这样训练出的网络相对于对x进行修正,F(x)就是修正的幅度。

四、残差块的优点

5
1.没有增加任何的额外参数和计算复杂度
2.可以通过随机梯度下降进行反向传播
3.依赖现有框架实现,实现简单(tensorflow,pytorch)

五、网络结构

在网络结构过程中block会出现维度不一样的情况,可以用两种方法(具体可以查看完整的网络结构图)
1.仍然执行恒等因式,额外填充0来增加维度,保证前后维度一样
2.用1×1的卷积维持维度的变化
6
ResNet50完整的网络结构图,网络图太大,可点击链接进去查看,也是借鉴的他人博客。

六、网络的参数

7
Conv1的7×7,64,stride 2:表示7*7的卷积核,64个通道,两个步长的卷积

七、复现

ResNet50的复现暂时没有细研究,可以移步该链接,代码和细节可以查看该链接,自己找到的比较好的资源,推荐有兴趣的可以看看。

posted @ 2021-05-05 20:47  小Aer  阅读(23)  评论(0编辑  收藏  举报  来源