您的位置:首页 > Web前端

caffe tutorial 之 Loss

2017-07-12 16:52 323 查看
本文基于Caffe Tutorial 之 Loss编写。

在Caffe中,如同大多数机器学习算法一样,学习是通过损失(loss,也被称为误差、代价、或者目标函数)进行驱动。损失函数将参数设置(即,当前网络权重)映射为一个预示参数好坏程度的标量来指定学习目标。因此,学习的目标就是寻找一组使损失函数取值最小的参数值

Caffe中,损失通过网络的前向传播进行计算。每层从输入(低层)中获取数据,同时产生输出(顶层)块。这些层输出的一部分可能被用于计算损失。在一对所有的分类任务中,损失函数的典型选择是
SoftmaxWithLoss
函数,其调用方式如下:

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


SoftmaxWithLoss
函数中,顶端块为整个最小批(mini-batch)损失值(预测标签
pred
与实际标签
label
计算所得)的均值(shape为空)。

损失权重(loss weight)

对于多层产生一个损失值的网络(例如,一个使用
SoftmaxWithLoss
对输入进行分类且同时使用
EuclideanLoss
对其重建的网络),损失权重用于度量各层损失的相对重要性。

根据惯例,后标为Loss的Caffe层用于计算损失函数,其它层被假定为只用于中间计算。然而,任何层都可产生损失通过向层定义中添加loss_weight:
<float>
,从而为上一层产生损失。后标为Loss的层默认对于直接顶层包含
loss_weight: 1
,而对其他顶层包含
loss_weight: 0
。因此,对于以上的
SoftmaxWithLoss
层与以下书写方式等价。

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


Caffe中允许任意
loss_weight
不为零的层进行反向传播,这可以用于正规化网络中某些中间层的激活值。对于权重非零的非单独输出,损失可以简单地通过求块中所有元素之和而求得,其伪代码如下:

loss := 0
for layer in layers:
for top, loss_weight in layer.tops, layer.loss_weights:
loss += loss_weight * sum(top)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习 caffe loss