深度学习 13. 能力提升, 一步一步的介绍如何自己构建网络和训练,利用MatConvNet(二),思路整理

来源:互联网 发布:windows api pdf 编辑:程序博客网 时间:2024/05/14 22:53

本文为原创文章转载必须注明本文出处以及附上 本文地址超链接  以及 博主博客地址http://blog.csdn.NET/qq_20259459  和 作者邮箱( jinweizhi93@gmai.com )。

(如果喜欢本文,欢迎大家关注我的博客或者动手点个赞,有需要可以邮件联系我)


上一篇文章因为中间加入了许多的代码块,可能影响大家的阅读,思路不清晰。所以我今天更新一篇来主要说清楚我们的思路。

准备工作:

首先我们需要让一切实验相关的文件尽可能的有规律的整理好。例如每一次实验的结果,每一次我们修改的变数,每一次我们修改的Input data等等。 以我个人的习惯是建立一个总的文件夹可以命名为MatConvNet。在下面另有:result,data,remember等。

这是一个好习惯的养成,在深度学习中我们最最注重的就是调参,因此每一次的改变我们都需要有完整的记录。而好习惯自然会帮你得到更好的结果。

正文:

前言

这里我就不介绍操作的过程了,关于Code的解释我的博客中有好几篇文章的解释(http://blog.csdn.net/qq_20259459)。希望大家好好阅读,理解相关函数的意思,如果不理解函数就像急于训练就会导致事倍功半。

第二,我上一篇文章:(http://blog.csdn.net/qq_20259459/article/details/65633407)写的非常的详细,希望大家可以用心去读一下,然后再看本文。
如果code和上一篇大家都读完了,那么这一篇文章将会是一篇很好的整理和提升的文章。

整体思路:
我们训练的过程中用到的无非就三个大的步骤:得到数据,训练,结果分析。

数据:
1.得到好的且可以训练的数据是很重要的,许多时候不能收敛的情况都是坏的或者错误的数据处理操作导致的。因为我们大部分用的是现有的数据库,所以我们在下载数据库之后需要了解清楚数据库的构成,比如Cifar-10和-100的数据库就是条状的,需要进行相关的处理。这个我们前面也说过。
2.数据的分成一般来说是
train data =70% validation data =15% test data =15%. 
3.数据输入正确以后,我们需要进行相关的normalization的处理。(这部非常的重要)
4.正则化处理结束之后,我们就可以将相关的data,label, class,class name都放入imdb结构体中,imdb我在前一篇说过了,这才是训练的本体结构。

训练:
1.如果我们确认input的数据是对的,那么我们可以开始我们的训练了。
2.构建训练的网络。网络的构建或者是网络中某一层的创建都是现在深度学习论文的大热,好的网络结构的提出也是论文的大热。所以我们需要不断的训练,不断的改参数,才能自己找到更好的网络结构。在之前的文章中我一直都是用的是LeNet的网络结构和vgg的网络结构。因为这些都是最基础的网络构型,其他的比如NIN这种后代网络都是衍生体。所以我还是会使用LeNet的网络结构来介绍。如果大家有兴趣的话可以阅读相关的paper。
3. 我们知道最最常用的网络单元有:
Convolution, ReLu, Pooling(max,average), Dropout., Fully connection, Softmax.
4. 对于LeNet中,我们习惯用C-R-P的block。而在vgg中提出了小的filter组合提升性能的想法:C-R-C-R-P的block。
5.Dropout一般来说我们使用在FC层之前的,不过在最新的论文中也有人提出将D层用在前面的网络中减轻参数。这里我还是提倡大家不要轻易多增加D层,只要在FC前添加即可,rate一般为0.5
6. FC和S层没有什么好说的,不过在之前GoogleNet的网络中已经去除了FC,从而大大的降低了参数。不过这里GN只是一个特列我们不要轻易模仿。
7.我个人最最提倡的还是vgg的构型,我个人的训练中vgg的构型还是效果非常好的。
8.整个网络我们为的就是得到有效的features。
9. FC层的input的大小需为1*1,因此我这里建议正方形的数据库,个人尝试过长方形,可以通过改变filter最终得到1*1的FC的input。但是效果非常不好,我也不能一定说长方形不好,但是还是再次强调大家的数据库的大小最好是为正方形。(这也是目前大家所默认的)

10. 为了得到FC的input是1*1的大小,我们就需要巧妙的用C层和P层来减小原始输入数据的大小。这里的两个公式是需要大家记好的:
关于图片缩小的计算公式:
(1)Conv.layer:  
[(N-F)/stride]+1   这里N是input的size,F是filter的size。
(2)如果data的size过小,而希望增加C层来进行深度的网络构造,那么我们就需要用到padding。 公式:padding size = (F-stride)/2 这里F是filter的size。这样我们的C层就不会减小图片,从而进行构造深度网络。
(3)MaxPooling: output = [(N-F)/stride]+1 这里N是input的size,F是filter的size。 但是一般来说我们使用 F=2,S=2的结构,也就是缩小一半。这里的意思就是我们取每一个2*2的区域内最大值(feature最为突出的值)组成新的feature maps。

结果分析:
结果分析和参数调整我会在下一篇文章为大家介绍。因为这个很重要需要单独拿一篇文章来说明。




本文为原创文章转载必须注明本文出处以及附上 本文地址超链接  以及 博主博客地址http://blog.csdn.NET/qq_20259459  和 作者邮箱( jinweizhi93@gmai.com )。

(如果喜欢本文,欢迎大家关注我的博客或者动手点个赞,有需要可以邮件联系我)


2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq的重要数据被清理怎么办 把qq数据删除了怎么办 手机qq头像显示不同怎么办 手机qq图片显示不出来怎么办 微信群聊右上角双人头像没了怎么办 支付宝好友没了怎么办 手机qq好友头像没了怎么办 微信语音变成听筒模式怎么办 微信语音为听筒模式怎么办 微信设置成听筒模式怎么办 微信验证看不全怎么办 qq看视频无法放大怎么办 苹果6功能键坏了怎么办 qq显示不了头像和图片怎么办 关于学校随便更换老师家长怎么办 qq群昵称改不了怎么办 电脑qq群视频进不去怎么办 微信头像没保存怎么办 qq群信息不响怎么办 微信封面换不了怎么办 微信头像没有了怎么办 科二超过5次怎么办 蘑菇街个人中心打不开怎么办 蘑菇街的个人中心打不开怎么办 qq群500人满了怎么办 微信零钱发不出来怎么办 微信零钱发不出去怎么办 微信零钱发不了红包怎么办 当亲戚孤立你该怎么办 陌陌好友找不到了怎么办 换了手机号陌陌号找不到怎么办 微信解析包出现问题怎么办 老板找借口不发工资怎么办 苹果手机忘记id帐号密码怎么办 苹果6手机帐号密码忘记怎么办 狗狗在窝里撒尿怎么办 爸妈和媳妇不好怎么办 如果老婆不用老公的钱怎么办 老公不给老婆钱花怎么办 奶少孩子不愿意吸怎么办 孩子识字少不愿意读书怎么办