我modified the MNIST example当我使用我的3个图像类训练它时,它返回91%的准确度。但是,当我使用C++ example文件和deploy prototxt修改labels file并尝试在某些图片上对其进行测试时,会返回第二类(1个圆圈)的预测值,其概率为1.0无论我给它什么图像 - 即使它是在训练集中使用的图像。我已经尝试了十几张图片,它始终只是预测了一个类。
为了澄清事情,在我修改的C ++示例中,我确实缩放了要预测的图像,就像在训练阶段缩放图像一样:
img.convertTo(img, CV_32FC1);
img = img * 0.00390625;
如果这是正确的事情,那么我想知道我是否在计算deploy_arch.prototxt文件中的概率的输出图层上做错了。
答案 0 :(得分:3)
我认为您忘记了在分类时间内缩放输入图像,如train_test.prototxt文件的第11行所示。您可能应该在C ++代码中的某个位置乘以该因子,或者使用Caffe图层来缩放输入(请查看ELTWISE或POWER图层)。
修改强>
在评论中进行了一次对话之后,结果发现在classification.cpp文件中错误地删除了图像均值,而在原始训练/测试管道中没有将其减去。
答案 1 :(得分:1)
你的火车课程是否平衡? 您可以通过预测一个主要类别的堆叠网络。 为了找到问题,我建议在训练期间输出火车预测,与在不同级别的相同火车图像上使用前向示例的预测进行比较。