arrow_back

TensorFlow:Qwik Start

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!

TensorFlow:Qwik Start

实验 45 分钟 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!

GSP637

概览

在本实验中,您将了解机器学习的基本“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; }
  • 现在考虑一下,如果您还想检测高尔夫运动,该怎么做?您就不太确定该如何创建规则来确定这类运动了。
// 接下来该怎么做呢?

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

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

什么是机器学习?

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

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

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

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

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

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

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

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

因此,如果回到此图表:

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

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

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

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

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

  2. 找到 实例,然后点击打开 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- 的数字是以科学记数法显示的,其指数为负数。

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

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

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

您可能不需要训练完 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,对吧?但结果略大一些 (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 日

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

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

此内容目前不可用

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

太好了!

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

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.