【发布时间】: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