破解北京pk10冠亚和值 1比0.95刷流水教程 pk10稳赚技巧方案 北京pk10怎么研究走势 北京pk赛车一天多少期 北京pk赛车历史记录 全天北京pk10赛车计划 北京pk10冠军单双技巧 北京pk两期免费计划 北京pk10冠军公式大全 pk10高手单期人工计划 北京pk10免费人工计划 pk10一天赚300好搞吗 北京pk10杀3码公式 app软件购买北京pk10 北京pk10每天开多少期 北京pk10精准一期计划 北京pk拾全天精准计划 二分pk10怎么玩 pk10怎么引诱别人玩 北京赛車pk10网站 北京pk2期计划在线网站 pk10前三跨度怎么算 赌场最怕什么样的赌法 北京pk赛车彩票官网 怎样控制自己每天赢500 北京pk10正规彩票网站 北京pk10前五1码计划 一无所有怎么白手起家 北京pk10去一尾图解

Caffe代码阅读——Solver

时间:2019-03-05   来源:尚学堂   阅读:157

Caffe代码阅读——Solver

前面我们聊了Net组装的内容,接下来我们来看看Solver的内容。Solver主体有两部分:初始化和训练。初始化内容相对比较简单,这里就不说了;下面我们来说说训?#20998;?#30340;几个关键函数。

 

核心函数:Step

真正的训练在Step函数内,这里有多卡训练的关键回调函数:on_start()和on_gradient_ready(),具体的调用方法我们后面再说,在这两个回调函数中间有两个重要的过程:ForwardBackward和UpdateSmoothedLoss。在on_gradient_ready之后有一个关键函数ApplyUpdate(),这里面的代码在Sgd_solver中。下面我们详细看一下。

 

ForwardBackward

这里主要调用了Net中的代码,主要完成了前向后向的计算,前向用于计算模型的最终输出和Loss,后向用于计算每一层网络和参数的梯度。对于前向后向的具体内容这里需要详细叙述了,唯一值得一提的是前向的Loss计算,这部分代码?#23548;?#19978;实在Layer里面,具体涉及到loss_weight这个参数相关的初始化和loss()的判断,同时还有Loss_Layer在Setup函数中的初始化。

 

UpdateSmoothedLoss

这个函数主要做Loss的平滑。由于Caffe的训练方式是SGD,我们无法把所有的数据同时放入模型进行训练,那么部分数据产生的Loss就可能会和全样本的平均Loss不同,在必要时候将Loss和历史过程中更新的Loss求平均就可以减少Loss的震荡问题。代码中的平滑方法比较简单,大家一看便知。

下面就是ApplyUpdate函数,这个函数真正完成了参数更新的任务。Caffe的参数更新只利用了模型的梯度信息,没有利用二阶信息。下面就详细介绍下更新参数的几个过程:

? GetLearningRate

? ClipGradients

? Normalize

? Regularize

? ComputeUpdateValue

 

GetLearningRate

learningrate的故事我们前面已经聊过了,在CNN训?#20998;?#36825;确实是个大问题。Caffe为了让learningrate的设计更灵活,提供了一系列的learningrate方案:

? fixed:lr永远不变

? step:lr=baselr*gamma^{iter/stepsize}

? exp:lr=baselr*gamma^{iter}

? inv:lr=baselr*(1+gamma*iter)^{-power}

? multistep:直接写iter在某个范围内时lr应该是多少

? poly:lr=baselr*(1-\frac{iter}{maxiter})^{power}

? sigmoid:lr=baselr*\frac{1}{1+e^{-gamma*(iter-stepsize)}}

这些方案各有优劣,选择自?#26680;?#25163;的就好。

 

ClipGradients

这一步主要是对梯度值做一个限制,如果梯度值过大,那么这里就会对梯度做一个修剪,对所有的参数乘以一个缩放因子,使得所有参数的平方和不超过参数中设定的梯度总值。这个功能感觉上像是对全局函数设置了一个TrustRegion,可以防止更新的量过大二导致梯度发散。我认为这一步的想法是很好的,但是?#23548;什?#20316;中可能会有问题。?#23548;?#20013;可能只有部分参数的梯度比较大,而其他参数的梯度本身比较小,那么对所有的参数乘以相同的因子会让一些本来比较小的参数变得更小,这样会带来一些不公平。

 

Normalize

这一步同样考虑了一些单一Batch不足以完成训练的问题,通过限制每个Batch的更新量来控制更新总量,代码比较简单。

 

Regularize

到这一步终于要计算正则项的梯度了。Caffe提供两种正则方法——L2和L1,其中L2采用了标准的梯度下降方法,L1采用了sub-gradient的计算方法。L2的优化计算比较简单,没有什么好说的,但是L1的计算?#25925;?#26377;点值得玩味的地方的。这里采用的sub-gradient方法其实本身没有什么问题,不过Lasso的优化还可以有其他的方法,这个问题?#38498;?#21487;以再细聊。

 

