我正在使用卷积神经网络(CNN),想询问一下我划分训练/验证/测试集的方式是否正确。
我总共有55个受试者。我计划按80-10-10的比例划分,训练集(45个受试者),验证集(未见过的5个受试者),测试集(未见过的6个受试者)。
验证集是否也应该包含未见过的受试者?还是可以将整个训练集打乱,并使用其中的一部分(10-20%)作为验证集?
我读到过使用N折交叉验证时,会将整个训练集(样本)打乱,然后分成N折,模型会训练并平均N次。然而,对于神经网络或CNN,我们通常不使用交叉验证,因为它计算成本非常高。
我只是想知道哪种方式是正确的,因为使用未见过的受试者的验证集,我的模型在3-5个epoch后就开始过拟合,并且完全没有学习。另一方面,如果我使用训练集的10-20%作为验证集,我的模型使用三层CNN可以以合理准确率(45-50%)学习,但在未见过的测试集上测试时,我的top-1准确率仅为15-16%左右。
非常感谢。
回答:
总的来说,没有固定的规则,甚至连经验法则都很少。开发拓扑结构和模型的大部分工作在于调整超参数;训练-测试-验证的比例只是其中的一个。典型的划分比例大致为2:1:1,但有很大的变化,这取决于目的和数据集。如果训练集少于50%,或者测试集或验证集少于20%(虽然15%有时也有用,尤其是在数据集太小的情况下),我会开始质疑这种划分方式。
“正确”很大程度上取决于您对模型的最终用途。如果您期望它处理新的受试者,那么当然必须在测试和验证中包含未见过的受试者。如果只需要对给定的受试者进行良好的区分,那么您可能需要一个平衡的组合,或许是45:10:0——在这种情况下,您会欢迎过拟合。
如果您期望处理来自普通人群(新受试者)的表情,那么我认为您的训练受试者数量不足。为了适当调整这样的模型,您需要足够的受试者,以便可以自由调整比例,即使是8:1:1这样的比例也应该能给您提供可用的结果。