ResNet

176 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

arxiv.org/abs/1512.03…

网络亮点

  • 超深的网络(突破1000层)
  • 提出residual模块(残差模块)
  • 使用Batch Normalization加速训练(丢弃Dropout)

网络结构

右图1×1卷积用于降维,减少参数量

虚线残差结构

虚线残差结构为stage3-5的第一个残差结构,用于改变输入输出的高度、宽度、通道数,实线残差结构的输入输出保持不变

注意:50,101,152三种结构中,stage2第一层也是虚线结构,不过这个只是改变通道,不改变高宽

以下两种为选项B,论文里有ABC三种,实验发现这种最好

BN(Batch Normalization)

在输入模型前,通常对数据进行预处理,使数据满足某一分布规律,以加快网络训练,但是经过一层层卷积后,输出的特征层不一定还满足这个规律,所以通过BN对此进行调整

先计算一批数据的每一维度的均值和方差,用原数据进行标准化,使数据均值为0,方差为1,但这个分布不一定好,所以再通过γ和β这两个学习的参数进行微调,γ调整方差,β调整数据的中心

注意:

  • 训练和预测时的BN不同,训练时要不断统计均值和方差,预测时是使用历史统计的,而不是使用当前计算的。在pytorch中可通过创建模型的model.train()和model.eval()方法控制。
  • batch size尽可能设置大点,设置小后表现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差。
  • 要将BN放在卷积和激活层之间,且卷积不适用bias,因为即使用了也没有作用。