Caffe代码导读(0):路线图
2015-07-23 13:48
323 查看
Caffe代码导读(0):路线图
【Caffe是什么?】Caffe是一个深度学习框架,以代码整洁、可读性强、运行速度快著称。代码地址为:https://github.com/BVLC/caffe
【博客目的】
从接触Caffe、编译运行、阅读代码、修改代码一路走来,学习到不少内容,包括深度学习理论,卷积神经网络算法实现,数学库MKL,计算机视觉库OpenCV,C++模板类使用,CUDA程序编写……
本博客目的是为初学者清除代码阅读中的障碍,结合官网文档、融入个人理解、注重动手实践。
【如何开始】
在开始阅读Caffe代码之前,应该做好下面几件事:
(1)下载Caffe源码;
(2)配置开发环境(安装CUDA、OpenCV、boost、leveldb、lmdb、Python等,安装步骤参考http://tutorial.caffe.berkeleyvision.org/installation.html);
(3)编译;
(4)运行例子(如MNIST、CIFAR10、ImageNet等);
【路线图】
(1)Caffe源码阅读路线图应该是从CAFFE_ROOT/src/caffe/proto/caffe.proto开始,了解各类数据结构,主要是内存对象和序列化磁盘文件的一一对应关系,知道如何从磁盘Load一个对象到内存,以及如何将内存对象Save到磁盘,中间的过程实现都是由Protobuf自动完成的。
(2)第二步就是看头文件,不用急于去看cpp文件,先理解整个框架。Caffe中类数目众多,但脉络十分清晰。在Testing时,最外层的类是Caffe::Net,包含了多个Caffe::Layer对象,而Layer对象派生出神经网络多种不同层的类(DataLayer, ConvolutionLayer, InnerProductionLayer, AccurancyLayer等),每层会有相应的输入输出(Blob对象)以及层的参数(可选,Blob对象);Blob中包括了SyncedMemory对象,统一了CPU和GPU存储器。自顶向下去看这些类,结合理论知识很容易掌握使用方法。
(3)第三步就是有针对性地去看cpp和cu文件了。一般而言,Caffe框架不需要修改,只需要增加新的层实现即可。例如你想自己实现卷积层,只需从ConvolutionLayer派生一个新类MyConvolutionLayer,然后将几个虚函数改成自己的实现即可。所以这一阶段关注点在算法上,而不是源码本身。
(4)第四步就很自由了,可以编写各类工具,集成到Caffe内部。在CAFFE_ROOT/tools/下面有很多实用工具,可以根据需要修改。例如从训练好的模型中抽取参数进行可视化可以用Python结合matplot实现。
(5)接下来,如果想更深层次学习,最好是自己重新写一遍Caffe(时间充裕的情况)。跳出现有的框架,重新构建自己的框架,通过对比就能学到更多内容。
相关文章推荐
- jQuery
- NodeJS + Socket.io聊天服务器连接数达到1024后就连不上了
- CSS布局--上中下布局(上下固定,中间自适应)
- McAfee更新失败,请确认mcafee framwork 服务已启动解决方法
- Sniffer简介
- HTML游戏实战之《宝藏大收集》
- JS获取页面高度方法小结
- NodeJS + Socket.io搭建聊天服务器
- HTML5 动画引擎 小记
- C# 过滤html标签,保留要指定标签的做法
- css去掉iPhone、iPad默认按钮样式
- HTMLFormElement获取表单里面所有的值然后以json形式返回
- js 计算剩余 天、时、分、秒
- fastjson用法1
- 优秀的前端project如何制定一个老师--html学习路径
- jquery tablesorter插件的使用
- String与StringBuffer简解
- HTML5引擎Construct2技术剖析(七)
- Count Complete Tree Nodes
- HTML5引擎Construct2技术剖析(六)