Caffe入门(5)——Loss

2016/9/14

Caffe中和其他大部分机器学习一样,通过一个损失函数(或者叫做误差,成本,目标函数)。一个损失函数通过规划参数设置来确定学习的目标。因此,学习的目标是寻找参数的集合来最小化损失函数。

Caffe中Loss是通过网络的前向通道计算的。每一层输入一系列Blob并输出一系列Blob。一些层的输出会被用于损失函数计算。一个典型的一对多分类任务的损失函数是SoftmaxWithLoss函数。在网络中是这样定义的:

Layer{
    name: "loss"
    type: "SoftmaxWithLoss"
    bottom: "pred"
    bottom: "label"
    top: "loss"
}

SoftmaxWithLoss函数中,输出(top)blob是一个损失平均值的标量。损失通过预测标签pred和实际标签label来计算。

Loss weights

对于具有多个损失函数的网络(例如一个网络使用SoftmaxWithLoss层进行输如分类,并使用EuclideanLoss层进行重建),损失权重可以用来调整不同损失函数的相对重要性。

按照惯例,带有Loss后缀的Caffe层是损失函数层,其他层被假定进行单纯的中间计算。但实际上,任何层都可以被用作损失层,只需要在层定义中对每一个输出(top)加入损失权重(loss_weight)。具有Loss后缀的层隐式的定义了损失权重:第一个top(输出)为1,其他top为0,其他层所有的top的损失权重都被隐式定义为0。

因此上面的SoftMaxWithLoss层可以等价写为:

Layer{
    name: "loss"
    type: "SoftmaxWithLoss"
    bottom: "pred"
    bottom: "label"
    top: "loss"
    loss_weight: 1
}

然而,任何可以反向传播的层都可以赋予一个非零的损失权重。例如可以规范化中间层的活动。对于具有非零损失的非单一输出,损失只需要简单将blob相加。

最终的损失通过整个网络中的损失的权重相加计算得到。计算伪代码:
这里写图片描述

参考文献:http://caffe.berkeleyvision.org/tutorial/loss.html

你可能感兴趣的:(Caffe入门(5)——Loss)