Caffe输出层数量对准确性的影响

我修改了Caffe的MNIST示例,以对三类图像进行分类。我注意到,如果我将输出层的数量设置为3,那么测试准确率会急剧下降,降至40%左右。然而,如果我将输出层数量增加1,设为4,准确率则能达到95%左右。
我还向数据集中添加了第四类图像(因此总共有4类),并观察到同样的现象——如果输出层的数量与类别数量相同,结果会很差;如果输出层的数量比类别数量多1,结果则非常好。

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

有谁知道这是为什么吗?我注意到,当我使用C++示例代码训练的模型对测试集中的图像进行分类时,程序会抱怨说我告诉它有4个类别存在,而我在标签文件中只提供了3个标签。如果我编造一个标签并将其添加到文件中,我可以让程序运行,但无论我提供什么图像,它都会返回其中一个类别的概率为1.0。


回答:

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

 inner_product_params {   num_output: 3 }

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

如果你使用num_output: 3和标签1、2、3,Caffe无法表示标签3,实际上有一条对应于标签0的冗余行未被使用。
正如你所观察到的,当更改为num_output: 4时,Caffe再次能够表示标签3,结果有所改善,但参数矩阵中仍然有一行未被使用。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注