荀子《劝学》:不积跬步,无以至千里;不积小流,无以成江海。Caffe相当于Net,按照设计图纸(prototxt),用Blob这些砖块筑成一层层(Layer)楼房,最后通过SGD方法(Solver)进行装修(Train)、精装修(Finetune)实现的。重要组成部分是:Blob、Layer、Net
Blob
Blob是一个模板类,声明在include/caffe/blob.hpp中,分装了SyncedMemory类,作为基本计算单元服务Layer、Net、Solver等,在内存中是4维数组,维度从低到高(width_,height_,channels_,num_),用来存储数据或权值(data)和权值增量(diff),在进行网络计算时,每层的输入和输出都需要通过Blob对象缓冲。Blob是Caffe的基本存储单元。Blob的Update()函数实现data=data-diff操作,完成CNN权值更新。ToProto()、FromProto()实现内部值保存到磁盘,或者从磁盘载入内存。
Layer
Layer是Caffe的基本计算单元,至少有一个输入Blob和一个输出Blob,部分Layer带有权值(Weight)和偏执项(Bias),有两个运算方向,前向传播(Forward)和反向传播(BackWard)。
Net
Net是一个完整的CNN模型,包含若干个实例,对应的描述文件是*.prototxt,