ResNet网络学习笔记

一、ResNet概述

背景及亮点介绍

ResNet于2015年在微软实验室被提出

网络中的亮点:
1.超深的网络结构(突破1000层)
2.提出residual 模块(残差模块)
3.使用Batch Normalization加速训练(丢弃dropout)

层数堆叠产生的问题

如下图所示,56层的网络训练和测试中的loss值甚至大于20层的网络
ResNet网络学习笔记_第1张图片
原论文中将此问题出现的原因归结于两方面:
一是梯度消失或梯度爆炸;二是退化问题。

其实,随着网络层数的加深,梯度消失和梯度爆炸的现象会更加明显;
退化问题解决方案:残差结构

residual结构(残差结构)

主分支与shortcut(捷径)的输出矩阵shape必须相同

计算方法:主干输出与捷径输出直接相加所得结果即为输出

18/34层网络残差结构:
ResNet网络学习笔记_第2张图片
50/101/152层网络残差结构:
ResNet网络学习笔记_第3张图片
其中,1*1的卷积层用来降维和升维

完整resnet网络
ResNet网络学习笔记_第4张图片

接下来以34层残差网络为例,解释上图的结构,首先上图:
ResNet网络学习笔记_第5张图片
ResNet网络学习笔记_第6张图片
ResNet网络学习笔记_第7张图片
其中,一个方框代表该conv下对应的一系列残差结构

conv2之后的网络结构与之相类似,但只有conv2层第一个捷径为实线,因为最大池化层后得到的矩阵深度为64,与conv2需要的channel相等,其余的conv3、conv4、conv5层都为虚线,即存在下采样过程;实线对应的残差结构输入矩阵和输出矩阵的shape是一样的,虚线对应的残差结构输入矩阵和输出矩阵不一样,且channel也不同;对于更多层次网络中conv2的第一个为虚线残差层,该层仅调整了特征矩阵的深度,并未改变高和宽

下采样是通过conv3、conv4、conv5所对应的一系列残差结构的第一层来执行的

Batch Normalization

其目的为使一批(Batch)feature map满足均值为0,方差为1的分布规律,通过该方法可以加速网络的收敛并提高准确率;

在对数据进行处理的过程中,经过conv1处理的feature map不一定满足我们所期望的分布规律,Batch Normalization便是对feature map进行处理(如下图)
ResNet网络学习笔记_第8张图片
对于一个多维的输入,Batch Normalization是对其每一个维度分别进行标准化处理;
具体计算方法如下:
ResNet网络学习笔记_第9张图片

ResNet网络学习笔记_第10张图片
实例展示:
其中均值和方差均为向量,其维度对应矩阵深度(channel)
ResNet网络学习笔记_第11张图片

需注意的问题

1.训练时training参数应设为True,验证时设为False;pytorch中使用model.train()和model.eval()来控制

2.batchsize应设置的尽量大

3.将bn层放在conv与relu之间,且卷积层中不使用bias(偏置)

参考资料:https://blog.csdn.net/qq_37541097/article/details/104434557

你可能感兴趣的:(ResNet网络学习笔记)