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



我希望训练一个用于面部识别的大型模型(resnet或vgg(。

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

换句话说,如果一个模型很好地学习了一张脸,这是否证明该模型对任务有好处?

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

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

长答案:不。问题在于,只学习一个面可能会在该特定面上过度拟合您的模型,而不会学习示例中不存在的特征。因为例如,由于该脸中特定的,非常简单的模式(称为过度拟合(,模型已经学会了检测您的面部。

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

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

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

由于以下讨论而进行编辑:

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

添加数据可以强制神经网络提取适用于一般情况的良好模式。

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

编辑2:重新构建所有内容以使其更清晰。在小型数据集上的良好性能不会告诉您在所有数据集上训练时模型是否是一个好的模型。这就是为什么你训练 大部分数据集,并在较小的数据集上进行测试/验证

对于人脸识别,通常使用连体网或三重损失。这是一种一次性学习的方法。这意味着每个类只有几个例子(这里的人脸(它可以表现得非常好,但你仍然需要在许多例子(不同的人脸(上训练它。例如:
https://towardsdatascience.com/one-shot-learning-with-siamese-networks-using-keras-17f34e75bb3d

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

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

最新更新