ResNet学习与实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhongqianli/article/details/85610662

项目地址:https://github.com/zhongqianli/caffe_resnet
《Deep Residual Learning for Image Recognition》的作者提出了ResNet,通过引入深度残差学习框架,解决了网络退化问题。核心思想是通过拟合残差映射取代拟合潜在的映射,前者比后者更容易优化。使用1x1 conv(bottleneck)降低了网络的计算复杂度。使用《Batch normalization: Accelerating deep network training by reducing internal covariate shift》提出的Batch normalization减少internal covariate shift,允许使用更大的学习率,不再需要小心翼翼地初始化参数。

解决的问题

通过引入深度残差学习框架,解决了退化问题。

退化问题(degradation problem):
随着网络深度的增加,精度达到饱和并且会迅速退化。退化并不是由过拟合引起的,给一个合适深度的网络增加更多层时,训练误差会增加。

解决方法

用堆叠的非线性层拟合残差映射F(x) := H(x) - x,而不是直接拟合underlying映射H(x)。原始的映射H(x)可重投射为F(x) + xF(x) + x可以由前馈神经网络和"shortcut connections"(跳跃连接、快捷连接)来实现。在这篇paper中,shortcut connections仅仅充当恒等映射。恒等的shortcut connections既没有增加额外的参数也没有增加计算复杂度。

y = F(x, {Wi}) + x

y = F(x, {Wi}) + Wsx

残差方程F比较弹性,层数不小于2即可。

训练方法

数据增强

  • 随机裁剪
  • 水平翻转
  • 对比度归一化

批归一化(batch normalization)

在每个卷积之后,激活之前使用批归一化

优化算法参数

mini-batch size = 256
SGD
lr = 0.1
lr policy
weight decay: 0.0001
momentum: 0.9

实验步骤

将cifar10数据库转换成lmdb数据库文件

用create_resnet.py生成训练测试网络文件,然后用github上的netscope检查生成的训练测试网络文件是否正确

用create_solver.py生成solver文件

用train_net.py进行模型训练

用caffe/tools下的log分析工具分析log文件,得到训练误差变化曲线和准确率变化曲线

猜你喜欢

转载自blog.csdn.net/zhongqianli/article/details/85610662