ResNet入门
这一篇,我只讲知识点。后续有精力会展开深度学习网络发展史~欢迎关注,求点赞求分享!
ResNet深度残差学习网络,主要针对更深的神经网络训练效果不好的现象进行解决,核心观念为深层次表征信息是很多视觉任务的核心点。
那么这是如何解决更深的神经网络训练效果不好的现象?
答:采用了上述的(Residual Learning)残差学习提高信息流效率,下面便围绕ResNet展开。
网络深度加深后,效果提升明显:
集成浅层、中层和深层特征
VGG、GoogleNet
在识别、检测等任务中均有很好的效果
简单的叠加更多神经网络层就可以吗?
现象:
明显的梯度消失/爆炸问题,难以收敛——利用正则化解决
模型退化问题凸显,准确率饱和——?
模型退化问题并非过拟合导致,增加深度导致训练集错误率提升
深层网络不能比浅层网络错误率更高——特征映射
ResNet结构示意图:
跳跃连接的详细介绍:
深度残差学习:
我们知道深度神经网络可以拟合高维非线性函数
可以拟合H(x),也可以你和H(x)-x
令F(x)=H(x)-x,则H(x)=F(x)+x
网络学习的难易程度不同
解决梯度消失问题,增加的网络层学习成恒等映射,则不会提升训练误差
跳层的恒等映射:
残差块:y = F( x , {W_i} )+x
残差网络:
1.两个简单的设计原则:
具有相同输出特征图大小的网络层卷积数量相同
特征图大小减半,则卷积核数量加一倍,保证时间复杂度
2.基于普通网络,插入跳跃连接
3.维度增加时:
增加零输出
1*1卷积改变维度
下图总结了ResNet的主要创新点:
理论知道的差不多了,那么下面自然是论文代码复现,首先是标准学习流程图:
1.准备工作:
a.源代码地址:https://github.com/tensorflow/models/tree/master/official/vision/image_classification
b.环境配置:python3.5+Tensorflow1.14+cpu/gpu
2.数据预处理
a.数据来源:ImageNet官方http://image-net.org/
b.预处理:
图像尺寸:224*224,3通道RGB
均值:R:123.68、G:116.78、B:103.94
类别数:1001种
数据预处理流程:
a.对训练集:
解码JPEG图像
剪切和水平镜像——数据增强手段
缩放到224*224
b.对测试集:
解码JPEG图像
保持长宽比缩放图像
中心剪切224*224
c.对所有图像:减除RGB通道均值
3.模型定义
定义恒等模块:
获取卷积核数量
定义图像数据的通道顺序
定义神经网络层名称模式
定义恒等模块网络层,包括卷积、BN和激活
最后将输入直接与卷积部分做叠加
4.模型训练:
输入数据流(训练数据和验证数据)
定义学习率和优化器
编译模型
训练和验证模型
PS:最近时间很赶,只能把大致思路和资源放出来让大家自己来尝试复现,不久之后我将会在ModelArts上将此模型搭建起来供大家参考。
- 点赞
- 收藏
- 关注作者
评论(0)