经过这一通训练,总算可以得到相应的模型了(具体操作网上已经烂大街了),我们要是修改caffe参数,甚至是修改caffe内部程序,必须是以输出结果为动力,现在我们就看看我们关心的caffe输出都有哪些,虽然每一层都可以输出,但是我们最关心的有Loss层。
深度学习就是通过最小化输出和目标的Loss来驱动的。
值得注意的是:以mnist为例,我们所得到的ip2层已经是我们预测(分类/回归)的结果,可以将ip2输出(此时输出的就是Predict Label)
1.softmax
类型:SoftmaxWithLoss
适合场景:图像多类分类问题
示例:
layer
{
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}
可选参数:
(1)ignore_label:int类型,默认值为空
如果对其赋值,则label=ignore_label的时候不参与Loss值计算,并且反向传播时梯度直接赋值为0
(2)normalize:bool类型
如果为true,Loss会处于参与计算的样本总数输出,如果为false,则直接Loss求和输出
(3)normalization:enum类型,默认值为valid
如果未设置normalization,但是设置了normalize:
<1>normalize=1:valid型
<2>normalize=0:batch_size型
如果设置normalization,一切由normalization决定:
解释:Loss值越小,表明其预测效果越好
2.Sum-of-Squares/Euclidean(欧式距离)
适合场景:线性回归问题
类型:EuclideanLoss
示例:
layer
{
name: "loss"
type: "EuclideanLoss"
bottom: "ip2"
bottom: "score"
top: "loss"
}
解释:Loss值越小,表明其预测效果越好
3.Hinge/Margin(铰链损失函数)
适合场景:主要在SVM分类器中
类型:HingeLoss
示例:
layer
{
name: "loss"
type: "EuclideanLoss"
bottom: "ip2"
bottom: "score"
top: "loss"
}
可选参数:
(1)inorm[default L1]:选择L1或者L2范数
4.Sigmoid Cross-Entropy
类型:SigmoidCrossEntropyLoss
示例:
layer
{
name: "loss"
type: "SigmoidCrossEntropyLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}
5.Infogain Loss
类型:InfogainLoss
示例:
layer
{
name: "loss"
type: "InfogainLoss"
bottom: "score"
bottom: "label"
top: "loss"
}
6.Accuracy and Top-k
用来计算输出和目标的准确率,事实上,这不是一个loss,而且没有backward这一步
类型:Accuracy
示例:
layer
{
name: "accuracy"
type: "Accuracy"
bottom: "ip2"
bottom: "label"
top: "accuracy"
}