自定义机器学习模型:简便的方法

1. 简介

2a934d0e86f14118.png

上次更新日期:2022 年 3 月 28 日

机器学习

机器学习是一个飞速发展的领域。该领域每天都会发布新的研究成果和可能性,从而展现一些以前不可能出现的使用场景。

这些发布活动通常都是应用模型的结果。您可以将模型理解为根据输入(例如图片)来输出结果(例如分类)的超长数学方程式。

  • 如果您想将这些新模型之一与自己的数据搭配使用,该怎么办?
  • 对于您的使用场景或应用,如何从这些先进的模型中受益?

此 Codelab 将逐步引导您根据自己的数据轻松自定义机器学习模型。

构建和训练机器学习模型会面临许多挑战

  • 需要大量时间。
  • 使用大量数据。
  • 需要具备数学和统计学等领域的专业知识。
  • 需要大量资源:某些模型可能需要数天时间才能完成训练。

构建新的模型架构需要大量时间,并且可能需要进行大量实验并积累多年经验。但是,如果您可以通过为自己的问题自定义先进的研究来利用所有相关知识并将其用于自己的数据,那会怎么样?您可以使用一种名为迁移学习的技术!

在此 Codelab 中,您将了解如何执行迁移学习、为什么迁移学习能发挥作用以及何时使用迁移学习。

学习内容

  • 什么是迁移学习以及何时使用迁移学习。
  • 如何使用迁移学习。
  • 如何微调模型。
  • 如何使用 TensorFlow Lite Model Maker。
  • 如何使用 TensorFlow Hub。

所需条件

  • 所有代码都是使用 Google Colaboratory 执行的,因此您无需在自己的机器上安装任何内容。您只需访问互联网并使用 Google 帐号登录 Colab 即可。
  • 具备 TensorFlow 和 Keras API 的基础知识。
  • 了解 Python。

即使您并不具备 TensorFlow 或机器学习方面的基础知识,也可以了解迁移学习。阅读下一步(“什么是迁移学习”)的内容,了解该技术背后的理论,然后进一步了解“使用 Model Maker 进行迁移学习”。如果您想更深入地详细了解该过程,可以阅读有关使用 TensorFlow Hub 进行迁移学习的部分。

2. 什么是迁移学习?

预训练模型是以前使用大型数据集(通常是大型图片分类任务)进行训练的已保存网络。您可以按原样使用预训练模型,也可以使用迁移学习来根据给定任务自定义此模型。

图片分类迁移学习背后的理念是,如果模型在足够大且足够通用的数据集上进行训练,则此模型将有效地用作视觉世界的通用模型。然后,您可以利用这些已学到的特征图,而无需从头开始在大型数据集上训练大型模型。

您可以通过两种方法自定义机器学习模型

  • 特征提取:使用之前的网络学到的表示法从新样本中提取重要特征。您只需在预训练模型的基础上添加一个从头开始训练的新分类器,以便将之前学到的特征图用于数据集。您无需(重新)训练整个模型。基本卷积网络已经包含照片分类常用的特征。但是,预训练模型的最终分类部分特定于原始分类任务,随后特定于用来训练模型的类别集。
  • 微调:将冻结模型库的一些顶层取消冻结,并联合训练新添加的分类器层和基本模型的最后一层。这使我们能够“微调”基本模型中较高级的特征表示法,使其与特定任务更加相关。

特征提取的训练速度更快,但您可以通过微调获得更好的结果。

您将使用两种不同的迁移学习方法来尝试这两种方法(特征提取和微调):

  • TensorFlow Lite Model Maker 库可自动完成大部分数据流水线和模型创建工作,让您更轻松地完成此过程。生成的模型还可以轻松导出,以便在移动设备和浏览器中使用。
  • TensorFlow Hub 模型利用了 TensorFlow Hub 中提供的大量机器学习模型库。研究人员和社区贡献了这些模型,让先进的模型能够以更加快速、更加多样化的方式提供给大家。

3. 使用 Model Maker 进行迁移学习

现在,您已了解迁移学习背后的理念,接下来,我们开始使用 TensorFlow Lite Model Maker 库,它是一种有助于轻松进行迁移学习的工具。

TensorFlow Lite Model Maker 库是一个开源库,可简化迁移学习的过程,并使该过程对非机器学习开发者(例如移动设备和 Web 开发者)而言更容易完成。

Colab 笔记本将引导您完成以下步骤:

  • 加载数据。
  • 拆分数据。
  • 创建和训练模型。
  • 评估模型。
  • 导出模型。

完成此步骤后,您就可以按照相同的过程开始使用自己的数据进行迁移学习了。

Colaboratory

接下来,前往 Google Colab 训练自定义模型。

您大约需要花费 15 分钟来浏览说明并了解笔记本的基础知识。

