【问题标题】:Is it possible to validate a deep learning model by training small data subset?是否可以通过训练小数据子集来验证深度学习模型?
【发布时间】:2020-01-16 03:00:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否尝试过在模型动物园中寻找预训练模型?
  • 我在回答的最后以更好的方式写下了我的想法。无论如何,我也会在这里写下我的答案:在小型数据集上的良好性能并不能告诉您在所有数据集上训练时您的模型是否是一个好的模型。这就是为什么您要针对大部分数据集进行训练并在较小的数据集上进行测试/验证
  • 我认为答案和 cmets 中的很多混淆来自对“好模型”短语的解释。我所说的“好”是“不坏”。可用。

标签: python tensorflow keras resnet vgg-net


【解决方案1】:

简短回答:不,因为深度学习适用于大量数据。

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

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

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

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

由于以下讨论而编辑:

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

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

这是一个折衷方案,但通常在小数据集上的训练不会导致一般情况下的良好分类器

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

【讨论】:

  • 我不同意。深度学习中每个神经元和时期的参数数量使得从更少的数据中学习更多信息成为可能。
  • 如果您正在处理 KB/MB 的数据,也不会那么耗时。
  • @hashrocketsyntax 你如何学习训练集中不存在的模式?
  • 好的。如果您编辑以包含该声明,我将更改为赞成。我被阻止在没有被编辑的情况下投票。重点是,它们也适用于小数据。
  • @Boppity Bop 如果问题仅与代码执行/调试有关,是的。我认为您可以在一个小数据集上进行训练以检查一切是否正常。但是,如果您想验证您的模型(例如,获得最佳超参数),您需要在大部分训练集上进行训练。
【解决方案2】:

对于人脸识别,通常使用siamese net 或triplet loss。这是一种一次性学习的方法。这意味着它可以在每个类仅几个示例(这里的人脸)的情况下表现得非常好,但是您仍然需要在许多示例(不同的人脸)上对其进行训练。例如:
https://towardsdatascience.com/one-shot-learning-with-siamese-networks-using-keras-17f34e75bb3d

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

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

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 1970-01-01
    • 2019-05-11
    • 2020-11-10
    • 2022-01-24
    • 2021-05-05
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多