arrow_back

TensorFlow:Qwik Start

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

TensorFlow:Qwik Start

实验 45 分钟 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

GSP637

Google Cloud 自定进度实验

概览

在本实验中,您将了解机器学习的基本“Hello World”应用,在此过程中,您不是使用 Java 或 C++ 等语言编写明确的规则,而是构建一个使用数据进行训练的系统,以推断用来确定数字之间关系的规则。

目标

在本实验中,您将学习如何完成以下操作:

  • 在 Jupyter 笔记本中设置开发环境
  • 设计机器学习模型
  • 训练神经网络
  • 测试模型

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭据,让您可以在实验规定的时间内用来登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:如果您已有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。

简介

请考虑以下问题:您要构建一个能够识别运动状态的健身跟踪系统。您也许能获取用户的移动速度,并尝试使用以下条件,根据该速度推断用户的运动状态:

if(speed<4){ status=WALKING; }
  • 您可以增加一个条件来检测跑步运动:
if(speed<4){ status=WALKING; } else { status=RUNNING; }
  • 同样,您也可以再增加一个条件来检测骑车运动:
if(speed<4){ status=WALKING; } else if(speed<12){ status=RUNNING; } else { status=BIKING; }
  • 现在考虑一下,如果您还想检测高尔夫运动,该怎么做?您就不太确定该如何创建规则来确定这类运动了。
// 接下来该怎么做呢?

如果要编写一个帮助检测高尔夫运动的程序(用代码实现),您会发现这极其困难。

那怎么办呢?使用机器学习可以解决这个问题!

什么是机器学习?

在上一部分,您在尝试确定用户的健身运动时遇到了一个问题。要检测高尔夫这类运动,条件必然更加复杂,因而您必须编写更多代码,甚至殚精竭虑也难以实现。

参考下图,想一想按照传统方式是怎样构建应用的:

图表:展示在传统编程中输入规则和数据,然后输出答案的流程

您一般会使用一种编程语言来表达规则。程序会按照这些规则来处理数据,然后提供答案。就运动检测而言,程序按照您编写的代码所定义的规则(用于确定运动类型)来处理数据(用户的移动速度),从而得出答案,也就是用于确定用户运动状态(步行、跑步、骑车等)的函数的返回值。

通过机器学习检测这类运动的过程与传统编程十分相似,但数据处理方式有所不同:

图表:展示在机器学习中输入答案和数据,然后输出规则的流程

您无需尝试定义规则,也不需要通过编程语言来表达规则,只需将答案(通常称为标签)和数据一起提供给机器学习模型。然后,机器就会推断出确定答案与数据之间关系的规则。例如,在机器学习中,运动检测场景可能如下所示:

步行、跑步、骑车和高尔夫四个标签以 0 和 1 的形式显示

您只需收集大量数据,并为其添加标签,有效地说明“什么情况下是步行状态”“什么情况下是跑步状态”等等。然后,计算机就可以根据这些数据推断出规则,用以确定代表特定运动的独特模式。

除了能在这些场景下代替编程,机器学习还支持对高尔夫等新场景的判断,这在基于规则的传统编程方法下可能无法实现。

在传统编程中,代码会编译为一个二进制文件(通常称为程序)。在机器学习中,根据数据和标签创建的项目称为模型。

因此,如果回到此图表:

图表:展示在机器学习中输入答案和数据,然后输出规则的流程

将上述结果视为一个模型,它在运行时的使用方式如下:

图表:展示在模型中输入数据,然后输出预测的流程

您要向模型传递一些数据,基于这些数据,模型会利用通过训练推断出的规则来生成预测,比如说“这样的数据看起来像是在步行”“那样的数据看起来像是在骑车”等等。

在本实验中,您将构建一个非常简单的“Hello World”模型,该模型由可用于任何机器学习场景的基础组件构成!

任务 1. 在 Vertex AI Workbench 中打开笔记本

  1. 在 Google Cloud 控制台的导航菜单中依次点击 Vertex AI > Workbench

  2. 找到 实例,然后点击 Open JupyterLab(打开 JupyterLab)按钮。

Workbench 实例的 JupyterLab 界面会在新浏览器标签页中打开。

安装 TensorFlow 和其他软件包

  1. 在“启动器”菜单的其他下,选择终端

  2. 检查是否已配置 Python 环境。复制以下命令并粘贴到终端中。