ComputeUpdateValue

到这里,我们终于来到了梯度计算的最后一站,这时候我们终于完成了对梯度的计算,下面?#27599;?#34385;lr和梯度结合起来如何计算最终的梯度优化值了。sgd方法主要采用momentum加梯度的优化方法。关于momentum的优势我们前面已经聊过了。除此之外,Caffe还提供了一系列的梯度计算方法,这些优化方法各有特点,?#38498;?#25105;们可以慢慢来看。

当计算完这一步,我们就可以调用Blob中的Update把每个参数的data和diff进行相加,计算出最终的结果。这样,整个优化过程就完成了。至于剩下的一些内容都不是核心过程,就略去不看了。

如果我们采用单卡训练的策略,那么阅读代码到这里也差不多了。不过多卡训练对于大规模的训练任务来说是必不可少的,所以我们接下来趁热打铁地看看Caffe的多卡训练。

 

多卡训练算法

Caffe的多卡训练算法总体思路是数据并?#26657;?#25105;们用不同的GPU处理不同的数据,然后将所有的梯度更新汇总。由于Solver在训?#20998;?#32473;了两个回调函数,多卡训练也主要利用了这两个回调函数进?#26657;?/p>

1.on_start():将参数拷贝到每一个GPU中。

2.ForwardBackward()?#22909;?#20010;GPU各自计算自己的前向后向结果。

3.on_gradient_ready():将反向梯度汇总到一起。

4.ApplyUpdate():在汇总的线程上进行参数更新

 

其中第2?#25509;?#27599;一个CPU线程和自己的GPU并行完成,第4?#25509;?#27719;总的CPU和自己的GPU完成,剩下的1,3两步主要是完成数据传输的任务,也是多卡计算中主要完成的部分。

Caffe采用树型结构进行参数传递,其中一个CPU线程和GPU作为树型结构的根,其他的则作为根下面的节点。为了更快地传输GPU数据,树型结构的构建要考虑GPU之间是否相近,比方说两个GPU之间是否可?#36234;?#34892;P2P的直传。在前面的翻译博客中我们已经聊过GPU之间数据传输的问题了,这里的树形结构也主要以此做考虑。

 

我们假设4块GPU的拓扑结构如下:

  nvidia-smitopo-m

  GPU0GPU1GPU2GPU3

  GPU0XPHBSOCSOC

  GPU1PHBXSOCSOC

  GPU2SOCSOCXPHB

  GPU3SOCSOCPHBX

 

那么我们构造出的树型结构如下所示,数据传输也?#21069;?#29031;这样的结构传输:

Caffe代码树型结构

这样1,3的数据传递就解决了,具体的过程请详细阅读代码,这里就不叙述了。

对Caffe代码的基本介绍就到这里了,我们对代码的整体结构有了比较清晰的认识,下面我们将分析模型中各个部分的特性。

相关资讯

  • 北京校区
  • 山西校区
  • 郑州校区
  • 武汉校区
  • 四川校区
  • 长沙校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办

北京海淀区校区(总部):北京市海淀区西三旗?#20540;?#24314;?#26576;?#35199;?#20998;?#33150;建华商务大厦东侧二层尚学堂
北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE培训大数据就业班培训大数据云计算周末班培训零基础大数据连读班培训大数据云计算高手班培训人工智能周末班培训人工智能+Python全栈培训H5+PHP全栈工程师培训

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

郑州学区地址?#27721;幽系繾由?#21153;产业园6号楼4层407
咨询电话:0371-55177956

武汉学区地址?#27721;?#21271;省武汉?#34218;?#22799;区江夏大道26号 宏信悦谷创业园4楼
咨询电话:027-87989193

四川学区地址:成?#38469;?#39640;新区锦晖西一街99号布?#36225;?#39039;大厦2栋1003室
咨询电话:028-65176856 / 13880900114

网址:http://www.cssxt.com/
咨询电话:0731-83072091

深圳校区地址:深圳市宝安区航城?#20540;?#33322;城大道航城创新创业园A4栋210(固戍地铁站C出口)
咨询电话:0755-23061965 / 18898413781

上海尚学堂?#23665;?#26657;区地址:上海市?#23665;?#21306;荣乐东路2369弄45号绿地伯顿大厦2层
咨询电话:021-67690939

广州校区地址:广州市天河区元岗横路31号慧通产业广场B区B1栋6楼尚学堂(地铁3号线或6号线到“天河客运站”D出口,右拐直走约800米)
咨询电话:020-2989 6995

保定招生办公室

地址?#27721;?#21271;省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

Copyright 2006-2019 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
媒体联系:18610174079 ?#35780;?#24072;  
pk10单双最好方法