一、ResNet概述
背景及亮点介绍
ResNet于2015年在微软实验室被提出
网络中的亮点:
1.超深的网络结构(突破1000层)
2.提出residual 模块(残差模块)
3.使用Batch Normalization加速训练(丢弃dropout)
层数堆叠产生的问题
如下图所示,56层的网络训练和测试中的loss值甚至大于20层的网络
原论文中将此问题出现的原因归结于两方面:
一是梯度消失或梯度爆炸;二是退化问题。
其实,随着网络层数的加深,梯度消失和梯度爆炸的现象会更加明显;
退化问题解决方案:残差结构
residual结构(残差结构)
主分支与shortcut(捷径)的输出矩阵shape必须相同
计算方法:主干输出与捷径输出直接相加所得结果即为输出
18/34层网络残差结构:
50/101/152层网络残差结构:
其中,1*1的卷积层用来降维和升维
完整resnet网络:
接下来以34层残差网络为例,解释上图的结构,首先上图:
其中,一个方框代表该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进行处理(如下图)
对于一个多维的输入,Batch Normalization是对其每一个维度分别进行标准化处理;
具体计算方法如下:
实例展示:
其中均值和方差均为向量,其维度对应矩阵深度(channel)
需注意的问题
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