咖啡(Caffe)输出层编号准确性

6
我已经修改了Caffe MNIST example,用于对图像的3个类别进行分类。我注意到如果我将输出层的数量指定为3,则测试准确率会大幅下降,只有40%左右。然而,如果我+1并增加到4个输出层,则结果在95%左右。
我向数据集中添加了一类额外的图像(因此有4个类别),并注意到同样的情况 - 如果输出层数与类别数相同,则结果很糟糕,如果相同+1,则效果非常好。
  inner_product_param {
    num_output: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"

有没有人知道为什么会这样?我发现当我使用我用C++ example code训练的模型在我的测试集上的图像时,它会抱怨我告诉它有4个类别存在,但在我的标签文件中只提供了3个类别的标签。如果我创造一个标签并将其添加到文件中,我就可以让程序运行,但是无论我给它什么图像,它都只会返回一个概率为1.0的类别。


在训练期间,您使用哪些标签?是1、2、3还是0、1、2? - Shai
我用第一组数据进行了训练,包括1、2、3。当我添加了额外的图像类别时,我将其设为0,因此现在是0、1、2、3。 - Jack Simpson
1
你必须使用0、1、2进行训练 - 因为标签被用作输出概率向量的索引。因此,如果你有3个输出,标签必须是0、1、2。 - Shai
啊,问题解决了,再次感谢! - Jack Simpson
1个回答

11

需要注意的是,在微调和/或更改标签数量时,输入标签 必须 始终从0开始,因为它们在计算损失时用作输出概率向量中的索引。
因此,如果你有

 inner_product_params {
   num_output: 3
 }

你必须只有训练标签0、1和2。

如果你使用标签为1、2、3的num_output: 3,caffe将无法表示标签3,并且实际上会有一个对应标签0的冗余行未被使用。正如你所观察到的,当改为num_output: 4时,caffe再次能够表示标签3并且结果得到改善,但仍然存在一个未使用的参数矩阵行。


回归问题也是这种情况吗?我的回归问题中有4个类,但我只使用了一个输出神经元。这样可以吗?您可以在http://stackoverflow.com/questions/39756886/counting-with-regression-in-caffe-training-loss-reducing-but-predicted-values-r?noredirect=1#comment66825237_39756886上看到我的问题。您能指导我真正的问题是什么吗? - khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接