加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

如何为您的机器学习问题选择正确的预训练模型

发布时间:2019-05-07 17:34:02 所属栏目:移动互联 来源:不靠谱的猫
导读:在这篇文章中,我们将简要介绍一下迁移学习是什么,以及如何使用它。 什么是迁移学习? 迁移学习是使用预训练模型解决深度学习问题的艺术。 迁移学习是一种机器学习技术,你可以使用一个预训练好的神经网络来解决一个问题,这个问题类似于网络最初训练用来
副标题[/!--empirenews.page--]

如何为您的机器学习问题选择正确的预训练模型

在这篇文章中,我们将简要介绍一下迁移学习是什么,以及如何使用它。

什么是迁移学习?

迁移学习是使用预训练模型解决深度学习问题的艺术。

迁移学习是一种机器学习技术,你可以使用一个预训练好的神经网络来解决一个问题,这个问题类似于网络最初训练用来解决的问题。例如,您可以利用构建好的用于识别狗的品种的深度学习模型来对狗和猫进行分类,而不是构建您自己的模型。这可以为您省去寻找有效的神经网络体系结构的痛苦,可以为你节省花在训练上的时间,并可以保证有良好的结果。也就是说,你可以花很长时间来制作一个50层的CNN来完美地区分你的猫和狗,或者你可以简单地使用许多预训练好的图像分类模型。

使用预训练模型的三种不同方式

主要有三种不同的方式可以重新定位预训练模型。他们是,

  1. 特征提取 。
  2. 复制预训练的网络的体系结构。
  3. 冻结一些层并训练其他层。

特征提取:这里我们所需要做的就是改变输出层,以给出cat和dog的概率(或者您的模型试图将内容分类到的类的数量),而不是最初训练它将内容分类到的数千个类。当我们试图训练模型所使用的数据与预训练的模型最初所训练的数据非常相似且数据集的大小很小时,这是理想的。这种机制称为固定特征提取。我们只对添加的新输出层进行重新训练,并保留每一层的权重。

复制预训练网络的架构 :在这里,我们定义了一个与预训练模型具有相同体系结构的机器学习模型,该模型在执行与我们试图实现的任务类似的任务时显示了出色的结果,并从头开始训练它。我们从预训练的模型中丢弃每一层的权重,然后根据我们的数据重新训练整个模型。当我们有大量的数据要训练时,我们会采用这种方法,但它与训练前的模型所训练的数据并不十分相似。

冻结一些层并训练其他层:我们可以选择冻结一个预训练模型的初始k层,只训练最顶层的n-k层。我们保持初始值的权重与预训练模型的权重相同且不变,并对数据的高层进行再训练。当数据集较小且数据相似度较低时,采用该方法。较低的层主要关注可以从数据中提取的最基本的信息,因此可以将其用于其他问题,因为基本级别的信息通常是相同的。

另一种常见情况是数据相似性高且数据集也很大。在这种情况下,我们保留模型的体系结构和模型的初始权重。然后,我们对整个模型进行再训练,以更新预训练模型的权重,以更好地适应我们的特定问题。这是使用迁移学习的理想情况。

下图显示了随着数据集大小和数据相似性的变化而采用的方法。

迁移学习:如何为您的机器学习问题选择正确的预训练模型

PyTorch中的迁移学习

在torchvision.models模块下,PyTorch中有八种不同的预训练模型。他们是 :

  1. AlexNet
  2. VGG
  3. RESNET
  4. SqueezeNet
  5. DenseNet
  6. Inception v3
  7. GoogLeNet
  8. ShuffleNet v2

这些都是为图像分类而构建的卷积神经网络,在ImageNet数据集上进行训练。ImageNet是根据WordNet层次结构组织的图像数据库,包含14,197,122张属于21841类的图像。

迁移学习:如何为您的机器学习问题选择正确的预训练模型

由于PyTorch中的所有预训练模型都针对相同的任务在相同的数据集上进行训练,所以我们选择哪一个并不重要。让我们选择ResNet网络,看看如何在前面讨论的不同场景中使用它。

用于图像识别的ResNet或深度残差学习在pytorch、ResNet -18、ResNet -34、ResNet -50、ResNet -101和ResNet -152上有五个版本。

让我们从torchvision下载ResNet-18。

  1. import torchvision.models as models 
  2. model = models.resnet18(pretrained=True) 
迁移学习:如何为您的机器学习问题选择正确的预训练模型

以下是我们刚刚下载的模型。

迁移学习:如何为您的机器学习问题选择正确的预训练模型 迁移学习:如何为您的机器学习问题选择正确的预训练模型

现在,让我们看看尝试,看看如何针对四个不同的问题训​​练这个模型。

数据集很小,数据相似性很高

考虑这个kaggle数据集(https://www.kaggle.com/mriganksingh/cat-images-dataset)。这包括猫的图像和其他非猫的图像。它有209个像素64*64*3的训练图像和50个测试图像。这显然是一个非常小的数据集,但我们知道ResNet是在大量动物和猫图像上训练的,所以我们可以使用ResNet作为固定特征提取器来解决我们的猫与非猫的问题。

  1. num_ftrs = model.fc.in_features 
  2. num_ftrs 
迁移学习:如何为您的机器学习问题选择正确的预训练模型

Out: 512

  1. model.fc.out_features 

Out: 1000

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读