Caffe如何确定测试集的准确度?

时间:2016-12-18 23:23:07

标签: machine-learning classification caffe pycaffe

使用BVLC参考AlexNet文件,我一直在训练CNN对抗我创建的训练集。为了衡量培训的进度,我一直在使用粗略的方法来估算培训数据的准确性。我在测试网上的批量大小是256.我有~4500张图像。我对solver.test_nets [0] .forward()执行17次调用,并记录solver.test_nets [0] .blobs ['accuracy']。data(前向传递的准确性)的值。我取这些平均值。我的想法是,我从我的验证集中获取了16个随机样本256个,并获得了这些随机抽样的准确性。我希望这与整个集合的真实准确度非常接近。但是,我后来回去写了一个脚本来浏览我的LMDB中的每个项目,这样我就可以为我的整个测试集生成一个混淆矩阵。我发现我的模型的真实准确性明显低于估计的准确度。例如,我预期的约75%的准确度下降到约50%的真实准确度。这是一个比我预期的更糟糕的结果。

My assumptions match the answer given here.

我在某个地方做出了错误的假设吗?有什么可以解释这个差异?我曾假设forward()函数收集了一个随机样本,但我不确定是这样的。 blob。['accuracy']。数据每次返回不同的结果(虽然通常在很小的范围内),所以这就是我假设的原因。

1 个答案:

答案 0 :(得分:0)

  

我曾假设forward()函数收集了一个随机样本,但我不确定是这样的。 blob。['准​​确度']。数据每次返回不同的结果(尽管通常在很小的范围内),所以这就是我假设的原因。

Caffe的forward()函数不执行任何随机抽样,只会根据您的DataLayer获取下一批。例如,在您的情况下,forward()将传递您网络中的下256个​​图像。执行此17次将依次传递17x256=4352张图片。

  

我在某个地方做出了错误的假设吗?什么可以解释差异?

检查通过整个LMDB的脚本执行与训练期间相同的数据预处理。