提交 7a10ac67 编写于 作者: W wizardforcel

2020-12-09 20:35:11

上级 725f4847
......@@ -76,7 +76,7 @@ Gartner 的一份报告指出:“*微软对未来具有独特的愿景,涉
在 2018 年,Google 通过其 GCP 产品将打破了享誉全球的 Gartner 领导者象限,仅加入了 AWS 和 Azure 的独家俱乐部。 在 2019 年,GCP 与两个激烈的竞争对手保持在同一象限。 但是,就市场份额而言,GCP 仅排在第三位。
他们最近加强了销售人员,他们有足够的财力,并且有强烈的动机要不落伍,所以不要打折扣。
他们最近加强了销售人员,他们有足够的财力,并且有强烈的动机要不落伍,所以不要折扣扣。
Google 作为机器学习领导者的声誉无可争议,因此 GCP 拥有强大的大数据和机器学习产品也就不足为奇了。 但是 GCP 也在取得进展,吸引了较大的企业,这些企业希望托管诸如 SAP 和其他传统**客户关系管理****CRM**)系统之类的传统工作负载。
......
......@@ -6,11 +6,11 @@
根据 Wikipedia 的说法,“ Raspberry Pi 是 Raspberry Pi 基金会在英国开发的一系列小型单板计算机,旨在促进学校和发展中国家的基础计算机科学教学。” [Raspberry Pi 的官方网站](https://www.raspberrypi.org)将其描述为“一种小型且价格合理的计算机,可以用来学习编程。” 如果您以前从未听说过或使用过 Raspberry Pi,请访问其网站,然后您很快就会爱上这个很棒的小东西。 几乎没有什么功能-实际上,TensorFlow 的开发人员从 2016 年中期开始在早期版本的 Raspberry Pi 上提供了 TensorFlow,因此我们可以在微型计算机上运行复杂的 TensorFlow 模型,您只需花费 35 美元即可购买到。 这可能超出了“基础计算机科学的教学”或“学习编程”的范围,但另一方面,如果我们考虑过去几年中移动设备的所有飞速发展,那么看到这一点我们就不会感到惊讶 如何在越来越小的设备中实现越来越多的功能。
在本章中,我们将进入 Raspberry Pi 的有趣世界,Raspberry Pi 是 TensorFlow 正式支持的最小设备。 我们将首先介绍如何获取和设置新的 Raspberry Pi 3 B 板,包括本章中使用的所有必要配件,以使其能够看,听和说。 然后,我们将介绍如何使用 [GoPiGo 机器人基础套件](https://www.dexterindustries.com/shop/gopigo3-robot-base-kit),将 Raspberry Pi 板变成一个可以移动的机器人。 之后,我们将提供最简单的工作步骤,以便在 Raspberry Pi 上设置 TensorFlow 1.6 并构建其示例 Raspberry Pi 应用程序。 我们还将讨论如何集成图像分类,这是我们在第 2 章,“通过迁移学习对图像进行分类”时使用的模型,并通过文字转语音功能使机器人告诉我们它可以识别的内容 以及如何集成音频识别,这是我们在第 5 章,“了解简单语音命令”中使用的模型以及 GoPiGo API,可让您使用语音命令来控制机器人的运动 。
在本章中,我们将进入 Raspberry Pi 的有趣世界,Raspberry Pi 是 TensorFlow 正式支持的最小设备。 我们将首先介绍如何获取和设置新的 Raspberry Pi 3B 板,包括本章中使用的所有必要配件,以使其能够看,听和说。 然后,我们将介绍如何使用 [GoPiGo 机器人基础套件](https://www.dexterindustries.com/shop/gopigo3-robot-base-kit),将 Raspberry Pi 板变成一个可以移动的机器人。 之后,我们将提供最简单的工作步骤,以便在 Raspberry Pi 上设置 TensorFlow 1.6 并构建其示例 Raspberry Pi 应用程序。 我们还将讨论如何集成图像分类,这是我们在第 2 章,“通过迁移学习对图像进行分类”时使用的模型,并通过文字转语音功能使机器人告诉我们它可以识别的内容 以及如何集成音频识别,这是我们在第 5 章,“了解简单语音命令”中使用的模型以及 GoPiGo API,可让您使用语音命令来控制机器人的运动 。
最后,我们将向您展示如何使用 TensorFlow 和 OpenAI Gym,这是一个用于开发和比较强化学习算法的 Python 工具包,如何在模拟环境中实现强大的强化学习算法,以使我们的机器人能够在真实的身体中移动和平衡 环境。
在 Google I/O 2016 中,有一个名为*的会话,该会话如何使用 Cloud Vision 和 Speech API* 构建智能的 RasPi Bot(您可以在 YouTube 上观看视频)。 它使用 Google 的 Cloud API 执行图像分类以及语音识别和合成。 在本章中,我们将了解如何在设备上离线实现演示中的任务以及增强学习,从而展示 TensorFlow 在 Raspberry Pi 上的强大功能。
在 Google I/O 2016 中,有一个名为“如何使用 Cloud Vision 和 Speech API 构建智能的 RasPi Bot”的会话(您可以在 YouTube 上观看视频)。 它使用 Google 的 Cloud API 执行图像分类以及语音识别和合成。 在本章中,我们将了解如何在设备上离线实现演示中的任务以及增强学习,从而展示 TensorFlow 在 Raspberry Pi 上的强大功能。
总而言之,我们将在本章中涵盖以下主题,以构建一个可以移动,看到,聆听,说话和学习的机器人:
......@@ -62,14 +62,14 @@ There's an older blog, *How to build a robot that “sees” with $100 and Tenso
现在弹出 MicroSD 卡并将其插入 Raspberry Pi 板上。 将显示器的 HDMI 电缆以及 USB 键盘和鼠标连接到开发板上。 用电源为开发板供电,然后按照屏幕上的步骤完成 Raspbian 的安装,包括设置 Wifi 网络。 整个安装过程不到一个小时即可完成。 完成后,您可以打开一个终端并输入`ifconfig`来查找电路板的 IP 地址,然后从您的计算中使用`ssh pi@<board_ip_address>`来访问它,正如我们稍后将要看到的,这确实很方便并且需要 在移动中测试控制 Raspberry Pi 机器人-当移动时,您不想或不能将键盘,鼠标和显示器与板子一起使用。
但是默认情况下未启用 SSH,因此,当您首次尝试 SSH 到 Pi 板上时,会出现“ SSH 连接被拒绝”错误。 启用它的最快方法是运行以下两个命令:
但是默认情况下未启用 SSH,因此,当您首次尝试 SSH 到 Pi 板上时,会出现“SSH 连接被拒绝”错误。 启用它的最快方法是运行以下两个命令:
```py
sudo systemctl enable ssh
sudo systemctl start ssh
```
之后,您可以使用`pi`登录的默认密码 ssh 进行登录。 当然,您可以使用`passwd`命令将默认密码更改为新密码。
之后,您可以使用`pi`登录的默认密码`ssh`进行登录。 当然,您可以使用`passwd`命令将默认密码更改为新密码。
现在我们已经安装了 Raspbian,让我们将 USB 迷你麦克风,USB 迷你扬声器和迷你相机插入 Pi 板上。 USB 麦克风和扬声器均可即插即用。 插入它们后,您可以使用`aplay -l`命令找出支持的音频播放设备:
......@@ -202,13 +202,13 @@ gpg3_obj.turn_degrees(30, False)
要在 Python 中使用 TensorFlow,就像我们稍后在*音频识别**强化学习*部分中所做的那样,我们可以在 TensorFlow Jenkins 持续集成站点上为 Pi 安装[每晚 TensorFlow 1.6 版本](http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts)
要在 Python 中使用 TensorFlow,就像我们稍后在“音频识别”和“强化学习”部分中所做的那样,我们可以在 TensorFlow Jenkins 持续集成站点上为 Pi 安装[每晚 TensorFlow 1.6 版本](http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts)
```py
sudo pip install http://ci.tensorflow.org/view/Nightly/job/nightly-pi/lastSuccessfulBuild/artifact/output-artifacts/tensorflow-1.6.0-cp27-none-any.whl
```
此方法更为常见,并在一个不错的博客条目中描述,[《为 Raspberry Pi 交叉编译 TensorFlow》](https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi),作者是 *Pete Warden*
此方法更为常见,并在一个不错的博客条目中描述,[《为 Raspberry Pi 交叉编译 TensorFlow》](https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi),作者是 Pete Warden
一种更复杂的方法是使用`makefile`,这在您需要构建和使用 TensorFlow 库时是必需的。 [TensorFlow 官方 makefile 文档](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile)的 Raspberry Pi 部分包含构建 TensorFlow 库的详细步骤,但是它 可能不适用于每个版本的 TensorFlow。 此处的步骤与 TensorFlow 的早期版本(0.10)完美配合,但是在 TensorFlow 1.6 中会导致许多“未定义对`google::protobuf`的引用”错误。
......@@ -356,7 +356,7 @@ tensorflow/contrib/pi_examples/camera/gen/bin/camera
tensorflow/contrib/pi_examples/camera/gen/bin/camera | xargs -n 1 flite -t
```
您可能会听到太多声音。 要微调图像分类的 TTS 结果,还可以在使用`make -f tensorflow/contrib/pi_examples/camera/Makefile`重建示例之前,修改 camera.cc 文件并将以下代码添加到`PrintTopLabels`函数中:
您可能会听到太多声音。 要微调图像分类的 TTS 结果,还可以在使用`make -f tensorflow/contrib/pi_examples/camera/Makefile`重建示例之前,修改`camera.cc`文件并将以下代码添加到`PrintTopLabels`函数中:
```py
std::string cmd = "flite -voice rms -t \"";
......@@ -365,7 +365,7 @@ cmd.append("\"");
system(cmd.c_str());
```
现在,我们已经完成了 *如何使用 Cloud Vision 和 Speech API 演示*来构建智能 RasPi Bot 的图像分类和语音合成任务,而不使用任何 Cloud API。 使用我们在第 5 章,“了解简单语音命令”中使用的相同模型,在 Raspberry Pi 上进行音频识别。
现在,我们已经完成了“如何使用 Cloud Vision 和 Speech API 来构建智能 RasPi Bot 演示”的图像分类和语音合成任务,而不使用任何 Cloud API。 使用我们在第 5 章,“了解简单语音命令”中使用的相同模型,在 Raspberry Pi 上进行音频识别。
......@@ -375,7 +375,7 @@ system(cmd.c_str());
要使用 TensorFlow 教程中的[预训练音频识别模型](https://www.tensorflow.org/tutorials/audio_recognition)或我们之前描述的重新训练模型,我们将重用来自[这个页面](https://gist.github.com/aallan)的 Python 脚本`listen.py`,并在识别四个基本音频命令后添加 GoPiGo API 调用以控制机器人的运动:“左”,“右”,“去” ,”和“停止”。 预训练模型支持的其他六个命令-“是”,“否”,“向上”,“向下”,“打开”和“关闭”,在我们的示例中不太适用,如果需要 ,您可以使用第 5 章 , “了解简单语音命令”中所示的重新训练模型,以支持针对特定任务的其他语音命令。
要使用 TensorFlow 教程中的[预训练音频识别模型](https://www.tensorflow.org/tutorials/audio_recognition)或我们之前描述的重新训练模型,我们将重用来自[这个页面](https://gist.github.com/aallan)的 Python 脚本`listen.py`,并在识别四个基本音频命令后添加 GoPiGo API 调用以控制机器人的运动:`"left", "right", "go", "stop"`。 预训练模型支持的其他六个命令-`"yes", "no", "up", "down", "on", "off"`,在我们的示例中不太适用,如果需要 ,您可以使用第 5 章 , “了解简单语音命令”中所示的重新训练模型,以支持针对特定任务的其他语音命令。
要运行脚本,请先从[这里](http://download.tensorflow.org/models/speech_commands_v0.01.zip)下载预训练的音频识别模型,然后将其解压缩到`/tmp`,或者对我们在第 5 章“了解简单语音命令”中使用的模型使用`scp`到 Pi 板的`/tmp`目录,然后运行:
......@@ -444,7 +444,7 @@ if current_top_score > self.detection_threshold_ and time_since_last_top > self.
gpg3_obj.stop()
```
现在 p 将您的 Raspberry Pi 机器人放在地面上,从计算机上用`ssh`连接到它,然后运行以下脚本:
现在将您的 Raspberry Pi 机器人放在地面上,从计算机上用`ssh`连接到它,然后运行以下脚本:
```py
python listen.py --graph /tmp/conv_actions_frozen.pb --labels /tmp/conv_actions_labels.txt -I plughw:1,0 --detection_threshold 0.5
......@@ -494,7 +494,7 @@ cd gym
sudo pip install -e .
```
您可以通过运行`pip list`来验证是否已安装 TensorFlow 1.6 和 Gym(*在 Raspberry Pi 上设置 TensorFlow 的最后一部分*部分介绍了如何安装 TensorFlow 1.6):
您可以通过运行`pip list`来验证是否已安装 TensorFlow 1.6 和 Gym(“在 Raspberry Pi 上设置 TensorFlow”的最后部分介绍了如何安装 TensorFlow 1.6):
```py
pi@raspberrypi:~ $ pip list
......@@ -703,8 +703,7 @@ print(np.mean(total_rewards))
# 9.36
```
因此,所有 1,000 集的平均奖励约为 10。请注意, `env.action_space.sample()`对 0 或 1 动作进行采样,与随机输出 0 或 1 相同。您可以通过评估
[ `np.sum([env.action_space.sample() for _ in range(10000)])`,应该接近 5,000。
因此,所有 1,000 集的平均奖励约为 10。请注意, `env.action_space.sample()`对 0 或 1 动作进行采样,与随机输出 0 或 1 相同。您可以通过评估`np.sum([env.action_space.sample() for _ in range(10000)])`,应该接近 5,000。
要查看其他策略如何更好地工作,让我们使用一个简单直观的策略,当极数度数为正(在垂直方向的右侧)时执行 1 动作(向右移动购物车),然后执行 0(将购物车向右移动) 当极数度数为负时(在垂直方向的左侧)。 这项政策是有道理的,因为我们可能会采取尽可能长时间保持平衡的措施:
......@@ -846,7 +845,7 @@ with tf.Session() as sess:
策略梯度的基本思想是,为了训练神经工作以生成更好的策略,当所有代理从环境中知道的都是从任何给定状态采取行动时所能获得的奖励(这意味着我们不能 使用监督学习进行训练),我们可以采用两种新机制:
* 折扣奖励:每个动作的价值都需要考虑其未来动作的奖励。 例如,一个动作获得立即奖励 1,但是在两个动作(步骤)之后结束情节的长期奖励应该比获得立即奖励 1 但在 10 个步骤之后结束情节的动作具有较少的长期奖励。 动作的折现奖励的典型公式是其立即奖励加上其每个未来奖励的倍数和由未来步骤提供动力的折现率的总和。 因此,如果一个动作序列在剧集结束前有 1、1、1、1、1 个奖励,则第一个动作的折扣奖励为 *1+(1 * discount_rate)+(1 * discount_rate ** 2) +(1 ** *折扣率** 3)+(1 *折扣率** 4)*
* 折扣奖励:每个动作的价值都需要考虑其未来动作的奖励。 例如,一个动作获得立即奖励 1,但是在两个动作(步骤)之后结束情节的长期奖励应该比获得立即奖励 1 但在 10 个步骤之后结束情节的动作具有较少的长期奖励。 动作的折现奖励的典型公式是其立即奖励加上其每个未来奖励的倍数和由未来步骤提供动力的折现率的总和。 因此,如果一个动作序列在剧集结束前有 1、1、1、1、1 个奖励,则第一个动作的折扣奖励为`1+(1*discount_rate)+(1*discount_rate**2)+(1*discount_rate**3)+(1*discount_rate**4)`
* 测试运行当前策略,查看哪些操作导致较高的折扣奖励,然后使用折扣奖励更新当前策略的梯度(权重损失),以使具有较高折扣奖励的操作在网络更新后, 下次被选中的可能性更高。 重复这样的测试运行并多次更新该过程,以训练神经网络以获得更好的策略。
......@@ -867,7 +866,7 @@ def normalized_discounted_rewards(rewards):
return (dr - dr.mean()) / dr.std()
```
例如,如果 discount_rate 为 0.95,则奖励列表[1,1,1]中第一个动作的折扣奖励为 1 + 1 * 0.95 + 1 * 0.95 ** 2 = 2.8525,并且折扣奖励 第二和最后一个元素是 1.95 和 1; 奖励列表[1,1,1,1,1]中第一个动作的打折奖励为 1 + 1 * 0.95 + 1 * 0.95 ** 2 + 1 * 0.95 ** 3 + 1 * 0.95 ** 4 = 4.5244,其余动作为 3.7099、2.8525、1.95 和 1 。 [1,1,1]和[1,1,1,1,1]的归一化贴现奖励为[1.2141,0.0209,-1.2350]和 [1.3777, 0.7242 , 0.0362,-0.6879,-1.4502]。 每个规范化的打折清单按降序排列,这意味着动作持续的时间越长(在情节结束之前),其奖励就越大。
例如,如果`discount_rate`为 0.95,则奖励列表[1,1,1]中第一个动作的折扣奖励为`1 + 1 * 0.95 + 1 * 0.95 ** 2 = 2.8525`,并且折扣奖励 第二和最后一个元素是 1.95 和 1; 奖励列表`[1,1,1,1,1]`中第一个动作的折扣奖励为`1 + 1 * 0.95 + 1 * 0.95 ** 2 + 1 * 0.95 ** 3 + 1 * 0.95 ** 4 = 4.5244`,其余动作为 3.7099、2.8525、1.95 和 1 。` [1,1,1]``[1,1,1,1,1]`的归一化折扣奖励为`[1.2141, 0.0209, -1.2350]``[1.3777, 0.7242, 0.0362, -0.6879, -1.4502]`。 每个规范化的折扣清单按降序排列,这意味着动作持续的时间越长(在情节结束之前),其奖励就越大。
接下来,创建 CartPole 体育馆环境,定义`learning_rate``discount_rate`超参数,并像以前一样使用四个输入神经元,四个隐藏神经元和一个输出神经元构建网络:
......@@ -920,7 +919,7 @@ training_op = optimizer.apply_gradients(gvs_feed)
<tf.Variable 'dense_1/bias:0' shape=(1,) dtype=float32_ref>)]
```
请注意,kernel 只是权重的另一个名称,`(4, 4)`,(4,),`(4, 1)`和(1,)是权重的形状和对第一个(输入到隐藏)和 第二层(隐藏到输出)。 如果您从 iPython 多次运行脚本,则`tf`对象的默认图形将包含先前运行的可训练变量,因此,除非调用`tf.reset_default_graph()`,否则需要使用`gvs = [(g, v) for g, v in gvs if g != None]`删除那些过时的训练变量, 将返回 None 渐变(有关`computer_gradients`的更多信息,请参见[这里](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer#compute_gradients))。
请注意,`kernel`只是权重的另一个名称,`(4, 4)``(4, )``(4, 1)``(1, )`是权重的形状和对第一个(输入到隐藏)和 第二层(隐藏到输出)。 如果您从 iPython 多次运行脚本,则`tf`对象的默认图形将包含先前运行的可训练变量,因此,除非调用`tf.reset_default_graph()`,否则需要使用`gvs = [(g, v) for g, v in gvs if g != None]`删除那些过时的训练变量, 将返回 None 渐变(有关`computer_gradients`的更多信息,请参见[这里](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer#compute_gradients))。
现在,玩一些游戏并保存奖励和渐变值:
......@@ -1040,6 +1039,6 @@ pi@raspberrypi:~/mobiletf/ch12 $ python nn_pg.py
如果您想使用 TensorFlow 或 Keras 构建自己的出色模型,实现最令您兴奋的算法和网络,则需要在本书结束后继续学习,因为我们没有详细介绍如何做到这一点, 但希望我们能激发您足够的动力来开始这一旅程,并从书中获得保证,一旦您构建并训练了模型,便知道如何快速,随时随地在移动设备上部署和运行它们。
关于走哪条路和要解决哪些 AI 任务,伊恩·古德费洛(Ian Goodfellow)在接受安德鲁·伍(Andrew Ng)采访时的建议可能是最好的:*问问自己,下一步做什么是最好的,哪条是最适合的 采取:强化学习,无监督学习或生成对抗网络*。 无论如何,这将是一条充满兴奋的绝妙之路,当然还要有艰苦的工作,而您从本书中学到的技能就像您的智能手机一样,随时可以为您服务,并准备好 您将使您的甜蜜而聪明的小设备变得更加甜蜜和智能。
关于走哪条路和要解决哪些 AI 任务,Ian Goodfellow 在接受 Andrew Ng 采访时的建议可能是最好的:“问问自己,下一步做什么是最好的,选取哪条路是最适合的:强化学习,无监督学习或生成对抗网络”。 无论如何,这将是一条充满兴奋的绝妙之路,当然还要有艰苦的工作,而您从本书中学到的技能就像您的智能手机一样,随时可以为您服务,并准备好 您将使您的甜蜜而聪明的小设备变得更加甜蜜和智能。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册