没有合适的资源?快使用搜索试试~ 我知道了~
common[.cpp .h] 定义Caffe类internal_thread[.cpp .h] 使用boost::thread线程库net[.cpp .h]
资源详情
资源评论
资源推荐
Caffe 学习笔记 1-安装以及代码结构
By YuFeiGan
2014-12-09 更新日期:2014-12-09
安装
按照官网教程安装,我在 OS X 10.9 和 Ubuntu 14.04 上面都安装成功了。
主要麻烦在于 glog gflags gtest 这几个依赖项是 google 上面的需要翻墙。由
于我用 Mac 没有 CUDA,所以安装时需要设置 CPU_ONLY := 1。
如果不是干净的系统,安装还是有点麻烦的比如我在
OS X 10.9
上面,简直
不是一般的麻烦,
OS X 10.9
默认的编译器是
clang
,所以还要修改编译器和
重行编译一大堆依赖库。这方面其实网上教程很多,涵盖了各种你可能遇到
的问题,多
Google
下问题还是可以解决的。
目录结构
caffe 文件夹下主要文件: 这表示文件夹
� data 用于存放下载的训练数据
� docs 帮助文档
� example 一些代码样例
� matlab MATLAB 接口文件
� python Python 接口文件
� model 一些配置好的模型参数
� scripts 一些文档和数据用到的脚本
下面是核心代码文件夹:
� tools 保存的源码是用于生成二进制处理程序的,caffe 在训练时实际是直接
调用这些二进制文件。
� include Caffe 的实现代码的头文件
� src 实现 Caffe 的源文件
后面的学习主要围绕后面两个文件目录(include 和 src)下的代码展开
源码结构
由于 include 和 src 两个目录在层次上基本一一对应因此主要分析 src 即
可了解文件结构。
这里顺便提到一个有意思的东西,我是在
Sublime
上面利用
SublimeClang
插
件分析代码的(顺便推荐下这插件,值得花点时间装)。在配置的时候发现
会有错误提示找不到
”caffe/proto/caffe.pb.h”
,去看了下果然没有,但编译的
时候没有报错,说明是生成过后又删除了,查看
Makefile
文件后发现这里用
了
proto
编译的,所以在
”src/caffe/proto”
下面用
CMakeLists
文件就可以编译
出来了。
� src
� gtest google test 一个用于测试的库你 make runtest 时看见的很多绿色
RUN OK 就是它,这个与 caffe 的学习无关,不过是个有用的库
� caffe 关键的代码都在这里了
� test 用 gtest 测试 caffe 的代码
� util 数据转换时用的一些代码。caffe 速度快,很大程度得益于内存
设计上的优化(blob 数据结构采用 proto)和对卷积的优化(部分与
im2col 相关)[1]。
� proto 即所谓的“Protobuf”[2],全称“Google Protocol Buffer”,是一
种数据存储格式,帮助 caffe 提速。
� layers 深度神经网络中的基本结构就是一层层互不相同的网络了,
这个文件夹下的源文件以及目前位置“src/caffe”中包含的我还没有提
到的所有.cpp 文件就是 caffe 的核心目录下的核心代码了。
源码主要关系
如上所言我们现在可以知道,caffe 核心中的核心是下面的文档和文件:(这
部分目前不清楚的地方先参照别人的观点)
� blob[.cpp .h] 基本的数据结构 Blob 类[3]。
� common[.cpp .h] 定义 Caffe 类
� internal_thread[.cpp .h] 使用 boost::thread 线程库
� net[.cpp .h] 网络结构类 Net
� solver[.cpp .h] 优化方法类 Solver
� data_transformer[.cpp .h] 输入数据的基本操作类 DataTransformer
� syncedmem[.cpp .h] 分配内存和释放内存类 CaffeMallocHost,用于同步
GPU,CPU 数据
� layer_factory.cpp layer.h 层类 Layer
� layers 此文件夹下面的代码全部至少继承了类 Layer
Caffe 的官方说明
根据 Caffe 官方文档介绍,caffe 大致可以分为三层结构 blob,layer,net。数
据的保存,交换以及操作都是以 blob 的形式进行的,layer 是模型和计算的
基础,net 整和并连接 layer。solver 则是模型的优化求解。
[1]: linger: 我所写的 CNN 框架 VS caffe
[2]: Google Protocol Buffer 的使用和原理
[3]: caffe 源码简单解析——Blob(1)
Caffe 学习笔记 2-Caffe 的三级结构
(Blobs,Layers,Nets)
By YuFeiGan
2014-12-09 更新日期:2014-12-10
根据 Caffe 官方文档介绍,caffe 大致可以分为三层结构 blob,layer,net。数
据的保存,交换以及操作都是以 blob 的形式进行的,layer 是模型和计算的
基础,net 整和并连接 layer。
Blobs
Blob 是 Caffe 的基本数据结构,具有 CPU 和 GPU 之间同步的能力,它是 4 维
的数组(Num, Channels, Height, Width)。
设 Blob 数据维度为 number N x channel K x height H x width W,Blob 是
row-major 保存的,因此在(n, k, h, w)位置的值物理位置为((n * K + k) * H +
h) * W + w,其中 Number/N 是 batch size。
Blob 同时保存了 data 和 diff(梯度),访问 data 或 diff 有两种方法:
1
2
const Dtype* cpu_data() const; //不修改值
Dtype* mutable_cpu_data(); //修改值
Blob 会使用 SyncedMem 自动决定什么时候去 copy data 以提高运行效率,通
常情况是仅当 gnu 或 cpu 修改后有 copy 操作,文档里面给了一个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
// Assuming that data are on the CPU initially, and we have a blob.
const Dtype* foo;
Dtype* bar;
foo = blob.gpu_data(); // data copied cpu->gpu.
foo = blob.cpu_data(); // no data copied since both have up-to-date contents.
bar = blob.mutable_gpu_data(); // no data copied.
// ... some operations ...
bar = blob.mutable_gpu_data(); // no data copied when we are still on GPU.
foo = blob.cpu_data(); // data copied gpu->cpu, since the gpu side has modified the data
foo = blob.gpu_data(); // no data copied since both have up-to-date contents
bar = blob.mutable_cpu_data(); // still no data copied.
bar = blob.mutable_gpu_data(); // data copied cpu->gpu.
bar = blob.mutable_cpu_data(); // data copied gpu->cpu.
(
顺便查了下一直有疑问
foo
是什么意思。。
)
Layer
所有的 Pooling,Convolve,apply nonlinearities 等操作都在这里实现。在
Layer 中 input data 用 bottom 表示 output data 用 top 表示。每一层定义了三
种操作 setup(Layer 初始化), forward(正向传导,根据 input 计算
output), backward(反向传导计算,根据 output 计算 input 的梯度)。
forward 和 backward 有 GPU 和 CPU 两个版本的实现。
剩余28页未读,继续阅读
一曲歌长安
- 粉丝: 48
- 资源: 302
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现串口发送接收数据 可配置端口,波特率等 发送可选择ASCII方式或HEX方式
- matlab基于BP神经网络手写字母识别(单一).zip代码9
- 基于matlab实现编写的串口调试工具,数据接收部分采用中断方式,保证了实时的数据显示
- 基于matlab实现39节点电力系统合闸角调控过程中的机组和负荷的灵敏度计算.rar
- HBase数据库性能调优
- 原生微信小程序源码 - -首字母排序选择
- 基于QT+C++开发的保卫萝卜塔防游戏+源码(毕业设计&课程设计&项目开发)
- newapp.apk
- 项目申报管理系统论文Java项目
- 8数码、α-β搜索的博弈树算法编写一字棋游戏、Fisher线性分类器、感知器算法、SVM 分类器、卷积神经网络 CNN 框架
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0