python --version

输出示例:

Python 3.10.14
  1. 运行以下命令以安装 TensorFlow 软件包。
pip3 install tensorflow
  1. 如需升级 pip3,请在终端运行以下命令。
pip3 install --upgrade pip

Pylint 是一款用于检查 Python 代码错误的工具,它可以突出显示 Python 源代码中的语法和格式问题。

  1. 运行以下命令以安装 pylint 软件包。
pip install -U pylint --user
  1. 安装 requirements.txt 文件中所列的实验所需软件包:
pip install -r requirements.txt

现在,您的环境已设置完毕!

任务 2. 创建您的首个机器学习模型

看看下面几组数字。您能看出它们之间的关系吗?

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

从左往右看,请注意 X 值依次增加了 1,对应的 Y 值依次增加了 3。因此,它们之间的关系应是 Y = 3X 再加/减某个值。

接下来再看,当 X 值为 0,对应的 Y 值为 1。

根据这两项观察结果,您可以确定它们之间的关系为 Y = 3X + 1

这基本上就是使用代码来训练模型(称为神经网络),从而找出数据中的规律的方式。

如果您要使用数据来训练神经网络,只需向神经网络提供一组 X 值和一组 Y 值,它应该就能找出这些数值之间的关系。

创建新笔记本并导入库

  1. 点击 Workbench 左侧的 + 图标以打开新的启动器。

  2. 在“启动器”菜单的笔记本下,选择 Python3

新的笔记本文件

系统会显示一个新的 Jupyter 笔记本。如需详细了解如何使用 Jupyter 笔记本,请参阅 Jupyter 笔记本文档

  1. 为 Cloud Logging 导入并配置 logginggoogle-cloud-logging在第一个单元中,添加以下代码:
import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler())
  1. 导入 tensorflow 以训练和评估模型。为了便于使用,将其命名为 tf。在第一个单元中添加以下代码。
# Import TensorFlow import tensorflow as tf
  1. 导入 numpy 来解析数据,以进行调试。为了便于使用,将其命名为 np。在第一个单元中添加以下代码。
# Import numpy import numpy as np
  1. 如需运行该单元,请点击运行按钮或按 Shift + Enter

  2. 保存笔记本。依次点击文件 -> 保存。将该文件命名为 model.ipynb,然后点击确定

注意:您可以忽略输出中可能出现的任何警告。

准备数据

接下来,您将准备要用来训练模型的数据。在本实验中,您将使用之前用过的 6 个 X 值和 6 个 Y 值:

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

可以看出,X 值和 Y 值之间的关系是 Y = 3X + 1,因此当 X = 1 时 Y = 4,以此类推。

名为 numpy 的 python 库提供了许多数组类型的数据结构,这些结构实际上是提供数据的标准方式。如要使用这些结构,可以使用 np.array([]) 将相关值指定为 numpy 中的数组

  1. 第二个单元中,添加以下代码:
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

设计模型

在此部分中,您将使用 TensorFlow 设计模型。

您将使用一种称为“神经网络”的机器学习算法来训练模型。您将创建最简单的神经网络,该网络的结构只有 1 层,其中有 1 个神经元。该神经网络一次只能输入一个值,因此输入形状必须为 [1]。

注意:您将在此挑战任务的后续实验中详细了解神经网络。
  1. 第二个单元中,添加以下代码:
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])

编译模型

接下来,您将编写代码来编译神经网络。编写代码时,必须指定 2 个函数:一个 loss 和一个 optimizer

如果您学习过很多与机器学习相关的数学知识,一般来说在这里可以用到,不过,tf.keras 已经封装了相关的数学计算函数。

  • 根据先前的观察,您知道了这些数字之间的关系为 Y = 3X + 1

  • 当计算机尝试学习这种关系时,先猜测的关系可能是 Y = 10X + 10loss 函数会将猜测的答案与已知的正确答案进行比较,并衡量猜测的正确度。

注意:如需详细了解 tf.keras 中不同类型的 loss 函数,请参阅“模块:tf.keras.losses”文档
  • 接下来,模型会使用 optimizer 函数再次进行猜测。该函数会根据 loss 函数的结果,尝试最大限度降低损失。此时,模型可能会得出类似于 Y = 5X + 5 的答案。虽然这仍不正确,但更接近正确的结果了,也就是说,损失降低了。
