Jac*_*son 6 machine-learning computer-vision neural-network deep-learning caffe
我修改了Caffe MNIST示例来对3类图像进行分类.我注意到的一件事是,如果我将输出层的数量指定为3,那么我的测试精度会大幅下降 - 降至40%的低范围.但是,如果我+1并且有4个输出层,则结果在95%范围内.
我在我的数据集中添加了一类额外的图像(所以有4个类)并注意到同样的事情 - 如果输出层的数量与类的数量相同,那么结果是可怕的,如果它是相同的+1,然后它运作得很好.
inner_product_param {
num_output: 3
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?我注意到当我使用模型时,我在我的测试集上的图像上使用C++示例代码进行训练然后它会抱怨我已经告诉它有4个类存在且我只提供3个标签我的标签文件.如果我发明了一个标签并将其添加到文件中,我可以让程序运行,但是它只返回一个概率为1.0的类,无论我给它什么图像.
Sha*_*hai 11
重要的是要注意到,当微调和/或改变的标签数的输入标签是非常重要的,必须总是从0开始,因为它们是计算损失时用作索引到输出概率向量.
因此,如果你有
inner_product_params {
num_output: 3
}
Run Code Online (Sandbox Code Playgroud)
您必须只有训练标签0,1和2.
如果使用num_output: 3标签1,2,3 caffe无法表示标签3,实际上有一条与标签0对应的冗余线路未使用.
正如您所观察到的,当更改为num_output: 4caffe时,再次能够表示标签3并且结果得到改善,但您仍然在参数矩阵中有一个未使用的行.