【问题标题】:How does Caffe determine test set accuracy?Caffe 如何确定测试集的准确性?
【发布时间】: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 每次都返回不同的结果(尽管通常在一个很小的范围内),所以这就是我假设的原因。

【问题讨论】:

    标签: machine-learning classification caffe pycaffe


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 2018-08-17
      • 2019-08-20
      • 2015-06-08
      • 2020-12-10
      • 1970-01-01
      • 2012-12-08
      相关资源
      最近更新 更多