caffe学习一 目录结构

data/用于存放下载的训练数据

docs/帮助文档

examples/代码样例

matlab/Matlab接口文件

python/Python接口文件

models/一些配置好的模型参数

scripts/一些文档和数据会用到的脚本

核心代码

tools/保存的源码时用于生成二进制处理程序,caffe在训练时,实际是直接调用这些二进制文件

include/caffe的实现代码的头文件

src/实现caffe的源文件

 

src/文件结构

gtest/ google test的用于测试的库

caffe/关键代码:

(1)test/用gtest测试caffe的代码

(2)util/数据转换时用的一些代码,caffe速度快,很大程度得意于内存设计上的优化(blob数据结构采用proto)和对卷积的优化(部分于im2col有关)。还有math_functions定义了caffe中的矩阵计算

(3)proto/即所谓的Protobuf,全称“google protocol buffer”,是一种数据存储格式,帮助caffe提速

(4)layers/深度神经网络中的基本结构就是一层层不相同的网络。这个文件夹下的源文件以及目前位置“src/caffe”中包含的所有.cpp都是caffe和核心目录下的核心代码。

Blob,Layers,Nets是最重要的三个部分

 

Blob

blob.hpp中的caffe.pb.h是google protocol buffer根据caffe.proto自动生成的。可以在这个里面看到caffe数据的定义,用这种方式定义数据,可以提高数据读写的效率

common.hpp中封装了boost和cuda随机数生成函数,提供了统一的接口。

syncedmem.hpp定义了内存分配和内存释放的接口CaffeMallocHost、CaffeFreeHost。还定义了内存分配管理和CPU、GPU之间的同步函数。

math_functions.hpp封装了很多矩阵运算函数

-----caffe.proto里面的解读

optional意味着可以有一个或者没有这个参数,每个名字后面都有一个数字,这个数字是一个标签,用来在二进制文件中搜索查询。1到15会花费1byte的编码空间,16到2047花费2byte。一般建议把频繁使用的名字标签设置为1到15。后面的repeated意味着float类型的data和diff可以重复任意次数,而加上[packed=true]是为了更高效的编码。

message BlobProto {
  optional BlobShape shape = 7;
  repeated float data = 5 [packed = true];
  repeated float diff = 6 [packed = true];
  repeated double double_data = 8 [packed = true];
  repeated double double_diff = 9 [packed = true];

  // 4D dimensions -- deprecated.  Use "shape" instead.
  optional int32 num = 1 [default = 0];
  optional int32 channels = 2 [default = 0];
  optional int32 height = 3 [default = 0];
  optional int32 width = 4 [default = 0];
}

-----

blob主要变量:

shared_ptr<SyncedMemory>data_;主要是正向传播时候的数据

shared_ptr<SyncedMemory>diff_;主要用来存储偏差的

blob的常用操作函数

reshape函数在改变blob大小的同事,内存将会被重新分配。

count函数用来统计blob的容量

data_at得到blob的数据

 

Layer

用于模型和计算的基础

五种类型的层

1、data_layer:

包含与数据有关的文件,支持layertype:data,memory_data,HDF5_data,HDF5_output,image_data

2、neuron_layer:数据的操作层,实现大量的激活函数,元素级别的操作。relu

3、loss_layer:计算网络误差,LossLayer

4、common_layer:连接到vision_layer的。

声明了九个类型的common_layer,

(1)InnerProductLayer常常用来作为全连接层。

(2)SplitLayer用于一输入多输出场合(对blob)

(3)FlattenLayer将n*c*h*w变成n*(c*h*w)*1*1

(4)concatLayer用于多对一输出的场合

(5)SilenceLayer用于一输入多输出的场合(对layer)

(6)Elementwise Operations这里是我们常说的激活函数层ActivationLayers

EltwiseLayer、SoftmaxLayer、ArgMaxLayer、MVNLayer

5、vision_layer实现卷积和pooling操作

convolutionLayer常用的卷积操作

Im2colLayer

LRNLayer

PoolingLayer

 

Net

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值