
Caffe 源码导读
提供更科学的源码阅读路线,帮助 Caffe 初学者迅速掌握其精髓
卜居
爱好:玩游戏,发呆
技能:CUDA,C/C++,Caffe/TensorFlow/PyTorch
展开
-
在MATLAB下调试Caffe
Caffe本身是C++、CUDA语言编写的。在调试模型、参数时,根据运行log、snapshot很难实时反馈当前训练的权值情况,也难以捕捉算法存在的bug。MATLAB则是非常适合算法设计、快速迭代的利器,只需要做少量工作就能编写出复杂的算法,调试非常方便,位于workspace中的变量随时都能打印,无论是一维、二维还是三维数据,都能直观显示,从而有利于定位算法设计问题,减少调试时间。Caffe中...原创 2015-10-28 22:32:18 · 12857 阅读 · 15 评论 -
Mac下安装Caffe
2016-11-14 更新:一些读者反映了新版 Caffe 在 Mac 下编译时找不到 cblas.h 这个问题,始吾弗信,今亲测也发现了这个问题,特别记录下解决方法。罪魁祸首就是 Makefile Line 361~399:# BLAS configuration (default = ATLAS)BLAS ?= atlasifeq ($(BLAS), mkl) # MKL LIBRAR...原创 2015-11-26 13:49:31 · 4009 阅读 · 5 评论 -
Caffe + CUDNN V5
在今年 GTC 上,NVIDIA 推出的 NVIDIA Deep Learning SDK 中,cuDNN 赫然在列。与之比肩的还有 DIGITS, cuBLAS, cuSPARSE, NCCL 等。从 2014 年推出 第一个版本,到如今 cuDNN 已经连续发布 5 个版本。目前 cuDNN v5 的最新特性有:(1) 支持递归神经网络( LSTM / GRU / RNN );(2) cudn...原创 2016-04-15 18:05:57 · 17691 阅读 · 14 评论 -
【深夜福利】Caffe 增加自定义 Layer 及其 ProtoBuffer 参数
在飞驰的列车上,无法入眠。外面阴雨绵绵,思绪被拉扯到天边。翻看之前聊天,想起还欠一个读者一篇博客。于是花了点时间整理一下之前学习 Caffe 时增加自定义 Layer 及自定义 ProtoBuffer 参数的简单例程,希望对初学者有借鉴意义。博客内容基于新书《深度学习:21 天实战 Caffe》,书中课后习题答案欢迎读者留言讨论。以下进入正文。在使用 Caffe 过程中经常会有这样的需求:已有 L原创 2016-10-02 03:17:06 · 18606 阅读 · 34 评论 -
Caffe源码导读(7):LRN层的实现
LRN全称为Local Response Normalization,即局部响应归一化层,具体实现在CAFFE_ROOT/src/caffe/layers/lrn_layer.cpp和同一目录下lrn_layer.cu中。该层需要参数有:norm_region: 选择对相邻通道间归一化还是通道内空间区域归一化,默认为ACROSS_CHANNELS,即通道间归一化;local_size:两种表示(1...原创 2014-12-19 22:47:06 · 27092 阅读 · 14 评论 -
Caffe代码导读(5):对数据集进行Testing
上一篇介绍了如何准备数据集,做好准备之后我们先看怎样对训练好的模型进行Testing。先用手写体识别例子,MNIST是数据集(包括训练数据和测试数据),深度学习模型采用LeNet(具体介绍见http://yann.lecun.com/exdb/lenet/),由Yann LeCun教授提出。如果你编译好了Caffe,那么在CAFFE_ROOT下运行如下命令:$ ./build/tools/caff...原创 2014-12-03 12:21:58 · 20784 阅读 · 23 评论 -
Caffe代码导读(4):数据集准备
Caffe上面有两个比较简单的例子:MNIST和CIFAR-10,前者是用于手写数字识别的,后者用于小图片分类。这两个数据集可以在Caffe源码框架中用脚本(CAFFE_ROOT/data/mnist/get_mnist.sh和CAFFE_ROOT/data/cifar10/get_cifar10.sh)下载,如下图所示:$ ./get_cifar10.shDownloading...--20...原创 2014-12-01 17:57:17 · 7873 阅读 · 0 评论 -
Caffe代码导读(3):LevelDB例程
Caffe自带例子Cifar10中使用leveldb存储输入数据,为此我们研究一下怎样使用它。安装步骤可以参考http://blog.youkuaiyun.com/kangqing2003/article/details/6658345Leveldb库提供了一种持续的键值对存储方式。键和值可以为任意字节数组。键存储顺序可由用户定义的比较函数决定。打开一个数据库Leveldb数据库有个与文件系统目录相对应的名字...原创 2014-11-13 00:02:05 · 4712 阅读 · 0 评论 -
Caffe代码导读(2):LMDB简介
闪电般的内存映射型数据库管理(LMDB)简介LMDB是基于二叉树的数据库管理库,建模基于伯克利数据库的应用程序接口,但做了大幅精简。整个数据库都是内存映射型的,所有数据获取返回数据都是直接从映射的内存中返回,所以获取数据时没有malloc或memcpy发生。因此该数据库仍是非常简单的,因为它不需要自己的页面缓存层,并且非常高效、省内存。它在语义上完全符合ACID(原子性、一致性、隔离性、持久性)。...原创 2014-11-12 23:55:00 · 9159 阅读 · 2 评论 -
Caffe代码导读(1):Protobuf例子
Protobuf是一种可以实现内存与外存交换的协议接口。这是由谷歌开发的开源工具,目前研究Caffe源码时用到。一个软件项目 = 数据结构 + 算法 + 参数,对于数据结构和算法我们都已经有较多研究,但不同开发者对参数管理却各有千秋。有人喜欢TXT格式化的参数文件,有人喜欢BIN简单高效,也有人喜欢图形化界面的直观。不一致的参数管理带来很多问题,例如一个项目组内不同成员必须约定一套统一的参数方案,...原创 2014-11-12 22:06:14 · 11969 阅读 · 22 评论 -
Caffe代码导读(0):路线图
【Caffe是什么?】Caffe是一个深度学习框架,以代码整洁、可读性强、运行速度快著称。代码地址为:https://github.com/BVLC/caffe【博客目的】从接触Caffe、编译运行、阅读代码、修改代码一路走来,学习到不少内容,包括深度学习理论,卷积神经网络算法实现,数学库MKL,计算机视觉库OpenCV,C++模板类使用,CUDA程序编写……本博客目的是为初学者清除代码阅读中的障...原创 2014-12-02 17:38:07 · 16927 阅读 · 13 评论