赞
踩
与大多数的机器学习算法一样,caffe的学习也是由loss function驱动的(或者叫error,cost,objective function)。损失函数的目标是,将参数(就是网络中的权值和偏置)映射到一个能够度量参数“不好程度”的标量中,因此,其目标就是让这个标量最小化(其实就是调整参数,是的损失函数的值最小)。
在caffe中,通过前向传播计算损失,每一层由一系列的输入(bottom)blobs产生一系列的输出(top),某些层的输出可以用于损失函数,一类典型的多分类任务的损失函数是SoftmaxWithLoss
函数,其定义如下:
- layer {
- name: "loss"
- type: "SoftmaxWithLoss"
- bottom: "pred"
- bottom: "label"
- top: "loss"
- }
在
SoftmaxWithLoss
函数中,top blob是一个标量值,它是整个mni-batch损失的平均值(由预测标签和真实标签计算得到)
SoftmaxWithLoss
对输入数据分类,同时也使用
EuclideanLoss
层重构网络), loss weights可以用来给定两个损失的重要性.
按惯例 , caffe中后缀为loss的层均用于损失函数, 其他层单纯的用于中间计算。但是,可以通过添加一个loss_weight: <float>
字段将任意层定义为一个loss。对于后缀为loss的层,该层的第一个top blob的loss_weight默认为1,其余层默认为0。因此上面的SoftmaxWithLoss
层的定义等价于:
- layer {
- name: "loss"
- type: "SoftmaxWithLoss"
- bottom: "pred"
- bottom: "label"
- top: "loss"
- loss_weight: 1
- }
caffe中整个网络的损失可以通过对整个权值损失求和得到,其伪代码如下:
- loss := 0
- for layer in layers:
- for top, loss_weight in layer.tops, layer.loss_weights:
- loss += loss_weight * sum(top)
参考资料:
http://caffe.berkeleyvision.org/tutorial/loss.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。