Caffe源码解读
类图
SyncedMem类
该类是caffe数据存储的最底层,里面规定了什么时候分配内存(显存),数据的存储位置以及数据的指针,封装了CPU和GPU之间数据交互的方法,并提供简单的接口进行数据的操作。
Blob类
Blob是caffe基本的数据结构,其主要做了两种封装:
-
一个Blob中封装了data_和diff_两个数据指针,分别表示存储的参数和反向传播时计算的梯度。
-
因为SyncedMem类存储的数据是一维的,在Blob中,记录一个Blob的shape信息,可以用来记录2维(全连接层in_feature*out_feature)3维4维的数据。并附带了计算数据偏移量、数据求和的方法。
Layer类
Layer类主要定义了caffe中Layer层需要做的任务,即Layer的初始化步骤、需要完成的任务(forward、backward)等。其前向传播得到top blob,反向传播计算出diff。
初始化步骤
void SetUp(const vector<Blob<Dtype>*>& bottom,