摘要:基于华为MindSpore框架的ResNet-50网络模型,实现6714张共10类蘑菇图片的识别分类训练。
背靠全新的设计理念,华为云推出了 MindSpore深度学习实战营,帮助小白更快的上手高性能深度学习框架,快速训练ResNet-50,实现你的第一个手机App开发,学会智能新闻分类、篮球检测和「猜你喜欢」模型!
MindSpore深度学习实战营,通过 21天的合理课程安排,不仅提供目前大热的移动端部署介绍,还有紧跟时事的趣味实践,更有深度的底层开发讲解,让你从框架到算法到开发,都能一网打尽。
在MindSpore21天实战第三堂课,由王辉老师分享了基于MindSpore的ResNet-50的识别推理模型,如何应用在“蘑菇’君’是否有毒?”的检测场景。
ResNet之前的状况是:
CNN能够提取low/mid/high-level的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。并且,越深的网络提取的特征越抽象,越具有语义信息。而实际随着神经网络层数的增加,梯度消失或者爆炸导致深层网络很难训练。
对于该问题的解决方法是正则化初始化和中间的正则化层(Batch Normalization),这样的话可以训练几十层的网络。虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题,网络层数增加,但是在训练集上的准确率却饱和甚至下降了。
ResNet提出了残差结构,就是为了解决梯度消失、爆炸或者训练退化的问题。其经典结构如下图所示:
如下图所示,左侧是普通层,而右侧是ResNet;
如下图所示,左侧是普通层,而右侧是ResNet;
随着网络层数的大量增加,普通层的输出H(X)越来越难以学习。而ResNet跨过卷积层将输入X作为最终输出。F(X)被称为残差。
深度残差网络有着相对低的复杂度和更深的网络层数。曾获多项比赛的第一名。
ResNet-50中的50,指的是该网络的层数为50层。
本堂课的体验作业是基于华为MindSpore框架的ResNet-50网络模型,实现6714张共10类蘑菇图片的识别分类训练。算力是基于华为云ModelArts,网络存储使用华为OBS对象存储服务。大量图片上传OBS桶过程中,使用了OBS-browser-plus套件工具,设置好OBS登录权限和存储目录后,可以本地拖放目录操作,大量的数据文件可以进入队列自动上传。
基于1*Ascend910 CPU的算力,整个训练过程用时10.04minutes,数据集训练精度平均损失0.569,输出日志如下图所示。
对训练生成的模型,通过Eval测试“蘑菇超人”图片。
System.out.println(list.stream( www.jubooyule.com ).min((www.baihua178.cn b) -> a-b).get()); // 1
System.out.println(www.jucaiyle.cn list.stream(www.tengyueylzc.cn).count(www.baihuayllpt.cn));//
String str =www.qitianylezc.cn"11,22,33,44,55";
System.out.println(Stream.of(str.split(www.longtenghai2.com",")).mapToInt(www.wujiu5zhuce.cn-> Integer.valueOf(x)).sum());
System.out.println(Stream.of(str.split("www.lanboylgw.com,")).mapToInt(Integer::valueOf).sum());
System.out.println(Stream.of(str.split(www.shentuylzc.cn",")).map(x -> Integer.valueOf(x)).mapToInt(x -> x).sum());
System.out.println(Stream.of(str.split(www.xingyunylpt.com",")).map(Integer::valueOf).mapToInt(x -> x).su
其分类结果为“霍氏粉褶伞,伞菌目,粉褶菌科……”,测试日志见下图。也是查了一下霍氏粉褶伞的图片,其他且不说,颜色相似度还是挺高的。