Caffee是用C++编写的深度学习框架,大量使用类的封装,继承,多态,所以也可以用来学习C++语言特性。Caffe类数目众多,但通过面向对象编程(OOP)方式组织得很好,所以要遵循类继承规则顺藤摸瓜,就会看得云里雾里,迷失丛林。
如何有效阅读caffe源码?
 Caffe源码阅读路线最好是从src/caffe/proto/caffe.proto开始,了解基本的数据结构、内存对象和磁盘文件的一一映射关系(如何从磁盘文件加载一个数据结构到内存对象,以及如何将内存对象保存为磁盘文件,这中间的过程其实都是有ProtoBuffer工具自动完成的)。
 第二步是看头文件。不用急于看cpp文件,先通过头文件类声明理解整个框架,发挥想象力“猜”具体实现,从基类向派生类顺藤摸瓜看下去,很容易掌握这些类的使用方法。
 第三步就是有针对性地去看cpp和cu文件了。一般而言,Caffe框架并不需要大改,按需求派生新的类即可。例如,你使用了新的卷计算法,需要自己实现相应的ConvolutionLayer,则只需要从已有的ConvolutionLayer派生一个心累MyConvolutionLayer,然后将前向传播计算,反向传播计算按自己的算法实现即可。这一阶段关注点在算法上,相应的测试和正确性验证手段是必须的。
 第四步就很自由了,可以编写各类工具,集成到Caffe内部。在tools/下面已经有很多实用工具(如训练模型,测试模型,特征提取,转换数据格式等),可以根据需要修改。另外,也可以学习用Python或Matlab包装Caffe的方法,便于调节模型训练效果。

如何有效阅读caffe源码相关推荐

  1. 零基础学caffe源码 ReLU激活函数

    零基础学caffe源码 ReLU激活函数 原创 2016年08月03日 17:30:19 1.如何有效阅读caffe源码 1.caffe源码阅读路线最好是从src/cafffe/proto/caffe ...

  2. Deep Compression阅读理解及Caffe源码修改

    Deep Compression阅读理解及Caffe源码修改 作者:may0324 更新:  没想到这篇文章写出后有这么多人关注和索要源码,有点受宠若惊.说来惭愧,这个工作当时做的很粗糙,源码修改的比 ...

  3. 剖析Caffe源码之Net---Net构造函数

    目录 Net构造函数 读取Prototxt ReadProtoFromTextFile UpgradeNetAsNeeded 设置网络状态 Init函数 FilterNet InsertSplits ...

  4. 剖析Caffe源码之Layer_factory

    在<剖析Caffe源码之Layer>,对Layer代码进行了基本分析,可以知道Layer是所有的其他Layer的基本类,由此来扩展出各个神经网络中所需要的Layer,体现了caffe的可扩 ...

  5. caffe源码深入学习6:超级详细的im2col绘图解析,分析caffe卷积操作的底层实现

       在先前的两篇博客中,笔者详细解析了caffe卷积层的定义与实现,可是在conv_layer.cpp与base_conv_layer.cpp中,卷积操作的实现仍然被隐藏,通过im2col_cpu函 ...

  6. caffe源码学习——1.熟悉protobuf,会读caffe.proto

    要想学习caffe源码,首当其冲的要阅读的,就是caffe.proto这个文件.它定义了caffe中用到的许多结构化数据. caffe采用了Protocol Buffers的数据格式. 那么,Prot ...

  7. Caffe源码中Solver文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/solver.hpp文件的 ...

  8. Caffe源码中Net文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/net.hpp文件的内容: ...

  9. Caffe源码中Pooling Layer文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/vision_layers ...

最新文章

  1. python安装文件乱码_python输出到文件乱码如何解决
  2. 张小明教授+计算机,香港浸会大学、实验室兼职导师张晓明教授访问实验室并做学术报告...
  3. 借助联合体union的特性实现检测当前计算机环境采用的是大端模式还是小端模式
  4. Andriod开发技巧——Fragment的懒载入
  5. boost::fusion::transform用法的测试程序
  6. 挖一挖产品经理的核心竞争力
  7. 计算从1970年到现在累计的秒数
  8. 关于android隐式启动activity的分析和说明,Android学习之Intent中显示意图和隐式意图的用法实例分析...
  9. 系统设计拓展:如何设计一个自动阅卷系统(英语/数学)
  10. 手机1像素线粗_移动端1像素边框问题
  11. 当酒品牌遇上爱“微醺”的年轻人,会擦出怎样的火花?
  12. c#中regex的命名空间_C# Regex类用法
  13. python自动翻译excel某一列_python批量将excel内容进行翻译写入功能
  14. 微信小程序之获取接口数据展示
  15. 关于解决文件夹变成*.EXE可执行文件的问题
  16. ReentrantLock 实现原理笔记(一)
  17. Cisco交换机 ——STP
  18. Android逆向入门6——定位到小红书Sign算法
  19. 《Laravel-汉字转拼音》
  20. H264码流打包分析.整理

热门文章

  1. Window10蓝牙无法连接的解决方案(已成功)
  2. 逃离迷宫的路径(打印路径)
  3. cmd package install-create -r -t -S returns error
  4. Asymmetric numeral systems (ANS)非对称数字系统最全资料整理
  5. 双硬盘多系统独立引导(2-Windows xp Win7)
  6. 从新手到架构师,一篇就够:从100到1000万高并发的架构演进之路
  7. WebRTC学习06----1对1视频通信实例
  8. Mysql数据库MMM实现高可用架构
  9. linux 如何扫描 病毒,linux安装fprot扫描病毒
  10. 阿里云OS 2012(天语W806大黄蜂)破解教程/ROOT教程(一键破解法)