8

我是一个初学者,我很困惑我们如何选择一个可以改进我的模型的预训练模型。

我正在尝试使用模型的预训练权重创建一个猫品种分类器,比如说在数字数据集上训练的 VGG16,这会提高模型的性能吗?或者如果我只在数据库上训练我的模型而不使用任何其他权重会更好,或者两者都与那些预训练的权重相同只是一个起点。

此外,如果我使用针对猫与狗数据训练的 VGG16 的权重作为我的猫品种分类模型的起点,这将有助于我改进模型吗?

4

4 回答 4

6

健全的权重初始化

要选择的预训练权重取决于您希望分类的类的类型。由于您希望对 Cat Breeds 进行分类,因此请使用经过类似任务训练的分类器中的预训练权重。正如上面的答案所提到的,初始层学习边缘、水平或垂直线、斑点等。随着你的深入,模型开始学习特定于问题的特征。因此,对于一般任务,您可以使用 imagenet,然后针对手头的问题对其进行微调。

但是,拥有一个与您的训练数据非常相似的预训练模型会大有帮助。不久前,我参加了场景分类挑战赛,我们用在 Places365 数据集上训练的 ResNet50 权重初始化了我们的模型。由于上述挑战中的类都存在于 Places365 数据集中,我们使用了此处可用的权重并微调了我们的模型。这大大提高了我们的准确性,我们最终在排行榜上名列前茅。您可以在此博客中找到有关它的更多详细信息

此外,要了解迁移学习的优势之一是节省计算量。使用具有随机初始化权重的模型就像从头开始训练神经网络。如果你使用在数字数据集上训练的 VGG16 权重,那么它可能已经学到了一些东西,所以它肯定会节省一些训练时间。如果您从头开始训练模型,那么它最终将学习使用预先训练的数字分类器权重可以学习的所有模式。

另一方面,使用 Dog-vs-Cat 分类器的权重应该会给你更好的性能,因为它已经学习了检测爪子、耳朵、鼻子或胡须的特征。

于 2019-08-15T12:14:36.607 回答
5

您能否提供更多信息,您想准确分类什么?我看到您希望对图像进行分类,哪种类型的图像(包含什么?)以及在哪些类中?

作为一般评论:如果您使用经过训练的模型,它当然必须满足您的需求。请记住,在给定数据集上训练的模型仅学习该数据集中包含的信息,并且可以对类似于训练数据集中的信息进行分类/识别。

  1. 如果您想使用 Y/N(二元)分类器(猫或非猫)对包含动物的图像进行分类,您应该使用针对不同动物(其中包括猫)进行训练的模型。

  2. 如果您想将猫的图像分类为与猫种族对应的类别,假设您应该使用仅在猫图像上训练的模型。

我应该说你应该使用一个管道,其中包含步骤 1。然后是 2。

于 2019-08-08T15:08:21.843 回答
5

既然你提到你是一个初学者,我会尽量比平常更详细一点,所以请多多包涵。

神经模型如何识别图像

  • 预训练模型中的层存储图像的多个方面,例如图案(线条、曲线)、图像中的颜色,用于确定图像是否属于特定类别
  • 随着每一层,它可以存储的内容的复杂性增加,最初它捕获线或点或简单的曲线,但随着每一层,表示能力增加,它开始捕获猫耳朵、狗脸、数字曲线等特征。

来自 Keras 博客的下图显示了初始层如何学习表示简单的事物,如点和线,随着我们深入,它们开始学习表示更复杂的模式。

KERAS 可视化转换过滤器

在 keras 的博客上阅读更多关于 Conv 网络过滤器的信息

使用预训练模型如何提供更好的结果?

当我们训练一个模型时,我们在最初创建这些表示时会浪费大量计算和时间,为了获得这些表示,我们也需要大量数据,否则我们可能无法捕获所有相关特征,我们的模型可能不会一样准确。

因此,当我们说要使用预训练模型时,我们希望使用这些表示,因此,如果我们使用在具有大量猫图片的 imagenet 上训练的模型,我们可以确定该模型已经具有识别所需的重要特征的表示识别一只猫,并且会收敛到比我们使用随机权重更好的点。

如何使用预训练的权重

因此,当我们说使用预训练的权重时,我们的意思是使用保存表示的层来识别猫,但丢弃最后一层(密集和输出),而是添加具有随机权重的新密集和输出层。所以我们的预测可以利用已经学习的表示。

在现实生活中,我们在初始训练期间冻结了预训练的权重,因为我们不希望底部的随机权重破坏学习的表示。我们只有在我们有很好的分类准确度来微调它们之后才最终解冻这些表示,而且学习率也非常低。

使用哪种预训练模型

始终选择那些您知道具有最多表示的预训练权重,这可以帮助您识别您感兴趣的类。

那么,与在图像网络上训练的权重相比,使用 mnist 数字训练的权重会产生相对较差的结果吗?

是的,但是考虑到初始层已经学习了简单的模式,例如使用这些权重的数字线条和曲线,与在大多数情况下从头开始相比,仍然会让您处于优势。

于 2019-08-14T12:49:07.560 回答
1

这实际上取决于您手头数据集的大小以及模型预训练的任务和数据与您的任务和数据的相关程度。如果您的任务相同,请阅读有关迁移学习的更多信息http://cs231n.github.io/transfer-learning/或域适应。

我正在尝试使用模型的预训练权重创建一个猫品种分类器,比如说在数字数据集上训练的 VGG16,这会提高模型的性能吗?

仍然可以从边缘检测等数字中学习到一些一般特征,这些特征可能对您的目标任务有用,所以这里的答案是可能的。您可以在这里尝试只训练计算机视觉应用程序中常见的顶层。

此外,如果我使用针对猫与狗数据训练的 VGG16 的权重作为我的猫品种分类模型的起点,这将有助于我改进模型吗?

如果任务和数据更相关和相似,你的机会应该会更好

于 2019-08-08T15:09:03.677 回答