我有一个用例,其中我有大约100个图像,每个10000个独特的项目。我有10件物品,全部来自10000套,我知道哪10件物品,但仅在测试实时数据时。我现在必须将10个项目与他们的名字相匹配。识别这些物品的有效方法是什么?我完全掌控了培训环境背景和测试环境背景。如果我制作一个所有10000个项目的模型,它会扩展吗?或者我应该制作10000个不同的型号并在我预训练的10个型号上运行10个项目。
答案 0 :(得分:1)
您的问题是关于“one-vs-all分类”的内容,您可以进行谷歌搜索,第一次点击是Andrew Ng的视频讲座,几乎肯定值得关注。< / p>
这个问题在很多情况下都经过长期研究。您的问题的答案在很大程度上取决于您使用的模型。但我会假设,如果您正在进行图像分类,那么您正在使用卷积神经网络,因为毕竟它们是大多数此类图像分类任务的最先进技术。
在卷积网络的背景下,您应该阅读一些名为“多任务学习”的内容。归结为一句话,概念是你越多地要求网络学习它在个人任务中的表现越好。因此,在这种情况下,您几乎肯定会在10,000个类别上执行更好的训练1模型,而不是10,000个类别,每个类别执行一对一分类方案。
以1,000类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。您也可以考虑使用自动编码器为图像生成嵌入(虽然我喜欢三元组嵌入,这通常用于我自己的面部识别)。