优点

  • 自定义模型的简单方法。
  • 无需了解 TensorFlow 或 Keras API。
  • 开源工具(如果用户需要一些尚未实现的特定功能,则可以更改该工具)。
  • 直接导出模型,以便在移动设备或浏览器中执行。

缺点

  • 与自行构建完整流水线和模型相比,使用上述两种方法的配置可能性较低
  • 并非所有模型都可以用作基本模型,即使选择基本模型也是如此。
  • 不适用于数据流水线较为复杂的大量数据。

4. 在 TensorFlow Hub 上查找模型

学完此部分后,您将能够:

  • 在 TensorFlow Hub 中查找机器学习模型。
  • 了解集合。
  • 了解不同类型的模型。

如需进行迁移学习,您需要先准备好两件事物:

  • 数据(例如,您要识别的主题中的图片)。
  • 基本模型(您可以根据自己的数据自定义该模型)。

数据部分通常取决于业务,但最简单的途径是拍摄大量您想要识别的照片。但基本模型呢?到哪里找一个?TensorFlow Hub 可以助您一臂之力。

TensorFlow Hub 是满足您的 TensorFlow 模型需求的模型库。

您可以搜索和阅读数千个模型(随时可供您使用)的文档,其中有许多模型可用于迁移学习和微调。

搜索模型

我们先简单搜索可在 TensorFlow Hub 中使用的模型,以便稍后在您的代码中使用。

第 1 步:在浏览器中,打开网站 tfhub.dev

tfhub.dev 主页的图片

对于图片领域的迁移学习,我们需要特征向量。特征向量与分类模型类似,但没有分类头。

特征向量可以将图片转换为第 N 个空间中的数字表示法(其中 N 是模型输出层的维度数)。

在 TFHub 中,您可以通过点击特定卡片来专门搜索特征向量。

tfhub.dev 页面的图片,其中包含一个突出显示特征向量任务的方框

您还可以使用左侧的过滤条件搜索模型的名称,以便仅显示 Image feature vectors

这是在主页中选择特征向量任务后 tfhub.dev 搜索页面的图片

带蓝色图标的卡片是模型集合。如果您点击图片集合,则可以使用多种类似模型进行选择。我们选择图片集合。

这是 tfhub.dev 中的图片集合页面

向下滚动,然后选择 MobileNet V3。任何特征向量都可以。

这是从上一页滚动一点后看到的 tfhub.dev 中的图片集合页面

在模型的详情页面上,您可以阅读模型的所有文档、查看试用模型的代码段,甚至可以直接在 Colab 笔记本中试用模型。

mobilenetV3 特征向量模型的详情页面

目前,您只需要顶部的网址。这是模型句柄,也是您可以从 TensorFlow Hub 库轻松访问模型的方式。

5. 使用 TensorFlow Hub 进行迁移学习

现在您已选择一个模型使用,接下来我们使用 KerasLayer 方法从 TensorFlow Hub 库加载该模型来进行自定义。

此方法加载模型时,可将其用作模型的一层,以便您基于此层构建模型。

以前,在您了解如何使用 Model Maker 时,所有内部细节对您都隐藏起来了,以便更易于理解。现在,您会看到 Model Maker 在后台的工作情况。【译注:原英文中的 No 可能是 Now 的笔误】

Colaboratory

接下来,前往 Google Colab 训练自定义模型。

您大约需要花费 20 分钟来浏览说明并了解笔记本的基础知识。

优点

  • 由研究人员和社区贡献的数千个可用模型,这些模型已基于各种数据集进行了训练。
  • 适用于所有任务(例如视觉、文本和音频)的模型。
  • 可以轻松地尝试不同的类似模型。更改基本模型可能只需要更改一个字符串。

缺点

  • 仍然需要具备一些 TensorFlow/Keras 专业知识才能使用这些模型。

如果您想更深入地进行迁移学习,还可以使用 Keras 应用进行迁移学习。此过程与使用 TensorFlow Hub 非常相似,但只有核心 TensorFlow API。

6. 恭喜

恭喜,您已了解什么是迁移学习以及如何将其应用于您自己的数据!

在此 Codelab 中,您了解了如何使用名为迁移学习的技术来根据您自己的数据自定义机器学习模型

您尝试了两种形式的迁移学习:

  • 使用 TensorFlow Lite Model Maker 等工具。
  • 使用 TensorFlow Hub 中的特征向量。

这两种方案各有优缺点,并且提供了多种可能的配置来满足您的特定需求

您还了解到可以进一步通过稍微调整权重来微调模型,以便更好地适应您的数据。

这两种方案都可以对模型进行微调。

迁移学习和微调不仅仅适用于图片相关模型。由于迁移学习的理念是使用学到的领域表示法来适应您的数据集,因此它还可以用于文本和音频领域。

后续步骤

  • 使用您自己的数据尝试一下。
  • 与我们分享您构建的内容,并在社交媒体上为您的项目添加 TensorFlow 标签。

了解详情

有疑问?