zoukankan      html  css  js  c++  java
  • caffe中的Accuracy+softmaxWithLoss

    转:http://blog.csdn.net/tina_ttl/article/details/51556984

    今天才偶然发现,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
        • caffe中的softmaxWithLoss其实是: 
        • softmaxWithLoss = Multinomial Logistic Loss Layer + Softmax Layer

          其中: 
          Multinomial Logistic Loss Layer 即为交叉熵代价函数 
          Softmax Layer其实就是指softmax function(全连接那一步在它前面的fc中实现)

          示意图如下: 
          这里写图片描述

          应该注意,这里的Softmax Layer与机器学习中提到的softmax regression有一个小小的不同:它没有将前面的全连接层考虑在内,也就是说,它将softmax regression进行了分解:

          softmax regression = 全连接层 + softmax layer (即softmax function)


          另外,softmax function那个过程,按照如下方式绘制展示可能会更加明白 
          这里写图片描述

           
           
  • 相关阅读:
    windows 7(32/64位)GHO安装指南(系统安装篇)~重点哦!!~~~~
    windows 7(32/64位)GHO安装指南(U盘引导篇)~
    windows 7(32/64位)GHO安装指南(U盘制作篇)~
    windows 7(32/64位)GHO安装指南(序篇)~
    Linux课堂笔记(一)
    Web API 源码剖析之默认配置(HttpConfiguration)
    Web API 源码剖析之默认消息处理程序链--》路由分发器(HttpRoutingDispatcher)
    Web API源码剖析之HttpServer
    Web API 源码剖析之全局配置
    使用模板创建第一个Web API项目
  • 原文地址:https://www.cnblogs.com/JZ-Ser/p/7118632.html
Copyright © 2011-2022 走看看