【问题标题】:Is it possible to train a CNN on a dataset and test it on another dataset with different classes?是否可以在一个数据集上训练一个 CNN 并在另一个具有不同类别的数据集上对其进行测试?
【发布时间】:2019-01-23 11:17:32
【问题描述】:

我是深度学习的新手,我正在使用 CNN 进行研究。我需要在图像数据集(地标图像)上训练 CNN 模型,并使用不同的数据集(地标图像)测试相同的模型。动机之一是看到模型的泛化能力。但问题是:由于用于训练和测试的数据集不一样,所以类也不一样!可能还有类的数量,这意味着对测试数据集的预测不可信(因为输出层的权重是根据属于训练数据集的不同类计算的)。有什么方法可以在不影响测试准确性的情况下评估不同数据集上的模型?

【问题讨论】:

标签: tensorflow keras deep-learning dataset conv-neural-network


【解决方案1】:

神经网络在一个数据集上的性能通常不会与其在另一个数据集上的性能相同。一个数据集中的图像可能比另一个数据集中的图像更难区分。根据经验:如果您的地标数据集相似,则性能很可能相似。然而,情况并非总是如此:数据集之间的细微差异可能会导致显着不同的性能。

您可以通过在另一个数据集上训练另一个网络来解决两个数据集上可能存在的不同性能。当您尝试将网络泛化到它时,这将为您提供预期的基线。

您可以将针对一组类训练的神经网络应用到另一组类。有两种主要方法:

  • Transfer learning。在这里,您的训练网络的最后一层被替换为一个或多个新层,该层被单独训练以对新图像进行分类。 (用于许多课程。可用于少数课程。)
  • All-Transfer learning。与其替换最后一层,不如在它之后添加一个新层,只训练最后一层。 (用于少数课程。)

这两种方法都比从头开始训练神经网络要快得多。

【讨论】:

    【解决方案2】:

    我假设您面临分类问题。

    你的明确意思是什么?您的训练数据集中是否有 A B 和 C 类,而您的测试数据集中是否有具有不同标签的相同类,或者您的测试数据集中是否有与训练数据集完全不同的类?

    您可以通过创建从 trainlabel 到 testlabel 的映射来解决第一个问题,反之亦然。 第二个取决于您要实现的目标...如果您希望模型预测从未训练过的类,您将不会得到任何结果。

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 2021-11-24
      • 2021-01-31
      • 2021-03-09
      • 1970-01-01
      • 2018-07-21
      • 2015-10-25
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多