破解北京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代码阅读——层次结构

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

? ? ? ? Caffe是一款优秀的深度神经网络的开源软件,下面我们来聊聊它的源代码以及它的实现。Caffe的代码整体上可读性很好,架构比较清晰,阅读代码并不算是一件很困难的事情。不过在阅读代码之前还是要回答两个问题:

? ? ? ? 1.阅读代码是为了什么?

? ? ? ? 2.阅读到什么程度?(这个问题实际上和前面的问题相关)

 

? ? ? ? 阅读代码大体上来说有下面几个目的:

? ? ? ? 1.搞清楚代码所实现的算法或者功能。对算法本身不是很了解,希望通过阅读代码了解算法。

? ? ? ? 2.搞清楚代码在实现算法过程中的细节。这种情况下,一般对算法已经有大概的了解,读代码是为了了解代码中对算法细节的考量。?#27604;唬?#22914;果想使用代码,了解代码细节是很有帮助的。

? ? ? ? 3.扩展代码。在开源代码的基础上,利用已有的框架,增加或者修改功能,来实现自己想要的功能。这个就需要?#28304;?#30721;的架构细节有更加深入的了解。

 

? ? ? ? 我们的目标是扩展代码。Caffe中主要的扩展点就是Layer和Solver,?#27604;?#20854;他的部分也可以扩展,只不过要改动的代码会多一些。

? ? ? ? ?#27604;范?#20102;上面第一个问题,下面就是第二个问题了。读代码要读到什么程度?一般来说,我觉得阅读代码这件事情可以用一个Logistic型的函数来表示:

Logistic

? ? ? ? 这个图上,横轴是阅读代码花费的时间,纵轴是阅读代码带来的效果。对于代码量比较大的项目,一开始阅读肯定是蒙的,需要花一定的时间梳理清楚各个文件,各个模块之间的关系。随着结构关系逐渐清晰,读者开始领会代码中所表达的含义,阅读代码的效果直线上升。然而当我们把代码主线和重要支线弄懂后,再读一些小支线的收益就不会太大。所以根据阅读代码的性价比和Caffe代码自身的特点,我们?#25442;?#23558;主线和一些重要支线阅读完,估计也就是整体代码量的一半。

? ? ? ? Caffe代码的主线结构抽象

? ? ? ? 不同于其他的一些框架,Caffe没有采用符号计算的模式进行编写,整体上的架构以系统级的抽象为主。所谓的抽象,就是逐层地封装一些细节问题,让上层的代码变得更加清晰。那么就让我们来顺着Caffe的抽象层级看看Caffe的主线结构:

? ? ? ? SyncedMem:这个类的主要功能是封装CPU和GPU的数据?#25442;?#25805;作。一般来说,数据的流动?#38382;?#37117;是:硬盘->CPU内存->GPU内存->CPU内存->(硬盘),所以在写代码的过程中经常会写CPU/GPU之间数据传输的代码,同时还要维护CPU和GPU两个处理端的内存指针。这些事情处理起来不会很难,但是会很繁琐。因此SyncedMem的出现就是把CPU/GPU的数据传输操作封装起来,只需要调用简单的接口就可以获得两个处理端同步后的数据。

? ? ? ? Blob:这个类做了两个封装:一个是操作数据的封装。在这里使用Blob,我们可以操纵高维的数据,可以快速访问其中的数据,变换数据的维度等等;另一个是对原?#38469;?#25454;和更新量的封装。每一个Blob中都有data和diff两个数据指针,data用于存储原?#38469;?#25454;,diff用于存储反。向传播的梯度更新值。Blob使用了SyncedMem,这样也得到了不同处理端访问的便利。这样Blob就基本实现了整个Caffe数据部分结构的封装,在Net类中可以看到所有的前后向数据和?#38382;加肂lob来表示就足够了。

? ? ? ? 数据的抽象到这个就可以了,接下来是层级的抽象。前面我们也分析过,神经网络的前后向计算可以做到层与层之间完全独立,那么每个层只要依照一定的接口规则实现,就可以确保整个网络的正确性。

? ? ? ? Layer:Caffe实现了一个基础的层级类Layer,对于一些特殊种类还会有自己的抽象类(比如base_conv_layer),这些类主要采用了模板的设计模式(Template),也就是说一些必须的代码在基类写好,一些具体的内容在子类中实现。比方说在Layer的Setup?#26657;?#20989;数中包括Setup的几个步骤,其中的一些步骤由基类完成,一些步骤由子类完成。还有十分重要的Forward和Backward,基类实现了其中需要的一些逻辑,但是真正的运算部分则交给了子类。这样当我们需要实现一个新的层时,我们不需要管理琐碎的事物,只要关系好层的初始化和前后向即可。

? ? ? ? Net:Net将数据和层组合起来做进一步的封装,对外暴?#35835;顺?#22987;化和前后向的接口,使得整体看上去和一个层的功能类似,但内部的组合可以是多种多样。同时值得一提的是,每一层的输入输出数据统一保存在Net?#26657;?#21516;时每个层内的?#38382;?#25351;针也保存在Net?#26657;?#19981;同的层可以通过WeightShare共享相同的?#38382;?#25152;以我们可以通过配置实现多个神经网络层之间共享?#38382;?#30340;功能,这也增强了我们对网络结构的想象力。

? ? ? ? Solver:有了Net我们实际上就可以进行网络的前向后向计算了,但是关于网络的学习训练的功能还有些缺乏,于是在此之上,Solver类进一步封装了训练和预测相关的一些功能。与此同时,它还开放了两类接口:一个是更新?#38382;?#30340;接口,继承Solver可以实现不同的?#38382;?#26356;?#36335;?#27861;,如大家?#21442;?#20048;见的Momentum,Nesterov,Adagrad等。这样使得不同的优化算法能够应用其?#23567;?#21478;外一个是训练过程中每一轮特定状态下的可注入的一些回调函数,在代码中这个回调点的直接使用者就是多卡训练算法。

? ? ? ? IO:有了上面的东西就够了?还不够,我们还需要输入数据和?#38382;?#27491;所谓巧妇难为无米之炊,没有数据都是白搭。DataReader和DataTransformer帮助准备输入数据,Filler对?#38382;?#36827;行初始化。一些Snapshot方法帮助模型的持?#27809;?#36825;样模型和数据的IO问题?#27493;?#20915;了。

? ? ? 多卡:对于单GPU训练来说,基本的层次关系到这里也就结束了,如果要进行多GPU训练,那么上层还会有InternalThread和P2PSync两个类,这两个类属于最上层的类了,而他们所调用的也只有Solver和一些?#38382;?#31867;。

? ? ? ? 其实到这里,Caffe的主线也就基本走完了。我们可以画一张?#21450;袰affe的整体层次关系展示出来:

Caffe的主线

? ? ? ? 如果对这张图和图中的一些细节比较清楚的话,那么你对Caffe的了解应该已经不错了。后面关于Caffe源码分析的文章就可以不看了。如果没有,那么我们还是可以继续关注一下。?#27604;?#22914;果想真正理解这张图中所表达的含义,还是要真正地读一下代码,去理解一些细节。但是有些细节这里就不做详细的分析了,下一回我们会站在Layer的角度去看一个Layer在训练过程的全部经历。

相关资讯

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

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

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

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

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

四川学区地址:成?#38469;?#39640;新区锦晖西一街99号布鲁明顿大厦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单双最好方法