Caffe的Softmax层如何计算概率值?

时间:2017-05-17 10:48:46

标签: c++ caffe softmax

有谁知道在Caffe softmax层内发生了什么计算?

我正在使用预先训练好的网络,最后有一个softmax图层。

在测试阶段,对于图像的简单前进,倒数第二层(" InnerProduct")的输出如下: -0.20095,0.39989,0.22510,-0.36796,-0.21991,0.43291,-0.22714,-0.22229,-0.08174,0.01931,-0.05791,0.21699,0.00437,-0.02350,0.02924,-0.28733,0.19157,-0.04191,-0.07360,0.30252

最后一层(" Softmax")输出是以下值: 0.00000,0.44520,0.01115,0.00000,0.00000,0.89348,0.00000,0.00000,0.00002,0.00015,0.00003,0.00940,0.00011,0.00006,0.00018,0.00000,0.00550,0.00004,0.00002,0.05710

如果我在内部产品图层的输出上应用Softmax(使用外部工具,如matlab),我会得到以下值: 0.0398,0.0726,0.0610,0.0337,0.0391,0.0751,0.0388,0.0390,0.0449,0.0496,0.0460,0.0605,0.0489,0.0476,0.0501,0.0365,0.0590,0.0467,0.0452,0.0659

后者对我有意义,因为概率加起来为1.0(注意Caffe的Softmax图层值的总和> 1.0)。

显然,Caffe中的softmax层不是一个直接的Softmax操作。

(我认为它没有任何区别,但我只想提一下,我正在使用预先训练过的flickr风格网络,请参阅说明here)。

编辑:

这是proto txt中最后两层的定义。请注意,最后一层的类型是" Softmax"。

   Bank account1;

   if(choice.equals("n"))
      account1 = new Bank();
   else
   {
       System.out.println("Enter your initial balance :");
       double ibalance = scanner.nextDouble();
       account1 = new Bank(ibalance);
   }

1 个答案:

答案 0 :(得分:1)

你得到的结果很奇怪 "Softmax"图层的forward方法执行的操作是:

(注意,执行前两个步骤是为了防止计算中出现溢出)。