调参技巧

深度学习应用 http://caffecn.cn/?/article/44
                                                

神经网络使用心得--欢迎新手借鉴,老手批评指正

我是用Caffe做6分类问题,做一种工业产品的检测。经过反复实验。总结的经验以下几条,供新手参考,也欢迎老手批评指正。大家交流。

 

本文把神经网络的神秘面纱扯下来,新手看了之后,就有了一个完整的认识,知道怎么操作了。当然更基础的东西,要自己学习,掌握。本文仅探讨使用心得,理论方面不包括。

 

个人原创,转载请注明来自本文。


  1. 分辨率,用多大的分辨率。这个取决于目标的特征,如果目标是很大的,例如汽车,房子,在图片中占据很大的比重,那么使用100100甚至5050的分辨率就可以了。但是如果目标很小,例如是蚂蚁,这类的。那不能太小,否则,图形特征太小,网络将无法提取形态特征。造成训练失败。我用150*200兼顾了特征的保存以及最小的图像体积,保证了计算量最小。

    另外,目标就是目标,不要包含太多背景,否则也是浪费计算量。


  2. 网络的选型。使用lenet还是alexnet还是googlenet.看你的问题的规模,如果你的类别不是很多,形态也非常简单,类似于手写数字识别,那么用lenet作为基础,进行调整就可以。如果形态,纹理,都比较复杂,那么lenet受限于特征提取能力,就不合适了,强行使用可能造成网络不收敛。


  3. 网络精简。一般的典型网络,如上述网络,都比较庞大,例如alexnet有5层卷积,2个中间层,能分1000类,googlenet就更多了,有十几个卷积层,交叉组合,也是分1000类。而我们的分类任务可能只要分几类,或者十几类。用人家的网络就会显得杀鸡用牛刀,浪费了计算能力,可能i3 CPU足够的,你得用i7, 也就增加了成本。

    因此要精简网络,说说自己的经验,alexnet5层卷积的输出节点数,96-256-384-384-256,隐含层409614096节点。

    我精简到96-128-128.隐含层只一层,100个节点。分类效果跟精简之前没什么区别。而网络从200多MB降到1MB多,准确度98%, 找到了网络的极限,因为再小的网络,训练无法收敛。可能以后,再增加类别时,需要扩大一下网络。


  4. 样本准备。随机一些,不同方向,不同亮度的,甚至目标的尺寸,大一点小一点,都有。要有足够的代表性。


  5. 可视化,一定要使用Matlab把卷积层的中间结果输出出来,看看那些结果图是有用的,因为同一层很多特征图事重复的,那么就可以减少输出点数,再训练时,网络就不会提取那些没有用或者重复的特征了。

    训练时,学习率0.001. 再缩小也没有什么效果了。


  6. 网络越简单,收敛速度越快,比如我用5层卷积时,要训练到4000轮才开始收敛,而3层时,从1000轮就开始收敛。



    总之在机器学习,多层卷机网络的统一理论的指导下,多多实验吧,你会发现更多的特点,这就是一门实验的学问。

    另外,也推荐一本书,虽然我还没有看,但是很多人推荐,我也下载了。

    Neural Networks:Tricks of the Trade   网络使用技巧,老外写的。

    网上能下载到。



    另外,读一读lecun跟hinton的原始论文也帮助很大。

                                                         

7 个评论

感谢楼主分享,但是我有几个问题:

1、分几类的任务为什么要用深度学习去做,我们用其他方法也可以实现,并且速度肯定是更快的。

2、i3换i7的钱都足够你买一款低端显卡了,显卡比CPU快了上百倍

3、楼主用的网络都有点老了,现在都用VGG,Resnet,Inception,还有最近的Densenet






mhaoyang


mhaoyang 回复 c408550969





很高兴看到你的反馈。因为是图像分类,如果不用深度学习,很难提取目标的特征,因为目标是毛绒玩具,位置不固定,视角不同,很不规则,所以用深度网络。我实在是找不到更好的方法了。

不知道你有什么建议?

由于我们用的是迷你工控,没有插显卡的位置,所以只能…

alexnet速度比较快,在有限的CPU面前,只好用alexnet了。难道VGG,Resnet更快?







alex68


alex68





写的挺好的!其实每一点都可以展开细细琢磨。比如学习率那一项,一直固定用0.001的学习率并不好,如果网络可以收敛,一开始应该用比较大的学习率,配合batchnorm,有更好的搜索效果。







mhaoyang


mhaoyang 回复 alex68





谢谢。batch norm 是怎么操作的?能否解释一下,呵呵。







mhaoyang


mhaoyang





http://www.icourse163.org/learn/DA-1002183004?tid=1002301011#/learn/content?type=detail&id=1003068709&cid=1003620297&replay=true



吴恩达采访 Hinton,谈他的设计背后的事情,非常值得一看。







CatherineW


CatherineW





不错哦,期待你不断补充~







骑着大鹅来兜风


骑着大鹅来兜风





学习率分情况,用了BatchNorm的话设置成0.1开始,随迭代次数下降就可以了。GoogLeNet的输入是224*224,这是精心设计的一个输入尺寸,如果你缩小成112肯定就不行了,需要把最后的pool跨度从7改到3。再就是小目标检测中,你甚至需要切图才能训练出来。




                                        

要回复文章请先登录注册

你可能感兴趣的:(调参资料总结)