玖富娱乐平台代理QQ:374476深度学习框架Caffe解析:从代码层面定制新功能_玖富娱乐丨玖富娱乐平台丨玖富娱乐平台官网
设为首页 - 加入收藏
广告 1000x90
您的当前位置:主页 > 资源 > 效果代码 > 正文

玖富娱乐平台代理QQ:374476深度学习框架Caffe解析:从代码层面定制新功能

来源:网络整理 编辑:玖富娱乐平台主管QQ:374476 时间:2017-09-14

相信很多小伙伴和我一样使用了很长时间的Caffe深度学习框架,也非常希望从代码层次理解Caffe的实现从而实现新功能的定制。本文将从整体架构和底层实现的视角,对Caffe源码进行解析。

1.Caffe总体架构

Caffe框架主要有五个组件,Blob,Solver,Net,Layer,Proto,其结构图如下图1所示。Solver负责深度网络的训练,每个Solver中包含一个训练网络对象和一个测试网络对象。每个网络则由若干个Layer构成。每个Layer的输入和输出Feature map表示为Input Blob和Output Blob。Blob是Caffe实际存储数据的结构,是一个不定维的矩阵,在Caffe中一般用来表示一个拉直的四维矩阵,四个维度分别对应Batch Size(N),Feature Map的通道数(C),Feature Map高度(H)和宽度(W)。Proto则基于Google的Protobuf开源项目,是一种类似XML的数据交换格式,用户只需要按格式定义对象的数据成员,可以在多种语言中实现对象的序列化与反序列化,在Caffe中用于网络模型的结构定义、存储和读取。

解析:深度学习框架Caffe源码

2.Blob解析

下面介绍Caffe中的基本数据存储类Blob。Blob使用SyncedMemory类进行数据存储,数据成员data_指向实际存储数据的内存或显存块,shape_存储了当前blob的维度信息,diff_这个保存了反向传递时候的梯度信息。在Blob中其实不是只有num,channel,height,width这种四维形式,它是一个不定维度的数据结构,将数据展开存储,而维度单独存在一个vector<int> 类型的shape_变量中,这样每个维度都可以任意变化。

来一起看看Blob的关键函数,data_at这个函数可以读取的存储在此类中的数据,diff_at可以用来读取反向传回来的误差。顺便给个提示,尽量使用data_at(const vector<int>& index)来查找数据。Reshape函数可以修改blob的存储大小,count用来返回存储数据的数量。BlobProto类负责了将Blob数据进行打包序列化到Caffe的模型中。

3.工厂模式说明

接下来介绍一种设计模式Factory Pattern,Caffe中Solver和Layer对象的创建均使用了此模式,首先看工厂模式的UML的类图:

解析:深度学习框架Caffe源码

如同Factory生成同一功能但是不同型号产品一样,这些产品实现了同样Operation,很多人看了工厂模式的代码,会产生这样的疑问为何不new一个出来呢,这样new一个出来似乎也没什么问题吧。试想如下情况,由于代码重构类的名称改了,或者构造函数参数变化(增加或减少参数)。而你代码中又有N处new了这个类。如果你又没用工厂,就只能一个一个找来改。工厂模式的作用就是让使用者减少对产品本身的了解,降低使用难度。如果用工厂,只需要修改工厂类的创建具体对象方法的实现,而其他代码不会受到影响。

举个例子,写代码少不得饿了要加班去吃夜宵,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory。

4.Solver解析

接下来切回正题,我们看看Solver这个优化对象在Caffe中是如何实现的。SolverRegistry这个类就是我们看到的上面的factory类,负责给我们一个优化算法的产品,外部只需要把数据和网络结构定义好,它就可以自己优化了。

Solver<Dtype>* CreateSolver(const SolverParameter& param)这个函数就是工厂模式下的CreateProduct的操作, Caffe中这个SolverRegistry工厂类可以提供给我们6种产品(优化算法):

解析:深度学习框架Caffe源码

这六种产品的功能都是实现网络的参数更新,只是实现方式不一样。那我们来看看他们的使用流程吧。当然这些产品类似上面Product类中的Operation,每一个Solver都会继承Solve和Step函数,而每个Solver中独有的仅仅是ApplyUpdate这个函数里面执行的内容不一样,接口是一致的,这也和我们之前说的工厂生产出来的产品一样功能一样,细节上有差异,比如大多数电饭煲都有煮饭的功能,但是每一种电饭煲煮饭的加热方式可能不同,有底盘加热的还有立体加热的等。接下里我们看看Solver中的关键函数。

Solver中Solve函数的流程图如下:

解析:深度学习框架Caffe源码

Solver类中Step函数流程图:

解析:深度学习框架Caffe源码

www.nyuwp.cn www.tbpel.cn www.liuyifei52.cn www.gtiwc.cn www.mhhzu.cn www.zxibj.cn www.kpfej.cn www.nqqtp.cn www.sihpn.cn www.lqlax.cn www.qgroi.cn www.wobnq.cn www.fjvhw.cn www.pecdt.cn www.qumct.cn www.wqvwl.cn www.ehjfq.cn www.mhfvs.cn www.hmjib.cn www.gokzz.cn www.zixing361.com www.xinzang123.com www.jiurou8.com www.592rcw.com www.lawy118.com www.10yuanjuan.com www.alubala.com www.10yuanjuan.com www.alubala.com www.7zuliao.com www.baiyang0315.com www.51hourse.com www.fangzhe.net www.bangtian.net www.liangbing.net www.chjobs.com.cn www.tgbqs.com www.ruizhi-ad.com

相关推荐:

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

林然 主管QQ:374476 联系QQ:374476 邮箱:374476@qq.com

Copyright © 2002-2028 LINRAN. 林然丨版权所有 Power by DedeCms

Top