caffe中的Accuracy

Caffe 中的 Accuracy 是precision,即:


理解为你预测对的正例数,占预测正例总量的比率

如果要输出recall,而不是precision,accuracy_param里面有一个ignore_label,二分类的话,你把一个label ignore掉,就只剩另一个label了,不过这个只能用于二分类,而且结果有偏差

因为如果是完全不改的accuracy,预测值里面应该有四种:

TP | 1->1

FP | 0->1

TN | 0->0

FN | 1->0

如果不改,应该是输出 (TP+TN)/(TP+FP+TN+FN),但是如果加了ignore,就会只是 TP/(TP+FN)或者 TN/(TN+FP),所以有偏差

caffe中的Accuracy_第1张图片

今天才偶然发现,caffe在计算Accuracy时,利用的是最后一个全链接层的输出(不带有activation function),比如:alexnet的train_val.prototxt、caffenet的train_val.prototxt

下图是这两个网络训练配置文件(prototxt文件)计算Accuray的配置文件截图的截图(对于该部分,alexnet和caffenet是一致的)

  • 最后一个全连接层
layer {
  name: "fc8"
  type: "InnerProduct"
  bottom: "fc7"
  top: "fc8"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 1000
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 计算Accuracy
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "fc8"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

可以看到,caffe中计算Accuracy时,是通过比较最后一个全连接层(神经元个数=类别数、但没有加入activation function)的输出和数据集的labels来得到的,计算过程在AccuracyLayer中实现

之前一直非常困惑,计算accuracy应该使用计算得到的labels与数据集真正的labels去做计算,为什么caffe的accuracy要将fc8接入Accuracy层呢?通过简单查看AccuracyLayer的说明才发现,原来,在AccuracyLayer内部,实现了“利用fc8的输出得到数据集的预测labels”(数值最大的那个值得index就是样本的类别),那么,再与输入的数据集真实labels作对比,就实现了accuracy的计算!

实际上,如果仅仅是做预测,利用fc8的输出就够了(输出值最大的那个位置即为输入的label),该输出表示了输入的样本属于每一类的可能性大小,但并不是概率值; 
如果为了使输出具有统计意义,需要加入softmax function,它只是使前面的全连接层的输出(fc8)具有了概率意义,并不改变这些输出之前的大小关系,因为softmax function本身就是增函数; 
为了利用误差反向传播,还需要构造loss function,需要利用softmax function的输出,即需要利用输入样本属于每一类的概率值;

注意:

  • 最后一个全连接层(fc8)的输出值位于区间[,],它并不是概率值

  • fc8后面接的SoftmaxWithLoss层做的工作分2步

    • 第一步:对fc8的输出计算softmax function(结果为概率值)
    • 第二步:利用求得的概率值计算Loss值

你可能感兴趣的:(机器学习)