Caffe 框架理解

Caffe是开源的深度学习框架,理解Caffe源代码可以加深对深度学习训练、推理的理解。

 

Caffe的输入输出:

输入文件:

Solver.txt

在solver.txt中定义了一系列的超参数:网络,学习率,momentum,权重衰减,iter的次数以及snapshot快照保存的地址;

*.prototxt

在prototxt中定义了网络的组织架构,定义图像源,损失函数等。可以直接使用netscope可视化

输出文件:

       CaffeModel

       存放训练参数的caffemodel,网络架构在caffemodel中也会存放。可以使用训练好的caffemodel作为输入,进行finetune。

 

Caffe的运行:

  1. Solver

Solver是框架整体运行的主体,net在solver中进行前向计算和反向计算,当到达迭代次数后,根据loss,更新权重;solver中定义的超参数,如迭代次数,权重更新策略都会在这个函数中起到作用;

  1. Net

在net中存放了以下几个部分:

  1. Layers 即比如卷积layer,池化layer,proposal layer等;layer按照prototxt中的顺序进行组织;Layer会存放blob的指针,用于前向计算和反向计算
  2. Params 即参数,weight alpha bias等(Params中存放的也是blob中参数的指针吗?存疑)
  3. Blobs 即layer之间的交互,top/bottom blobs,中间数据也存放在Blobs中;

在net中可以在初始化时,明确各个layer的输入blob,建立输出blob;逐层调用各个layer的forward和backward;

Caffe 框架理解_第1张图片

Net中的init:

Caffe 框架理解_第2张图片

  1. Layer

在layer中指明了依赖的输入blob和输出blob,需要定义setup函数,说明layer的初始化,layer的forward和backward函数,forward就是正常的卷积计算,backward就是根据top_diff,计算针对各个输入,参数的data_diff;需要说明的是,这里backward是与学习率无关的,只是求偏导,真正与学习率有关的是update函数。

Caffe 框架理解_第3张图片

  1. Blob

在blob中存放了运行期间的data,diff,系数等。

你可能感兴趣的:(深度学习)