Caffe输出层数精度

Caffe output layer number accuracy

我已将 Caffe MNIST example 修改为 class 化 3 class 图像。我注意到的一件事是,如果我将输出层数指定为 3,那么我的测试准确度会急剧下降——降至 40% 的低范围。但是,如果我 +1 并有 4 个输出层,结果在 95% 范围内。
我在我的数据集中添加了一个额外的 class 图像(所以 4 classes)并注意到同样的事情 - 如果输出层的数量与 classes 的数量相同,然后结果很糟糕,如果它是相同的+1,那么它真的很有效。

  inner_product_param {
    num_output: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"

有人知道这是为什么吗?我注意到,当我使用模型时,我在测试集中的图像上使用 C++ example code 进行训练,然后它会抱怨我已经告诉它存在 4 个 class,而我'我的标签文件中只提供了 3 个标签。如果我发明一个标签并将其添加到文件中,我可以将程序设置为 运行,但无论如何它都只是 class 概率为 1.0 的 returns 之一图片我给了。

重要的是要注意,当微调 and/or 更改标签数量时,输入标签 必须 始终从 0 开始,因为它们用作索引计算损失时进入输出概率向量。
因此,如果您有

 inner_product_params {
   num_output: 3
 }

您必须只有训练标签 0,1 和 2。

如果您使用带有标签 1、2、3 的 num_output: 3,caffe 无法表示标签 3,实际上有一个冗余行对应于未使用的标签 0。
如您所见,当更改为 num_output: 4 时,caffe 再次能够表示标签 3 并且结果有所改善,但参数矩阵中仍有未使用的行。