-1

我有一个用例,其中我有大约 100 个图像,每一个都有 10000 个独特的项目。我有 10 件物品,全部来自 10000 套,我也知道哪 10 件物品,但仅在测试实时数据时才知道。我现在必须将这 10 个项目与其名称匹配。识别这些项目的有效方法是什么?我完全控制了训练环境背景和测试环境背景。如果我用所有 10000 个项目制作一个模型,它会扩展吗?或者我应该制作 10000 个不同的模型并在我预训练的 10 个模型上运行 10 个项目。

4

1 回答 1

1

您的问题是关于“一对多分类”的问题,您可以在谷歌上搜索,第一个热门是 Andrew Ng 的视频讲座,几乎可以肯定值得观看。

这个问题已经被长期研究并在过多的背景下进行。您问题的答案在很大程度上取决于您使用的模型。但我会假设,如果你在进行图像分类,你会使用卷积神经网络,因为毕竟它们是大多数此类图像分类任务的最先进技术。

在卷积网络的背景下,您应该阅读称为“多任务学习”的内容。归结为一句话,这个概念是,你要求网络学习的越多,它在单个任务中的表现就越好。因此,在这种情况下,您几乎可以肯定在 10,000 个类上训练 1 个模型,而不是 10,000 个类,每个类都执行一对多的分类方案。

以 1000 类 Imagenet 数据集和 CIFAR-10 的 10 类数据集为例。许多论文已经证明,首先针对 Imagenet 的 1,000 类数据集进行训练,然后简单地将最后一层替换为 10 类输出并在 CIFAR-10 的数据集上重新训练将产生比仅在 CIFAR-10 的数据集上进行训练更好的结果独自的。不可否认,这个结果有多种原因,Imagenet 是一个更大的数据集。但是,Imagenet 数据集中类标签的丰富性、多任务学习当然是造成这一结果的原因之一。

所以这是一个冗长的说法,使用一个具有 10,000 个类的模型。


旁白:

如果您想变得非常非常有趣并跳入研究级思维领域,您可能会考虑一个包含 10,000 个类的 1-hot 向量相当稀疏,并开始考虑是否可以使用嵌入来降低输出层的维度. 嵌入将是一个密集向量,假设大小为 100 作为一个很好的起点。现在类标签变成了 100 维空间中的点簇。我敢打赌,您的网络在这些条件下会表现得更好。

如果这个小旁白没有意义,忽略它是完全安全的,你的 10,000 类输出没问题。但是,如果它确实引起了您的兴趣,请查找有关 Word2Vec 的信息,并阅读这篇关于如何使用嵌入实现人脸识别的非常好的帖子:https ://medium.com/@ageitgey/machine-learning-is-fun-part-4 -modern-face-recognition-with-deep-learning-c3cffc121d78。您也可以考虑使用自动编码器为图像生成嵌入(尽管我更喜欢三元组嵌入,因为我自己通常在人脸识别中使用)。

于 2017-11-21T17:36:40.950 回答