【问题标题】:How to choose which pre-trained weights to use for my model?如何选择用于我的模型的预训练权重?
【发布时间】:2019-12-13 15:08:50
【问题描述】:

我是初学者,对于如何选择能够改进我的模型的预训练模型感到非常困惑。

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

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

【问题讨论】:

    标签: deep-learning classification pre-trained-model transfer-learning


    【解决方案1】:

    合理的权重初始化

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        神经模型如何识别图像

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

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

        Read more about Conv net Filters at keras's blog here

        使用预训练模型如何获得更好的结果?

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

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

        如何使用预训练的权重

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

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

        使用哪种预训练模型

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

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

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

        【讨论】:

          【解决方案4】:

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-01-03
            • 2022-10-07
            • 1970-01-01
            • 2016-06-29
            • 2017-08-19
            • 2020-10-19
            • 2020-01-12
            • 2021-12-09
            相关资源
            最近更新 更多