怎样解读Caffe源代码

导读

Caffe是如今非常流行的深度学习库,能够提供高效的深度学习训练。该库是用C++编写。能够使用CUDA调用GPU进行加速。可是caffe内置的工具不一定能够满足用户的全部需求,所以阅读源代码并理解它,是非常有必要的。

这篇博文不是想把Caffe的全部函数都讲一遍。由于Caffe的源代码非常大,一本书都不一定能够说清楚。

这里我仅仅是说说该怎么去阅读源代码,给大家提供一个思路和建议。让大家能够高速把握caffe的总体。出了问题该往哪个方向去思考。

caffe的编译。网上已有非常多教程,大家能够看看这篇

Caffe的文件组织方式

文件夹 功能
caffe-master 根文件夹
build 编译后的存放的文件夹
data examples使用到的全部数据都放在这里了
docs 这里有非常多解说caffe的文件,新手能够把这里的东西好好看看。.md文件推荐使用atom软件进行查看
examples 这里是放样例的地方,能够借着这些样例好好理解下该怎么用caffe。特别是mnist
include 这里存放着caffe的全部头文件。阅读头文件能够让人非常快地把握全局而不考虑详细实现
matlab 和 matcaffe有关的文件
models 这里有一些怎样写deploy文件的演示样例,能够用在训练完毕后公布你的模型
python 和pycaffe有关的文件都放在这里了。

在python中使用caffe时。须要把该路径给加上

scripts 一些帮助使用caffe的脚本
src 头文件的实现都在这里
tools 一些经常使用的工具的源代码,编译后的可执行文件在build/tools中

理解演示样例

examples里面由好几个caffe的演示样例,打开mnist看下,里面由非常多文件,我们先看readme.md。里面非常好的解说了怎样执行这个模型,以及各个參数代表什么意思。

读懂了这个的话,基本上你就会执行演示样例了。

其它的演示样例也能够照这样学习。

值得一提的是。学习这个部分时。能够结合docs里面的解说。另一些 *.ipynb。

怎样查看ipynb就不说了。自己查资料。

演示样例执行得几乎相同,你就能够琢磨下怎样使用deploy文件了。

理解caffe源代码

为了更好的阅读代码,我建议按例如以下步骤使用Eclipse打开caffeproject:

  • 配置下java。由于Eclipse须要java环境
  • 下载eclipse cpp版
  • 打开Eclipse,在菜单条File->import->c/c++->Existing code as Autotools project,按next,然后在browse中找到caffe-master。进入caffe-master后按确认。

这样就导入了整个project了,可是不要尝试使用Eclipse来编译caffe。由于基本上都编译不通过。

blob、layer、net、solver这几个是要好好阅读的(头文件以及实现)。能够结合这docs里面的文件看。看懂了这几个文件。那么你基本上就大概知道caffe是怎样执行的了。

可是你可能在执行演示样例时非常纳闷。每一个层那么多的參数。我该怎么知道它是什么意思。别操心。全部的这些信息都能够在src/caffe/proto/caffe.proto中找到。看不懂的话,能够查一下protobuf的使用。

上面的假设都看懂了,那就能够好好研究下src/caffe/layers里面的文件了。把mnist用到的那些层好好看看它是怎么实现的。能够先看cpp,有cuda基础的就看看cu。

加入自己的层

加入自己的caffe层须要有一定的c++基础。至少要明确什么是继承。什么是虚函数,以及多线程的基本概念。能够选择继承一个和自己功能最相近又满足继承关系的层。

详细的步骤能够參考下这篇博文。

使用pycaffe

使用pycaffe的话。我推荐使用cmake而不是直接的make编译project。由于如今的版本号中make后的pycaffe经常出现找不到链接库。

如今是看*.ipynb文件的时候了。里面详细解说了怎样使用caffe的python接口。出现故障的话就看源代码。建议使用pycharm或者Eclipse Java版。

