caffe学习小问题(1):caffe中的Accuracy

原创 2016年06月01日 16:16:58

今天才偶然发现,caffe在计算Accuravy时,利用的是最后一个全链接层的输出(不带有acitvation 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
    }
  }
}
  • 计算Accuracy
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "fc8"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}

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

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

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

注意:

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

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

    • 第一步:对fc8的输出计算softmax function(结果为概率值)
    • 第二步:利用求得的概率值计算Loss值
版权声明:本文为博主原创文章,如需转载,请注明出处:http://blog.csdn.net/tina_ttl

相关文章推荐

caffe accuracy 学习

首先我们先看一下accuracy (在caffe.proto里面)的类定义 message AccuracyParameter {   // When computing accuracy, coun...

caffe accuracy_layer.cpp 解读

特别声明,这篇是我自己看的,有很多观点我自己都拿不准,要是不对,一定要跟我说下,我好改,咱互相学习。 直接看代码啊accuracy_layer.cpp 用的是lenet5网络 batch_size=...

caffe小问题(2):softmaxWithLoss

caffe中的softmaxWithLoss其实是: softmaxWithLoss = Multinomial Logistic Loss Layer + Softmax Layer其中: Mu...

人脸检测之MTCNN训练自己的数据

MTCNN是很好的人脸检测及对齐的深度学习方法,cpu速度快,准确率高。但是对于监控视角,检测效果不是很好,若想取得良好效果,必须增加监控视角数据加以学习,方能达到较好效果。经过两天摸索,终于完成mt...

caffe accuracy层以及blob的梳理

基础概念blob的reshapereshape接收的是一个vector的参数,目的是要给这个blob分配相应的内存空间。这个vector参数,表示了不同的维度,一般就是N*C*H*W,如[0]表示N,...

Caffe代码导读(5):对数据集进行Testing

上一篇介绍了如何准备数据集,做好准备之后我们先看怎样对训练好的模型进行Testing。 先用手写体识别例子,MNIST是数据集(包括训练数据和测试数据),深度学习模型采用LeNet(具体介绍...

caffe中各层定义

Vision Layers ConvolutionPoolingLocal Response Normalization LRNim2col Loss Layers SoftmaxSum...

Caffe学习:Layers

Caffe学习:Layers

caffe 第一轮测试的accuracy=0

出现的问题“: 原因:prototxt文件出错。。           最后一层的输出不等于样本类别数。。。

新手的caffe学习总结(图像识别)

一、Linux 1、进入root权限 执行下面的代码 sudo su 然后提示输入密码,输入正确的密码就能进入root权限(root权限相当于windows下的管理员权限,密码就是Linux系统的开机...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)