注意:如需详细了解 tf.keras 中不同类型的 optimizer 函数,请参阅“模块:tf.keras.optimizers”文档
  • 模型会根据您指定的周期数,重复上述过程。
  1. 第二个单元中添加以下代码:
model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError())

在上面的代码段中,您告诉模型 loss 函数使用 mean_squared_error,optimizer 函数使用 stochastic gradient descent (sgd)。您目前还不需要理解这些函数的数学原理,但您会发现它们能达到目的!

注意:随着时间的推移,您将了解适用于不同场景的 loss 和 optimizer 函数。

训练神经网络

为了训练神经网络来“学习”X 值和 Y 值之间的关系,您将使用 model.fit

此函数将通过循环来训练模型,在一次循环中,模型将进行猜测,再衡量猜测结果的准确度(即损失),然后使用优化器 (optimizer) 再进行一次猜测,以此类推。模型会根据您指定的周期数(本实验中为 500),重复执行这一过程。

  1. 第二个单元中添加以下代码:
model.fit(xs, ys, epochs=500)

根据上面的代码,model.fit 将对模型进行固定周期数的训练。

注意:如需详细了解 model.fit,请参阅“tf.keras.Model”文档中的“fit”部分

现在,您的文件应如下所示(请注意,这包括两个单元中的代码):

import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler()) import tensorflow as tf import numpy as np xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float) model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])]) model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError()) model.fit(xs, ys, epochs=500)

运行代码

您的脚本已准备就绪!运行脚本,看看会发生什么情况。

  1. 点击运行按钮或按 Shift + Enter,以运行笔记本中的第二个单元。

  2. 查看输出。请注意,该脚本会输出每个周期的损失。您的输出可能与下面显示的内容略有不同。

注意:值中带有 e- 的数字是以科学记数法显示的,其指数为负数。

滚动浏览各个周期,您会看到前几个周期的损失很大,但是在逐步减小。例如:

显示各周期损失的几行内容,这些损失逐渐减小。第 2 行的周期损失为 52.1992,而第 9 行为 9.7403

随着训练的进行,损失变得非常小:

第 45 行的周期损失为 0.0023,而第 54 行为 7.1057e-04

到训练完成时,损失变得极其小,这表明我们的模型能够很准确地推断数字之间的关系:

第 495 行的周期损失为 5.4194e-08,而第 500 行为 4.8896e-08

您可能不需要训练完 500 个周期,可以尝试设置不同的值。从这个例子来看,仅过了 50 个周期,损失就变得非常小了,所以这可能已经足够了!

点击“检查我的进度”以验证是否完成了以下目标:创建机器学习模型

使用模型

现在,您的模型已经完成学习 X 值和 Y 值之间关系的训练。

您可以使用 model.predict 方法,针对模型之前在训练期间未曾遇到过的 X 值预测对应的 Y 值。例如,如果 X = 10,您认为 Y 值会是多少?

  1. 第三个单元中添加以下代码以进行预测:
cloud_logger.info(str(model.predict(np.array([10.0])))) 注意:您的预测结果将传递给 cloud_logger,以便生成可以检查进度的 Cloud 日志。
  1. Ctrl + s 或依次点击文件 -> 保存,保存笔记本。

  2. 点击运行按钮或按 Shift + Enter,运行第三个单元。

Y 值将在训练日志(周期记录)之后列出。

输出示例:

Y 值为 31.005917

您可能认为 Y = 31,对吧?但结果略大一些 (31.005917)。您觉得这是为什么?

答案:神经网络处理的是概率问题。它计算出 X 和 Y 之间的关系极有可能是 Y = 3X + 1,但由于只有 6 个数据点,无法确定这种关系是否准确。因此,针对 X 为 10 计算出的结果会很接近 31,但不一定是 31。

在使用神经网络时,您会发现这种模式经常会出现。您要处理的几乎都是概率问题而非确定性问题,您需要编写一些代码,根据概率来确定结果,执行分类任务时更是如此。

点击“检查我的进度”以验证是否完成了以下目标:使用模型

恭喜!

恭喜!在本实验中,您使用 TensorFlow 创建、训练并测试了自己的机器学习模型。

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2024 年 9 月 16 日

上次测试实验的时间:2024 年 9 月 16 日

版权所有 2024 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您