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

Posted

技术标签:

【中文标题】Caffe 如何确定测试集的准确性?【英文标题】:How does Caffe determine test set accuracy? 【发布时间】:2017-05-03 23:53:39 【问题描述】:

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

My assumptions match the answer given here.

我是否在某处做了不正确的假设?什么可以解释这种差异?我曾假设 forward() 函数收集了一个随机样本,但我不太确定情况是否如此。 blobs.['accuracy'].data 每次都返回不同的结果(尽管通常在一个很小的范围内),所以这就是我假设的原因。

【问题讨论】:

【参考方案1】:

我曾假设 forward() 函数收集了一个随机样本,但我不太确定情况是否如此。 blobs.['accuracy'].data 每次都返回不同的结果(尽管通常在一个很小的范围内),所以这就是我假设的原因。

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

我是否在某处做了不正确的假设?造成这种差异的原因是什么?

检查贯穿整个 LMDB 的脚本是否执行与训练期间相同的数据预处理。

【讨论】:

以上是关于Caffe 如何确定测试集的准确性?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用交叉验证来确定使用训练、验证和测试集的最终模型

针对最大深度绘制决策树训练/测试精度

如何确定Keras ImageDataGenerator中测试数据集的最佳“步数”和“批量大小”?

如何最好地确定模型的准确性?重复训练/测试拆分或简历?

如何评估/提高来自具有不平衡数据集的神经网络的预测的准确性?

SVM模型进行分类预测时的参数调整技巧