继续学习霹雳大神的神经网络讲解视频
更新不易,希望大家可以去看原视频支持up主霹雳吧啦Wz
ResNet网络结构,BN以及迁移学习详解
使用pytorch搭建ResNet并基于迁移学习训练
本博文记载的是基于Pytorch框架的ResNet网络
ResNet在2015年由微软实验室提出,斩获当年ImageNet竞赛中
分类任务第一名,目标检测第一名。获得COCO数据集中目标
检测第一名,图像分割第一名。
网络亮点:
结构分析
在34层的resnet网络当中
一个卷积层
一个池化层
一系列的残差结构
平均下采样操作
最后是全连接层
//结构简单,通过堆叠残差网络组成
这是由于:
梯度消失或梯度爆炸
随着我们网络的不断加深,梯度消失或梯度爆炸的现象会越来越明显。假设我们的误差梯度是一个小于1的数,每向前传播一层,都要乘以一个小于1的误差梯度。当我们的网络越来越深,所需要乘以的小于1的数越多,所以就越趋近于零,这就是梯度消失现象。
假设我们的误差梯度大于1,每向前传播一层,都要乘以一个大于1的误差梯度。当我们的网络越来越深,所需要乘以的大于1的数越多,所以就越来越大,这就是梯度爆炸现象。
解决办法:对数据进行标准化处理、还有权重初始化,或者是BN初始化处理。
退化问题(degradation problem)
通过残差结果可以解决退化问题
左边是主要是针对网络层数较少使用的残差结构(34层残差网络结构)
本来的路线是->通过两个3x3的卷积核的到我们的结果。
右边有一个弧线,直接从我们的输入连接到输出层,且有一个+号:意思是将我们的输入与经过两个3x3的卷积层处理后得到的特征矩阵相加,相加后再经过relu激活函数。
这里注意:我们的主分支特征矩阵的高宽与测分支(shortcut)特征矩阵的高宽(shape)以及层数channel64是相同的,这样我们保证两个特征矩阵在相同的维度上进行相加。
右边是主要是针对网络层数较多使用的残差结构(50/101/152层残差网络结构)
通过1x1卷积核->3x3卷积核->1x1卷积核
在这里1x1的卷积核是用来降维还有升维的。 这里可以看到从256层降低到64层,然后从64升维到256层,这样我们保证两个特征矩阵在相同的维度上进行相加。
右边与左边相比减少了多少参数的运算呢?
计算公式:widthheight输入的深度*卷积核的个数
假设输入一个特征矩阵是256x256x256
//这里注意将左图的64看成256计算即可
3x3x256x256+3x3x256x256=1179648
//使用256个卷积核,每个卷积核对应256层
1x1x256x64+3x3x64x64+1x1x64x256=69632
实线与虚线残差结构的区别?
//有待理解
Batch Normalization的目的是使我们的一批(Batch)
feature map满足均值为0,方差为1的分布规律。
在反向传播过程中训练得到
具体理解:Batch Normalization详解以及pytorch实验
使用迁移学习的优势:
注意:使用别人预训练模型参数时,要注意别人的预处理方式。
注意:最后一层无法载入预训练模型参数
有待更新…