该类是caffe数据存储的最底层,里面规定了什么时候分配内存(显存),数据的存储位置以及数据的指针,封装了CPU和GPU之间数据交互的方法,并提供简单的接口进行数据的操作。
Blob是caffe基本的数据结构,其主要做了两种封装:
Layer类主要定义了caffe中Layer层需要做的任务,即Layer的初始化步骤、需要完成的任务(forward、backward)等。其前向传播得到top blob,反向传播计算出diff。
void SetUp(const vector<Blob<Dtype>*>& bottom,
const vector<Blob<Dtype>*>& top) {
CheckBlobCounts(bottom, top);
LayerSetUp(bottom, top);
Reshape(bottom, top);
SetLossWeights(top);
}
共有4步操作:
Layer的派生类通过实现Layer的方法实现具体的操作。
Layer的派生类
Date_Layer
neuron_layer
vison_layer
common_layer
loss_layer
通过使用工厂模式,由LayerRegistry将类和对应的字符串类型形成map映射关系,使网络在定义时可以生成不同类型的Layer以供使用。
Net类将数据和层组合起来做进一步的封装,对外暴露了初始化、前向传播以及反向传播的接口,通过vector连接各层规定传播方向和顺序。也可以理解为是一个大的Layer,里面包括了很多个小的Layer,实现了传播和更新的方法。