怎样解读Caffe源代码的更多相关文章

  1. Caffe源代码中Solver文件分析

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

  2. caffe源代码分析--softmax_layer.cpp

    caffe源代码分析--softmax_layer.cpp // Copyright 2013 Yangqing Jia // #include <algorithm> #include ...

  3. 深入解读EOS源代码之——区块链内核

    EOS进入大众视野并且受到热议已经有一段时间了,各种热捧和争议过后,是时候让我们静下来搞清楚EOS到底是一个什么样的产品.本文从技术角度深入的分析EOS底层设计,从源代码入手,一层层揭开EOS区块链底 ...

  4. caffe源代码分析--math_functions.cu代码研究

    当中用到一个宏定义CUDA_KERNEL_LOOP 在common.hpp中有. #defineCUDA_KERNEL_LOOP(i,n) \ for(inti = blockIdx.x * bloc ...

  5. caffe源代码分析--data_layer.cpp

    dataLayer作为整个网络的输入层, 数据从leveldb中取. leveldb的数据是通过图片转换过来的. 网络建立的时候. datalayer主要是负责设置一些參数,比方batchsize.c ...

  6. javase基础回顾(一)ArrayList深入解析 解读ArrayList源代码(JDK1.8.0_92)

    我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...

  7. caffe源代码分析--Blob类代码研究

    作者:linger 转自须注明转自:http://blog.csdn.net/lingerlanlan/article/details/24379689 数据成员 shared_ptr<Sync ...

  8. smooth_L1_loss_layer.cu解读 caffe源码初认识

    .cpp是cpu上运行的代码,.cu是gpu上运行的代码. 这是smooth_L1_loss_layer.cu的前向传播部分 #include "caffe/fast_rcnn_layers ...

  9. caffe 安装在win 7 vs2015 无gpu的安装方式-是无法安装 的

    网上多数是vs2012或者vs2013上安装方式,带NA-显卡的需要安装CUDA7.5,安装cuDNN4,cuDNN. 一 :下载caffe源码(microsoft版) 下载地址:https://gi ...

随机推荐

  1. mysql创建新用户

    如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可. 以下为添加用户的的实例,用户名为qi,密码为python,并授权用户可进行SELECT,INSERT ...

  2. CPP-STL:list容器

    本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 目录 1 定义一个list 2 使用list的成员函数p ...

  3. 【软件构造】第三章第三节 抽象数据型(ADT)

    第三章第三节 抽象数据型(ADT) 3-1节研究了“数据类型”及其特性 ; 3-2节研究了方法和操作的“规约”及其特性:在本节中,我们将数据和操作复合起来,构成ADT,学习ADT的核心特征,以及如何设 ...

  4. Caused by: java.lang.IllegalArgumentException: Parameter Maps collection does not contain value for com.bj186.crm.pojo.User

    原因分析: myBatis在写delete语句的时候,多写了一个属性 错误的代码: <delete id="deleteUser" parameterType="I ...

  5. WebGL 绘制Line的bug(三)

    之前铺垫了许多,今天可以来分享点纯干货了. 上一篇已经讲述了通过面模拟线条时候,每一个顶点的顶点数据包括:端点坐标.偏移量.前一个端点坐标.后一个端点坐标,当然如果我们通过索引的方式来绘制的话,还包括 ...

  6. RTSP详解

    关于 RTSP. RTSP协议是一个非常类似HTTP协议的流控制协议.它们都使用纯文本来发送信息,而且rtsp协议的语法也和HTTP类似.Rtsp一开始这样设计,也是为了能够兼容使用以前写的HTTP协 ...

  7. iptables:ipset批量管理ip

    1.安装 安装: yum -y install ipset \apt-get -y install ipset 2.创建一个ipset ipset create whitelist hash:net ...

  8. 简单的自动化使用--使用selenium实现学习通网站的刷慕课程序。注释空格加代码大概200行不到

    简单的自动化使用--使用selenium实现学习通网站的刷慕课程序.注释空格加代码大概200行不到 相见恨晚啊 github地址 环境Python3.6 + pycharm + chrom浏览器 + ...

  9. ES6(Iterator 和 for...of 循环)

    Iterator 和 for...of 循环 1.什么是 Iterator 接口 Iterator 接口功能:用一种相同办法的接口让不同的数据结构得到统一的读取命令的方式 2.Iterator的基本用 ...

  10. LINUX常见小问题汇总

    1. crontab的备份与恢复 备份crontab文件: crontab -l > $HOME/mycron 恢复丢失的crontab文件: 如果不小心误删了crontab文件,假设你在自己的 ...