神经网络使用心得

来源:互联网 发布:东北师范大学网络教育 编辑:程序博客网 时间:2024/06/01 20:10

转自http://www.caffecn.cn/?/article/44


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

我是用Caffe做6分类问题,做一种工业产品的检测。经过反复实验。总结的经验以下几条,供新手参考,也欢迎老手批评指正。大家交流。
 
本文把神经网络的神秘面纱扯下来,新手看了之后,就有了一个完整的认识,知道怎么操作了。当然更基础的东西,要自己学习,掌握。本文仅探讨使用心得,理论方面不包括。
 
个人原创,转载请注明来自本文。

1. 分辨率,用多大的分辨率。这个取决于目标的特征,如果目标是很大的,例如汽车,房子,在图片中占据很大的比重,那么使用100*100甚至50*50的分辨率就可以了。但是如果目标很小,例如是蚂蚁,这类的。那不能太小,否则,图形特征太小,网络将无法提取形态特征。造成训练失败。我用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的原始论文也帮助很大。
原创粉丝点击