是否可以通过训练小数据子集来验证深度学习模型?

Is it possible to validate a deep learning model by training small data subset?

我希望训练一个大型模型(resnet 或 vgg)来识别人脸。

在少数人脸 (1..3) 上进行训练以验证模型是否有效?

换句话说 - 如果一个模型很好地学习了一张脸 - 是否证明该模型适合这项任务?

这里的重点是,我不想花一个星期的 GPU 昂贵的时间才发现我的模型不好或数据有错误或我的 TF 编码有错误

简短回答:不,因为深度学习在大量数据上效果很好。

长答案: 不。问题是只学习一张脸可能会使您的模型过拟合那张特定的脸,而不会学习示例中不存在的特征。因为例如,该模型已经学会检测你的脸,这要归功于你脸上的一个特定的、非常简单的模式(这被称为 过度拟合 )。

举个愚蠢的简单例子,你的模型已经学会检测那张脸,因为你的右脸颊上有一颗痣,它已经学会识别它

为了让你的模型在一般情况下表现良好,你需要大量的数据,让你的模型能够学习不同类型的模式

建议: 由于深度神经网络的训练是一项耗时的任务,通常不会一次训练一个单一的神经网络,而是并行训练多个神经网络,具有不同的超参数(层、节点、激活函数、学习率等) ).

因以下讨论而编辑:

如果你的数据集很小,在一般情况下不可能有好的表现,因为神经网络将学习最简单的模式,即通常 而不是 general/better。

添加数据你强制神经网络提取好的模式,这对一般情况有效。

这是一个权衡,但通常在小数据集上训练不会在一般情况下产生好的分类器

edit2:重新整理所有内容以使其更清楚。在小型数据集上的良好性能并不能告诉您在所有数据集上训练的模型是否是一个好的模型。这就是为什么你要训练 您的大部分数据集和 test/validate 在较小的数据集上

对于人脸识别,通常使用siamese net或triplet loss。这是一种一次性学习的方法。这意味着它可以在每个 class(这里是人脸)的情况下只给出几个例子,但你仍然需要在很多例子(不同的人脸)上训练它。参见示例:
https://towardsdatascience.com/one-shot-learning-with-siamese-networks-using-keras-17f34e75bb3d

您不会从头开始训练您的模型,而是无论如何都使用预训练模型并针对您的任务对其进行微调

您还可以查看预训练的人脸识别模型以获得更好的结果,例如 facenet
https://github.com/davidsandberg/facenet