【问题标题】:(cross) validation of CNN models - when to bring in test data?(交叉)CNN 模型验证——何时引入测试数据?
【发布时间】:2019-12-10 18:10:57
【问题描述】:

对于一个研究项目,我正在使用一个包含大约 500 个图像的数据集,使用 CNN 对焊道图像进行缺陷检测。为此,我目前正在测试不同的模型(例如 ResNet18-50),以及数据增强和迁移学习技术。

经过一段时间的实验,我想知道哪种训练/验证/测试方式最适合提供准确的性能测量,同时保持计算成本高 在一个合理的水平,考虑到我想测试尽可能多的模型等。

我想执行某种交叉验证 (cv) 是合理的,尤其是因为数据集非常小。但是,在进行了一些研究之后,我找不到明确的最佳方法来应用它,而且在我看来,不同的人遵循不同的策略,我有点困惑。

有人可以澄清一下吗:

您是否仅在训练时使用验证集来找到表现最佳的 epoch/权重,然后直接在测试集上测试每个模型(并将此 k 次作为 k-fold-cv 重复)? em>

或者您是否通过比较所有模型的平均验证集准确度(每个模型的 k 次运行)找到性能最佳的模型,然后在测试集上检查其准确度?如果是这样,您会加载哪些确切权重进行测试,或者是否会执行另一个 cv 以获得最佳模型以确定最终测试精度?

是否可以选择为每个模型执行多次连续的训练-验证-测试运行,同时在每次运行之前对数据集进行洗牌并将其拆分为“新”训练、验证和测试集以确定平均值测试准确性(如 monte-carlo-cv,但可能运行次数较少)?

非常感谢!

【问题讨论】:

  • 基本上,不要根据测试集的性能做出任何决定!!这包括根据该性能“选择”模型。测试集上的结果应该用于报告最终分数,但任何导致该分数的决定都必须仅基于验证集!

标签: machine-learning neural-network deep-learning cross-validation


【解决方案1】:

在您的情况下,我会为您的测试集删除 100 张图像。您应该确保它们与您期望的最终模型能够处理的相似。例如。它应该是不在训练或验证集中的对象,因为您可能还希望它推广到新的焊道。然后您可以进行 5 折交叉验证之类的操作,您可以在其中随机或智能地采样 100 张图像作为您的验证集。然后,您在剩余的 300 个上训练您的模型,并将剩余的 100 个用于验证目的。然后,您可以对模型的性能使用置信区间。您可以使用此置信区间来调整超参数。

然后,测试集可用于预测新数据的性能,但您应该!!!千万不要!!!用它来调整超参数。

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2020-07-20
    • 2019-10-04
    • 2013-05-19
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    相关资源
    最近更新 更多