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

时间:2019-09-14 15:55:19

标签: python tensorflow keras resnet vgg-net

我正在寻找训练大型模型(resnet或vgg)进行人脸识别的方法。

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

换句话说-如果一个模型学得好的话-是否证明该模型对任务有好处?

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

2 个答案:

答案 0 :(得分:2)

简短答案:否,因为深度学习在处理大量数据时效果很好。

长答案:不。问题在于,仅学习一张面孔可能会使模型适合该特定面孔,而无需学习示例中未提供的功能。例如,因为该模型学会了检测到您的面部,这要归功于该面部中的特定,非常简单的模式(称为 overfitting )。

举一个愚蠢的简单例子,您的模型学会了检测该脸,因为您的右脸颊上有痣,并且学会了识别它。

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

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

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

如果您的数据集很小,那么在一般情况下就很难获得良好的性能,因为神经网络将学习最简单的模式,而通常不是一般/更好。

添加数据您强迫神经网络提取好的模式,这种模式适用于一般情况。

这是一个折衷,但是通常在小型数据集上进行的训练不会导致对一般情况进行良好的分类

edit2:重新整理所有内容以使其更加清晰。在小型数据集上获得良好的性能并不能告诉您,在所有数据集上进行训练后,您的模型是否是好的模型。这就是为什么你要训练 您的大部分数据集并在较小的数据集上进行测试/验证

答案 1 :(得分:1)

对于人脸识别,通常使用暹罗网或三连音损失。这是一种一次性学习的方法。这意味着在每个班级仅提供几个示例(此处为人脸)的情况下,它的效果确实很好,但是您仍然需要针对许多示例(不同的人脸)进行培训。参见例如:
https://towardsdatascience.com/one-shot-learning-with-siamese-networks-using-keras-17f34e75bb3d

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

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