前传和后传是一个网络最重要的计算过程。
1.前传
前传过程为给定的待推断的输入计算输出,Caffe组合每一层的计算一得到整个模型的计算函数,自底向上进行。
2.反传
反传过程根据损失来计算梯度从而进行学习,Caffe通过自动求导并反向组合每一层的梯度来计算整个网络的梯度,自顶向下进行。
反传过程以损失开始,根据输出计算梯度。根据链式准则,逐层计算出模型其余部分的梯度。
3.Caffe中前传和反传的实现
只要定义好了模型,计算即可立即进行。Caffe中已准备好前传和后传的实现方法。
Net::Forward()和Net::Backward()实现了网络的前传和后传,而Layer::Forward()和Layer::Backward计算每一层的前传和后传。
Solver优化模型过程中,首先调用前传来获得输出和损失,然后调用反传产生模型梯度,以最小化损失。Solver,网络和层之间的分工使得caffe可以模块化并且开源。