[Caffe源码解析]1.整体结构&附带番外

鉴于网上大多数的代码解读都比较零散,而且细节不够丰富,且更多偏向原理性介绍,而对代码说明不够详细深入,所以自己一边搜资料一边读代码,一边记录,争取能够做一个系列文章出来。

 

一、caffe的四层数据结构

和官网的说明差不多,这部分内容网上有很多,不打算赘述。

caffe主要有4层数据结构,从底层向上分别是:blobs、layer、net和solver。

blobs定义的是数据结构及其上的基本操作。blobs的特点是4维,这点和theano有点类似,一般维度的顺序是,输出特征图数、输入通道数、图像/模版的长和宽。

layer定义的是层,这部分代码应该也是caffe中最为丰富的,因为层的类型非常多。

net定义的是网络的结构,layer是如何组成net的、互相之间如何传递数据的。

solver定义的,除了网络之外,还包括使用何种最优化算法。(姑且先这么理解,关于net和solver 所解决问题的区分,暂时我也不是很清楚。)

 

参考资料:http://blog.csdn.net/fengbingchun/article/details/49535873

二、blobs之下的数值计算——CBLAS

还记得安装caffe时apt-get的cblas么?(诶?去翻了下安装记录,似乎没有安装这个的步骤,那是什么时候装好的?有了,atlas开发库就是包含这个cblas的)

当时不知道是什么,读过源码之后才知道这是什么。

BLAS的全称是Basic LinearAlgebra Subprograms,中文大概可以叫做基础线性代数子程序。主要是用于向量和矩阵计算的高性能数学库。去跟踪caffe的代码可以发现,最终所有的矩阵计算都可以落到cblas相关的函数上,这是在blobs之下更底层的库。

caffe的源码中有一个文件叫做math_functions.cpp,对cblas提供了一层封装,提供了所有caffe的基础计算函数库。

 

参考资料:http://blog.csdn.net/cleverysm/article/details/1925549

 

三、solver之上的封装——proto

我们在实际使用caffe的时候,并不是去调用c函数(虽然也可以这么干),而是通过编写一个prototxt文件,通过文本的方式直接去定义网络结构。

关于protobuf,个人觉得比较直观的理解就是,通过定义标准化的协议,把标准化程序的编写转化为文本的形式,看到介绍protobuf的文章多会提到xml,用xml还需要程序员编写协议解析的代码,而protobuf的优势是不需要这部分工作,同时又很高效。

 

参考资料:http://blog.csdn.net/caisini_vc/article/details/5599468

 

以上基本是caffe的整体架构。此外,在读源码的时候,还会涉及到glog、gflag等的使用,关于这些会在后面一一进行介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值