神经网络使用心得
来源:互联网 发布:东北师范大学网络教育 编辑:程序博客网 时间: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的原始论文也帮助很大。
本文把神经网络的神秘面纱扯下来,新手看了之后,就有了一个完整的认识,知道怎么操作了。当然更基础的东西,要自己学习,掌握。本文仅探讨使用心得,理论方面不包括。
个人原创,转载请注明来自本文。
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的原始论文也帮助很大。
阅读全文
0 0
- 神经网络使用心得
- BP神经网络 原理 心得
- 神经网络训练心得~
- SPSS神经网络心得(一)
- SPSS神经网络心得(二)
- 神经网络CNN训练心得--调参经验
- AndrewNg机器学习第四周作业:关于使用逻辑回归、神经网络训练数据并应用之的心得
- 神经网络matlab的使用
- 神经网络matlab函数使用
- 神经网络的matlab使用
- 神经网络使用情景
- 使用Python实现神经网络
- Opencv3神经网络的使用
- 使用HtmlParser使用心得
- libcurl使用心得libcurl使用心得
- freemarker的使用心得,freemarker使用心得
- 《机器学习》阅读心得——五、神经网络
- 使用resin中的心得
- 性能监视器perfmon
- Windows编程基础--第13节 MFC之图片控件
- 【java学习】数据库的连接与使用
- Vs2013打开项目时,一直处理等待状态,并显示“Microsoft Visual Studio正忙”的提示窗,处理方法
- 三种方法实现斐波那契数列
- 神经网络使用心得
- poj 1988 Cube Stacking(加权并查集 )
- Python编程:从入门到实践的动手试一试答案(第八章)
- hdu 4803B
- 矩阵链相乘--动态规划
- 2017
- [luogu3258][JLOI2014]松鼠的新家
- AOSP 安卓7.1 ubuntu17.04编译问题
- n位2进制输出 我就是不用递归你咬我啊