提交 2fec4741 编写于 作者: W wizardforcel

2020-12-28 21:55:25

上级 6c69a587
# 前言
TensorFlow 是用于机器学习以及最近的深度学习的最受欢迎的架构之一。 本书是将 TensorFlow 和 Keras 模型部署到实际应用程序中的指南。
TensorFlow 是用于机器学习以及最近的深度学习的最受欢迎的架构之一。 本书是将 TensorFlow 和 Keras 模型部署到实际应用中的指南。
本书从专门的蓝图开始,说明如何构建可生成预测的应用程序。 随后的每节课程都针对特定类型的模型,例如神经网络,使用 Keras 配置深度学习环境,并着重于三个重要问题,即模型如何工作,如何在示例模型中提高我们的预测准确性以及如何使用实际应用程序评估其性能。
本书从专门的蓝图开始,说明如何构建可生成预测的应用。 随后的每节课程都针对特定类型的模型,例如神经网络,使用 Keras 配置深度学习环境,并着重于三个重要问题,即模型如何工作,如何在示例模型中提高我们的预测准确性以及如何使用实际应用评估其性能。
在本书中,您将学习如何创建一个应用程序,该应用程序可以从深度学习中生成预测。 这项学习之旅从探索神经网络的通用组件及其基本性能开始。 在课程结束时,您将探索使用 TensorFlow 创建的训练有素的神经网络。 在其余的课程中,您将学习建立一个将不同组件组合在一起的深度学习模型,并评估它们在预测中的性能。 最后,我们将能够部署可运行的 Web 应用程序
在本书中,您将学习如何创建一个应用,该应用可以从深度学习中生成预测。 这项学习之旅从探索神经网络的通用组件及其基本性能开始。 在课程结束时,您将探索使用 TensorFlow 创建的训练有素的神经网络。 在其余的课程中,您将学习建立一个将不同组件组合在一起的深度学习模型,并评估它们在预测中的性能。 最后,我们将能够部署可运行的 Web 应用
到本书结尾,您将可以通过创建全新的模型并根据需要更改应用程序的核心组件来创建更准确的预测。
到本书结尾,您将可以通过创建全新的模型并根据需要更改应用的核心组件来创建更准确的预测。
# 这本书涵盖的内容
......@@ -16,7 +16,7 @@ TensorFlow 是用于机器学习以及最近的深度学习的最受欢迎的架
第 3 课,“模型评估和优化”展示了如何评估神经网络模型。 我们将修改网络的超参数以提高其性能。
第 4 课,“产品化”解释了如何将深度学习模型产品化,并提供了如何将模型部署为 Web 应用程序的练习。
第 4 课,“产品化”解释了如何将深度学习模型产品化,并提供了如何将模型部署为 Web 应用的练习。
# 这本书需要什么
......@@ -40,7 +40,7 @@ TensorFlow 是用于机器学习以及最近的深度学习的最受欢迎的架
# 这本书适合谁
本书专为对使用 TensorFlow 和 Keras 开发应用程序感兴趣的开发人员,分析师和数据科学家而设计。 您需要具备编程知识。 我们还假设您熟悉 Python 3 和 Web 应用程序的基本知识。 您还需要对线性代数,概率和统计数据有事先的了解和使用知识。
本书专为对使用 TensorFlow 和 Keras 开发应用感兴趣的开发人员,分析师和数据科学家而设计。 您需要具备编程知识。 我们还假设您熟悉 Python 3 和 Web 应用的基本知识。 您还需要对线性代数,概率和统计数据有事先的了解和使用知识。
# 约定
......
......@@ -25,7 +25,7 @@
受神经科学进步的启发,他们建议创建一个计算机系统,该计算机系统可以重现大脑(人类或其他方式)的工作方式。 其核心思想是作为互连网络工作的计算机系统。 即,具有许多简单组件的系统。 这些组件既可以解释数据,又可以相互影响如何解释数据。 今天仍然保留着相同的核心思想。
深度学习在很大程度上被认为是神经网络的当代研究。 可以将其视为神经网络的当前名称。 主要区别在于,深度学习中使用的神经网络通常比早期的神经网络更大,即具有更多的节点和层。 深度学习算法和应用程序通常需要获得成功的资源,因此使用*深度*一词来强调其大小和大量相互连接的组件。
深度学习在很大程度上被认为是神经网络的当代研究。 可以将其视为神经网络的当前名称。 主要区别在于,深度学习中使用的神经网络通常比早期的神经网络更大,即具有更多的节点和层。 深度学习算法和应用通常需要获得成功的资源,因此使用*深度*一词来强调其大小和大量相互连接的组件。
## 成功的应用
......@@ -59,7 +59,7 @@
* **图像识别**:Facebook 和 Google 使用深度学习模型来识别图像中的实体,并自动将这些实体标记为一组联系人中的人物。 在这两种情况下,都使用先前标记的图像以及目标朋友或联系人的图像来训练网络。 两家公司都报告说,在大多数情况下,这些模型能够以很高的精确度推荐朋友或联系人。
尽管其他行业中有更多示例,但深度学习模型的应用仍处于起步阶段。 还有更多成功的应用程序,包括您创建的应用程序
尽管其他行业中有更多示例,但深度学习模型的应用仍处于起步阶段。 还有更多成功的应用,包括您创建的应用
### 为什么神经网络这么好?
......@@ -97,7 +97,7 @@
* 训练数据可能会过拟合
* 可能缺少训练数据
在的许多实际应用中,简单的神经网络能够以合理的精度近似一个函数。 这些应用程序将成为本书的重点。
在的许多实际应用中,简单的神经网络能够以合理的精度近似一个函数。 这些应用将成为本书的重点。
### 深度学习的局限性
......@@ -183,7 +183,7 @@ TensorFlow 也以其生产组件而闻名。 它随附 [TensorFlow 服务](https
### Keras
为了与 TensorFlow 高效交互,我们将使用 [Keras](https://keras.io/),这是一个具有高级 API 的 Python 软件包,用于开发神经网络。 虽然 TensorFlow 专注于在计算图中彼此交互的组件,但 Keras 专门专注于神经网络。 Keras 使用 TensorFlow 作为其后端引擎,使开发此类应用程序变得更加容易。
为了与 TensorFlow 高效交互,我们将使用 [Keras](https://keras.io/),这是一个具有高级 API 的 Python 软件包,用于开发神经网络。 虽然 TensorFlow 专注于在计算图中彼此交互的组件,但 Keras 专门专注于神经网络。 Keras 使用 TensorFlow 作为其后端引擎,使开发此类应用变得更加容易。
截至 2017 年 11 月(TensorFlow 1.4 版),Keras 作为 TensorFlow 的一部分分发。 在`tf.keras`命名空间下可用。 如果安装了 TensorFlow 1.4 或更高版本,则系统中已经有 Keras 可用。
......@@ -207,7 +207,7 @@ Michael Heydt 的《学习 Pandas》和 Dan Toomey 的《学习 Jupyter》提供
| 组件 | 描述 | 最低版本 |
| --- | --- | --- |
| Python | 通用编程语言。 深度学习应用程序开发中使用的流行语言。 | 3.6 |
| Python | 通用编程语言。 深度学习应用开发中使用的流行语言。 | 3.6 |
| TensorFlow | 开源图计算 Python 软件包,通常用于开发深度学习系统。 | 1.4 |
| Keras | 提供与 TensorFlow 的高级接口的 Python 软件包。 | 2.0.8-tf(随 TensorFlow 一起分发) |
| TensorBoard | 基于浏览器的软件,用于可视化神经网络统计信息。 | 0.4.0 |
......@@ -392,7 +392,7 @@ CIFAR 数据集是机器学习数据集,其中包含按不同类别组织的
我们可以看到,在大约 200 个周期(或步骤)内,网络的准确性超过了 90%。 也就是说,网络正确获取了测试集中 90% 的数字。 在训练到第 2000 步时,网络继续获得准确性,在此期间结束时达到 97% 的准确性。
现在,让我们也测试那些网络在看不见的数据下的性能。 我们将使用 Shafeen Tejani 创建的开源 Web 应用程序来探索受过训练的网络是否正确地预测了我们创建的手写数字。
现在,让我们也测试那些网络在看不见的数据下的性能。 我们将使用 Shafeen Tejani 创建的开源 Web 应用来探索受过训练的网络是否正确地预测了我们创建的手写数字。
###### 使用没见过的数据测试网络表现
......@@ -400,13 +400,13 @@ CIFAR 数据集是机器学习数据集,其中包含按不同类别组织的
![Testing Network Performance with Unseen Data](img/image01_06.jpg)
图 6:Web 应用程序中,我们可以手动绘制数字并测试两个受过训练的网络的准确性
图 6:Web 应用中,我们可以手动绘制数字并测试两个受过训练的网络的准确性
### 注意
[来源](https://github.com/ShafeenTejani/mnist-demo)
在应用程序中,您可以看到两个神经网络的结果。 我们训练过的那个在左边(称为 CNN)。 它能正确分类所有手写数字吗? 尝试在指定区域的边缘绘制编号。 例如,尝试在该区域的右边缘附近绘制数字`1`
在应用中,您可以看到两个神经网络的结果。 我们训练过的那个在左边(称为 CNN)。 它能正确分类所有手写数字吗? 尝试在指定区域的边缘绘制编号。 例如,尝试在该区域的右边缘附近绘制数字`1`
![Testing Network Performance with Unseen Data](img/image01_07.jpg)
......
......@@ -2,7 +2,7 @@
基于“第 1 课”,“神经网络和深度学习简介”的基本概念,我们现在进入一个实际问题:我们可以使用深度学习模型预测比特币价格吗? 在本课程中,我们将学习如何建立尝试这样做的深度学习模型。
我们将通过将所有这些组件放在一起并构建一个简单而完整的深度学习应用程序的第一个版本来结束本课程。
我们将通过将所有这些组件放在一起并构建一个简单而完整的深度学习应用的第一个版本来结束本课程。
# 课程目标
......@@ -97,7 +97,7 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
有关更多信息,请参阅 DeepMind 创建的 DQN,以击败 Atari 游戏。 该算法使用深度强化学习解决方案来不断增加其奖励。 [图片来源](https://keon.io/deep-q-learning/)
| 建筑 | 数据结构 | 成功的应用 |
| 架构 | 数据结构 | 成功的应用 |
| --- | --- | --- |
| 卷积神经网络(CNN) | 网格状的拓扑结构(即图像) | 图像识别与分类 |
| 循环神经网络(RNN)和长短期记忆(LSTM)网络 | 顺序数据(即时间序列数据) | 语音识别,文本生成和翻译 |
......@@ -160,7 +160,7 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
* **我有正确的数据吗?** 这是训练深度学习模型时最困难的挑战。 首先,用数学规则定义问题。 使用精确的定义并按类别(分类问题)或连续规模(回归问题)组织问题。 现在,您如何收集有关这些指标的数据?
* **我有足够的数据吗?** 通常,深度学习算法在大型数据集中表现出比在小型数据集中更好的性能。 了解训练高性能算法所需的数据量取决于您要解决的问题类型,但目的是要收集尽可能多的数据。
* **我可以使用预训练的模型吗?** 如果您要解决的问题是更一般的应用程序的子集(但在同一领域内),请考虑使用预训练的模型。 预训练的模型可以让您抢先解决特定问题的模式,而不是整个领域的更一般特征。 [正式的 TensorFlow 仓库](https://github.com/tensorflow/models)是一个不错的起点。
* **我可以使用预训练的模型吗?** 如果您要解决的问题是更一般的应用的子集(但在同一领域内),请考虑使用预训练的模型。 预训练的模型可以让您抢先解决特定问题的模式,而不是整个领域的更一般特征。 [正式的 TensorFlow 仓库](https://github.com/tensorflow/models)是一个不错的起点。
![Structuring Your Problem](img/Lesson-2-Algorithm.jpg)
......@@ -184,7 +184,7 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
$ jupyter notebook
```
现在,在浏览器中打开应用程序提供的 URL。 您应该能够看到 Jupyter 笔记本页面,其中包含文件系统中的许多目录。
现在,在浏览器中打开应用提供的 URL。 您应该能够看到 Jupyter 笔记本页面,其中包含文件系统中的许多目录。
您应该看到以下输出:
......@@ -192,7 +192,7 @@ $ jupyter notebook
图 6:启动 Jupyter 笔记本实例后的终端镜像。 导航到浏览器中显示的 URL,您应该能够看到 Jupyter 笔记本登陆页面。
现在,导航至目录,然后单击文件`Activity_3_Exploring_Bitcoin_Dataset.ipynb`。 这是一个 Jupyter 笔记本文件,将在新的浏览器选项卡中打开。 该应用程序将自动为您启动一个新的 Python 交互式会话。
现在,导航至目录,然后单击文件`Activity_3_Exploring_Bitcoin_Dataset.ipynb`。 这是一个 Jupyter 笔记本文件,将在新的浏览器选项卡中打开。 该应用将自动为您启动一个新的 Python 交互式会话。
![Activity 3 – Exploring the Bitcoin Dataset and Preparing Data for Model](img/image02_19.jpg)
......
......@@ -77,17 +77,17 @@
在进入下一部分之前,让我们以实践的方式探讨这些问题在神经网络环境中的不同之处。
TensorFlow 团队可使用 TensorFlow Playground 应用程序,以帮助我们了解神经网络的工作原理。 在这里,我们看到了一个由其层表示的神经网络:输入(在左侧),隐藏层(在中间)和输出(在右侧)。 我们还可以选择最左侧的不同样本数据集进行实验。 最后,在最右边,我们看到了网络的输出。
TensorFlow 团队可使用 TensorFlow Playground 应用,以帮助我们了解神经网络的工作原理。 在这里,我们看到了一个由其层表示的神经网络:输入(在左侧),隐藏层(在中间)和输出(在右侧)。 我们还可以选择最左侧的不同样本数据集进行实验。 最后,在最右边,我们看到了网络的输出。
![Different Loss Functions, Same Architecture](img/image03_01.jpg)
图 1:TensorFlow Playground Web 应用程序在此可视化中获取神经网络的参数,以直观了解每个参数如何影响模型结果。
图 1:TensorFlow Playground Web 应用在此可视化中获取神经网络的参数,以直观了解每个参数如何影响模型结果。
应用程序帮助我们探索了上一节中讨论的不同问题类别。 当我们选择分类作为问题类型(右上角)时,数据集中的点仅用两种颜色值着色:蓝色或橙色。 选择回归时,点的颜色将在橙色和蓝色之间的一系列颜色值中上色。 在处理分类问题时,网络会根据网络出错了多少个蓝色和橙色来评估其损失函数。 在处理分类问题时,它将检查网络每个点距正确的颜色值的距离,如下图所示:
应用帮助我们探索了上一节中讨论的不同问题类别。 当我们选择分类作为问题类型(右上角)时,数据集中的点仅用两种颜色值着色:蓝色或橙色。 选择回归时,点的颜色将在橙色和蓝色之间的一系列颜色值中上色。 在处理分类问题时,网络会根据网络出错了多少个蓝色和橙色来评估其损失函数。 在处理分类问题时,它将检查网络每个点距正确的颜色值的距离,如下图所示:
![Different Loss Functions, Same Architecture](img/image03_03.jpg)
> 图 2:TensorFlow Playground 应用程序的细节。 根据问题类型,将不同的颜色值分配给点。
> 图 2:TensorFlow Playground 应用的细节。 根据问题类型,将不同的颜色值分配给点。
在单击播放按钮后,我们注意到**训练损失**区域中的数字随着网络不断训练而不断下降。 在每个问题类别中,数字非常相似,因为损失函数在两个神经网络中都扮演相同的角色。 但是,用于每个类别的实际损失函数是不同的,并且根据问题类型进行选择。
......@@ -165,7 +165,7 @@ Keras 提供了`model.evaluate(),`方法,该方法使针对测试集评估训
我们还在“第 2 课”,“模型结构”并将经过训练的网络存储在磁盘上(`bitcoin_lstm_v0).` 我们现在可以在测试集中的 19 周数据中的每一个中使用`evaluate()`方法,并检查第一个神经网络的性能。
为了做到这一点,我们必须在前几周提供 76 个。 我们之所以必须这样做,是因为我们的网络已经过训练,可以准确地使用 76 周的连续数据来预测一周的数据(在第 4 课,“产品化”中)。当我们将神经网络部署为 Web 应用程序时,我们将通过定期对网络进行较大的定期训练来解决此问题:
为了做到这一点,我们必须在前几周提供 76 个。 我们之所以必须这样做,是因为我们的网络已经过训练,可以准确地使用 76 周的连续数据来预测一周的数据(在第 4 课,“产品化”中)。当我们将神经网络部署为 Web 应用时,我们将通过定期对网络进行较大的定期训练来解决此问题:
```py
combined_set = np.concatenate((train_data, test_data), axis=1)
......@@ -300,7 +300,7 @@ return np.mean(np.abs((A - B) / A)) * 100
$ jupyter notebook
```
2. 在浏览器中打开应用程序提供的 URL,然后打开名为`Activity_6_Creating_an_active_training_environment.ipynb`的 Jupyter 笔记本:
2. 在浏览器中打开应用提供的 URL,然后打开名为`Activity_6_Creating_an_active_training_environment.ipynb`的 Jupyter 笔记本:
![Activity 6 – Creating an Active Training Environment](img/image03_13.jpg)
......@@ -675,7 +675,7 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
> 表 2:所有模型的模型结果
有趣的是,我们的第一个模型(`bitcoin_lstm_v0`)在几乎所有定义的指标中表现最佳。 我们将使用该模型构建我们的 Web 应用程序并不断预测比特币价格。
有趣的是,我们的第一个模型(`bitcoin_lstm_v0`)在几乎所有定义的指标中表现最佳。 我们将使用该模型构建我们的 Web 应用并不断预测比特币价格。
###### 活动 7 – 优化深度学习模型
......@@ -698,7 +698,7 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
3. 现在,打开名为`Activity_7_Optimizing_a_deep_learning_model.ipynb`的 Jupyter 笔记本,并导航至笔记本的标题并导入所有必需的库。
我们将像以前的活动一样加载火车和测试数据。 我们还将使用实用程序功能`split_lstm_input()`将分为训练组和测试组。
我们将像以前的活动一样加载火车和测试数据。 我们还将使用工具功能`split_lstm_input()`将分为训练组和测试组。
在本笔记本的每个部分中,我们将在模型中实现新的优化技术。 每次这样做,我们都会训练一个新模型并将其训练后的实例存储在描述模型版本的变量中。 例如,在本笔记本中,我们的第一个模型`bitcoin_lstm_v0,`被称为`model_v0`。 在笔记本的最后,我们使用 MSE,RMSE 和 MAPE 评估所有模型。
......@@ -712,7 +712,7 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
图 14:运行 TensorBoard 实例,该实例显示了许多不同的模型运行。 TensorBoard 对于实时跟踪模型训练非常有用。
5. 现在,导航至标题`Epochs`。 在本节中,我们有兴趣探索不同周期的大小。 使用实用程序函数`train_model()`来命名不同的模型版本并运行:
5. 现在,导航至标题`Epochs`。 在本节中,我们有兴趣探索不同周期的大小。 使用工具函数`train_model()`来命名不同的模型版本并运行:
```py
train_model(model=model_v0, X=X_train, Y=Y_validate, epochs=100, version=0, run_number=0)
......@@ -741,7 +741,7 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
9. 现在,导航至笔记本中的标题`Evaluate Models`。 在本节中,我们将评估测试集中未来 19 周数据的模型预测。 然后,我们将计算预测序列与测试序列的 RMSE 和 MAPE。
我们已经实现了与活动 6 相同的评估技术,所有这些技术都包含在实用程序函数中。 只需运行本节中的所有单元格,直到笔记本末尾即可查看结果。
我们已经实现了与活动 6 相同的评估技术,所有这些技术都包含在工具函数中。 只需运行本节中的所有单元格,直到笔记本末尾即可查看结果。
### 注意
......@@ -755,4 +755,4 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
我们还学习了如何优化模型。 我们研究了通常用于提高神经网络性能的优化技术。 此外,我们实现了许多这些技术,并创建了更多模型来预测具有不同错误率的比特币价格。
在下一课中,我们将把我们的模型变成一个执行以下两件事的 Web 应用程序:使用新数据定期重新训练我们的模型,并能够使用 HTTP API 接口进行预测。
\ No newline at end of file
在下一课中,我们将把我们的模型变成一个执行以下两件事的 Web 应用:使用新数据定期重新训练我们的模型,并能够使用 HTTP API 接口进行预测。
\ No newline at end of file
此差异已折叠。
......@@ -16,7 +16,7 @@ TensorFlow 是 Google 流行的机器学习和深度学习产品。 它已迅速
第 1 章,“机器学习工具包”着眼于安装 Docker,设置机器学习 Docker 文件,与主机共享数据并运行 REST 服务以提供环境。
第 2 章,“图像数据”,教 MNIST 数字,如何获取它们,张量实际上只是多维数组,以及如何将图像数据和分类或分类数据编码为张量 。 然后,我们进行了快速回顾并采用了食谱的方法来考虑尺寸和张量,以便为机器学习准备数据。
第 2 章,“图像数据”,教 MNIST 数字,如何获取它们,张量实际上只是多维数组,以及如何将图像数据和分类或分类数据编码为张量 。 然后,我们进行了快速回顾并采用了秘籍的方法来考虑尺寸和张量,以便为机器学习准备数据。
第 3 章,“经典神经网络”涵盖了很多内容! 我们看到了经典的或密集的神经网络的结构。 我们了解激活,非线性和 softmax。 然后我们建立测试和训练数据,并学习如何使用`Dropout``Flatten`构建网络。 我们还将学习有关求解器的所有知识,或者机器实际学习的方法。 然后,我们探索超参数,最后,通过网格搜索对模型进行微调。
......@@ -29,7 +29,7 @@ TensorFlow 是 Google 流行的机器学习和深度学习产品。 它已迅速
你需要:
* 命令行 Shell 经验
* 有 Python 脚本编写或应用程序开发经验
* 有 Python 脚本编写或应用开发经验
# 下载示例代码文件
......
......@@ -4,7 +4,7 @@
在本章中,我们将研究准备供机器学习使用的图像数据,以及将其连接到 Keras 中涉及的步骤。 我们将从了解 MNIST 数字开始。 这些是图像形式的手写字符,我们将在机器学习中有效执行**光学字符识别****OCR**)。 然后,我们将讨论张量。 张量听起来像是一个数学词,的确是,但是作为一名程序员,您已经看到了多维数组,因此您实际上已经在使用张量,我将向您展示其等效性。 之后,我们将图像转换为张量。 正如您习惯在计算机上看到图像一样,图像需要一种特殊的编码形式才能与机器学习一起使用。
然后,我们将转向类别; 在这种情况下,我们将使用零到九(这是单个数字的字符),并将它们变成类别标签。 最后,我们将进行回顾,并且我将向您展示一本有关如何为机器学习准备数据时如何思考数据的食谱
然后,我们将转向类别; 在这种情况下,我们将使用零到九(这是单个数字的字符),并将它们变成类别标签。 最后,我们将进行回顾,并且我将向您展示一本有关如何为机器学习准备数据时如何思考数据的秘籍
# MNIST 数字
......@@ -114,6 +114,6 @@ Python 元组
# 总结
在本章中,我们了解了 MNIST 数字,以及如何获取它们。 张量实际上只是多维数组; 我们如何将图像数据编码为张量; 我们如何将分类或分类数据编码为张量; 然后我们进行了快速回顾,并采用了食谱的方法来考虑尺寸和张量,以获取用于机器学习的数据。
在本章中,我们了解了 MNIST 数字,以及如何获取它们。 张量实际上只是多维数组; 我们如何将图像数据编码为张量; 我们如何将分类或分类数据编码为张量; 然后我们进行了快速回顾,并采用了秘籍的方法来考虑尺寸和张量,以获取用于机器学习的数据。
现在,我们已经学习了如何为机器学习设置输入和输出数据,我们将继续下一章,在该章中,我们将创建一个“经典神经网络”(**CNN**)。
\ No newline at end of file
......@@ -143,7 +143,7 @@ Keras 功能模型
编译模型
`loss`函数是一个数学函数,它告诉`optimizer`做得如何。 `optimizer`函数是一种数学程序,可搜索可用参数以最小化`loss`函数。 `metrics`参数是您的机器学习模型的输出,应该为人类可读,以便您可以了解模型的运行状况。 现在,这些`loss``optimizer`参数充满了数学运算。 总的来说,您可以将其作为一本食谱。 使用 Keras 运行机器学习模型时,您应该有效地选择`adam`(默认设置)。 就`loss`功能而言,当您处理诸如 MNIST 数字之类的分类问题时,应使用分类交叉熵。 此食谱类型的配方应该对您有帮助。
`loss`函数是一个数学函数,它告诉`optimizer`做得如何。 `optimizer`函数是一种数学程序,可搜索可用参数以最小化`loss`函数。 `metrics`参数是您的机器学习模型的输出,应该为人类可读,以便您可以了解模型的运行状况。 现在,这些`loss``optimizer`参数充满了数学运算。 总的来说,您可以将其作为一本秘籍。 使用 Keras 运行机器学习模型时,您应该有效地选择`adam`(默认设置)。 就`loss`功能而言,当您处理诸如 MNIST 数字之类的分类问题时,应使用分类交叉熵。 此秘籍类型的秘籍应该对您有帮助。
现在,我们准备用`x`训练数据(由实际的 MNIST 数字图像组成)和`y`训练参数(由零至九个分类输出标签组成)拟合模型。 我们这里有一个新概念是`batch_size`。 这是每个执行循环的图像数。 通常,这受可用内存的限制,但是较小的批量大小(32 到 64)通常会更好。 那么这个奇怪的词呢? 历元只是指循环数。 例如,当我们说八个周期时,我们的意思是机器学习模型将遍历训练数据八次,并将使用测试数据来查看模型变得八次准确的程度。 当模型反复查看相同的数据时,它会提高准确性,如以下屏幕截图所示:
......
......@@ -12,7 +12,7 @@
# 什么是连体网络?
连体网络是神经网络的一种特殊类型,它是最简单且使用最广泛的单发学习算法之一。 正如我们在上一章中学到的,单次学习是一种技术,其中我们每个班级仅从一个训练示例中学习。 因此,在每个类别中没有很多数据点的应用程序中主要使用连体网络。 例如,假设我们要为我们的组织建立一个人脸识别模型,并且在组织中有大约 500 个人在工作。 如果我们想从头开始使用**卷积神经网络****CNN**)建立人脸识别模型,那么我们需要这 500 人中的许多人来训练网络并获得准确性良好的图像。 但是显然,我们不会为这 500 个人提供很多图像,因此除非有足够的数据点,否则使用 CNN 或任何深度学习算法构建模型都是不可行的。 因此,在这种情况下,我们可以求助于复杂的单次学习算法,例如连体网络,该算法可以从更少的数据点进行学习。
连体网络是神经网络的一种特殊类型,它是最简单且使用最广泛的单发学习算法之一。 正如我们在上一章中学到的,单次学习是一种技术,其中我们每个班级仅从一个训练示例中学习。 因此,在每个类别中没有很多数据点的应用中主要使用连体网络。 例如,假设我们要为我们的组织建立一个人脸识别模型,并且在组织中有大约 500 个人在工作。 如果我们想从头开始使用**卷积神经网络****CNN**)建立人脸识别模型,那么我们需要这 500 人中的许多人来训练网络并获得准确性良好的图像。 但是显然,我们不会为这 500 个人提供很多图像,因此除非有足够的数据点,否则使用 CNN 或任何深度学习算法构建模型都是不可行的。 因此,在这种情况下,我们可以求助于复杂的单次学习算法,例如连体网络,该算法可以从更少的数据点进行学习。
但是,连体网络如何工作? 连体网络基本上由两个对称的神经网络组成,它们共享相同的权重和结构,并且都使用能量函数`E`最终结合在一起。 我们的连体网络的目标是了解两个输入值是相似还是相异。 假设我们有两个图像`X[1]``X2`,我们想了解两个图像是相似还是相异。
......
......@@ -677,7 +677,7 @@ class Matching_network():
# 问题
1. 关系网络中使用的特征有哪些不同类型?
2. 关系网络中的算子`Z`是什么?
2. 关系网络中的运算符`Z`是什么?
3. 关系函数是什么?
4. 关系网络的损失函数是什么?
5. 匹配网络中使用哪些不同类型的嵌入函数?
......
......@@ -67,7 +67,7 @@ NTM 的重要组成部分如下:
![](img/f7d6e7e3-a785-47aa-ad6b-4f4a05fed752.png)
但这如何工作? 仅当索引为`i`的权重元素和擦除元素都为 1 时,存储器中的特定元素才会被设置为 0,换言之,被擦除; 否则,它将保留自己的值。 例如,查看下图。 首先,我们将权重向量`w[t]`和擦除向量`w[t]`相乘:
但这如何工作? 仅当索引为`i`的权重元素和擦除元素都为 1 时,存储器中的特定元素才会被设置为 0,换言之,被擦除; 否则,它将保留自己的值。 例如,查看下图。 首先,我们将权重向量`w[t]`和擦除向量`w[t]`相乘:
![](img/367864fc-07bb-46fa-9d44-9331803a5ab7.png)
......
......@@ -175,7 +175,7 @@ MIL 中涉及的步骤如下:
假设我们有一个数据集`D`,其中包含没有标签的样本:`D = {x[1], ..., x[n]}`。 现在我们需要为数据集创建标签。 我们该怎么做? 首先,我们使用一些嵌入函数来学习数据集中每个数据点的嵌入。 嵌入函数可以是任何特征提取器。 假设我们的输入是一幅图像,那么我们可以使用 CNN 作为嵌入函数来提取图像特征向量。
为每个数据点生成嵌入后,我们如何找到它们的标签? 天真的和简单的方法是将我们的数据集`D`划分为具有某些随机超平面的`p`个分区,然后我们可以将数据集的每个这些分区子集视为一个单独的类。
为每个数据点生成嵌入后,我们如何找到它们的标签? 朴素的和简单的方法是将我们的数据集`D`划分为具有某些随机超平面的`p`个分区,然后我们可以将数据集的每个这些分区子集视为一个单独的类。
但是这种方法的问题在于,由于我们使用的是随机超平面,因此我们的类可能包含完全不同的嵌入,并且还将相关的嵌入保留在不同的类中。 因此,我们可以使用聚类算法来代替使用随机超平面对数据集进行分区。 我们使用 k 均值聚类作为我们的聚类算法来划分数据集。 我们对多个迭代运行 k-means 聚类,并获得`k`聚类(分区)。
......
......@@ -12,7 +12,7 @@
第 2 章和 “OpenAI 和 TensorFlow 入门”可帮助我们为各种强化学习任务设置机器。 我们将学习如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 然后,我们将学习如何在 OpenAI Gym 中模拟智能体,并且将了解如何构建视频游戏机器人。 我们还将学习 TensorFlow 的基础知识,并了解如何使用 TensorBoard 进行可视化。
第 3 章,“马尔可夫决策过程和动态规划”首先说明什么是马尔可夫链和马尔可夫过程,然后我们将了解如何将强化学习问题建模为马尔可夫决策过程。 我们还将学习一些基本概念,例如值函数,Q 函数和贝尔曼方程。 然后,我们将了解什么是动态规划以及如何使用值和策略迭代来解决冻湖问题。
第 3 章,“马尔可夫决策过程和动态规划”首先说明什么是马尔可夫链和马尔可夫过程,然后我们将了解如何将强化学习问题建模为马尔可夫决策过程。 我们还将学习一些基本概念,例如值函数,Q 函数和贝尔曼方程。 然后,我们将了解什么是动态规划以及如何使用值和策略迭代来解决冻湖问题。
第 4 章,“使用蒙特卡洛方法进行的游戏”解释了蒙特卡洛方法和不同类型的蒙特卡洛预测方法,例如首次访问 MC 和每次访问 MC。 我们还将学习如何使用蒙特卡洛方法玩二十一点。 然后,我们将探讨不同的策略上和策略外的蒙特卡洛控制方法。
......@@ -20,7 +20,7 @@
第 6 章,“多臂老虎机问题”处理强化学习的经典问题之一,即多臂老虎机(MAB)或 k 臂老虎机问题。 我们将学习如何使用各种探索策略(例如 epsilon-greedy,softmax 探索,UCB 和 Thompson 采样)解决此问题。 在本章的后面,我们将看到如何使用 MAB 向用户显示正确的广告横幅。
第 7 章,“深度学习基础知识”涵盖了深度学习的各种基本概念。 首先,我们将学习神经网络是什么,然后我们将看到不同类型的神经网络,例如 RNN,LSTM 和 CNN。 我们将通过构建一些应用程序来学习,这些应用程序执行诸如生成歌曲歌词和对时尚产品进行分类等任务。
第 7 章,“深度学习基础知识”涵盖了深度学习的各种基本概念。 首先,我们将学习神经网络是什么,然后我们将看到不同类型的神经网络,例如 RNN,LSTM 和 CNN。 我们将通过构建一些应用来学习,这些应用执行诸如生成歌曲歌词和对时尚产品进行分类等任务。
第 8 章,“使用深度 Q 网络玩 Atari 游戏”涵盖了最广泛使用的深度强化学习算法之一,称为深度 Q 网络(DQN)。 我们将通过探索 DQN 的各个组成部分来学习 DQN,然后我们将了解如何构建一个智能体来使用 DQN 玩 Atari 游戏。 然后,我们将研究 DQN 架构的一些升级,例如双 DQN 和决斗 DQN。
......
......@@ -67,7 +67,7 @@ RL 的元素在以下各节中显示。
# 值函数
值函数表示智能体处于特定状态的程度如何。 它取决于策略,通常用`v(s)`表示。 它等于智能体从初始状态开始收到的总预期奖励。 可以有多个值函数。 最优值函数是与其他值函数相比在所有状态下具有最高值的函数。 同样,最优策略是具有最优价值功能的策略。
值函数表示智能体处于特定状态的程度如何。 它取决于策略,通常用`v(s)`表示。 它等于智能体从初始状态开始收到的总预期奖励。 可以有多个值函数。 最优值函数是与其他值函数相比在所有状态下具有最高值的函数。 同样,最优策略是具有最优值函数的策略。
# 模型
......@@ -156,7 +156,7 @@ Malmo 计划是微软在 Minecraft 之上构建的另一个 AI 实验平台。
# RL 的应用
凭借更大的进步和研究,RL 已在从玩计算机游戏到汽车自动化的多个领域迅速发展了日常应用程序。 以下各节列出了一些 RL 应用程序
凭借更大的进步和研究,RL 已在从玩计算机游戏到汽车自动化的多个领域迅速发展了日常应用。 以下各节列出了一些 RL 应用
# 教育
......
......@@ -51,7 +51,7 @@ source activate universe
# 安装 Docker
安装 Anaconda 之后,我们需要安装 Docker。 Docker 使将应用程序部署到生产变得容易。 假设您在具有 TensorFlow 和其他一些库的`localhost`中构建了一个应用程序,并且要将应用程序部署到服务器中。 您将需要在服务器上安装所有这些依赖项。 但是使用 Docker,我们可以将应用程序及其依赖项打包在一起,这称为容器,并且我们可以在服务器上运行应用程序而无需在打包的 Docker 容器中使用任何外部依赖项。 OpenAI 不支持 Windows,因此要在 Windows 中安装 OpenAI,我们需要使用 Docker。 而且,大多数 OpenAI Universe 环境都需要 Docker 来模拟环境。 现在让我们看看如何安装 Docker。
安装 Anaconda 之后,我们需要安装 Docker。 Docker 使将应用部署到生产变得容易。 假设您在具有 TensorFlow 和其他一些库的`localhost`中构建了一个应用,并且要将应用部署到服务器中。 您将需要在服务器上安装所有这些依赖项。 但是使用 Docker,我们可以将应用及其依赖项打包在一起,这称为容器,并且我们可以在服务器上运行应用而无需在打包的 Docker 容器中使用任何外部依赖项。 OpenAI 不支持 Windows,因此要在 Windows 中安装 OpenAI,我们需要使用 Docker。 而且,大多数 OpenAI Universe 环境都需要 Docker 来模拟环境。 现在让我们看看如何安装 Docker。
要下载 Docker,请转至[这里](https://docs.docker.com/),您将在其中看到一个名为“Get Docker”的选项。 如果选择该选项,则将看到不同操作系统的选项。 如果使用 Windows 或 Mac,则可以下载 Docker 并直接使用图形安装程序进行安装。
......@@ -750,7 +750,7 @@ with tf.Session() as sess:
在本章中,我们学习了如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 我们还学习了如何使用 OpenAI 创建模拟,以及如何训练智能体在 OpenAI 环境中学习。 然后,我们了解了 TensorFlow 的基础知识,然后在 TensorBoard 中可视化了图形。
在下一章第 3 章,“马尔可夫决策过程和动态规划”中,我们将学习马尔可夫决策过程和动态规划以及如何使用值和策略迭代来解决冻湖问题。
在下一章第 3 章,“马尔可夫决策过程和动态规划”中,我们将学习马尔可夫决策过程和动态规划以及如何使用值和策略迭代来解决冻湖问题。
# 问题
......
......@@ -132,7 +132,7 @@ MDP 由五个重要元素表示:
| 状态 1 | 0.3 |
| 状态 2 | 0.9 |
根据上表,我们可以知道处于状态 2 很好,因为它具有很高的值。 在接下来的部分中,我们将看到如何直观地估计这些值。
根据上表,我们可以知道处于状态 2 很好,因为它具有很高的值。 在接下来的部分中,我们将看到如何直观地估计这些值。
# 状态作用值函数(Q 函数)
......@@ -157,13 +157,13 @@ MDP 由五个重要元素表示:
| 状态 2 | 动作 1 | 0.5 |
| 状态 2 | 动作 2 | 0.9 |
因此,`Q`表显示了所有可能的状态动作对的值。 因此,通过查看此表,我们可以得出结论,在状态 1 中执行动作 1 和在状态 2 中执行动作 2 是更好的选择,因为它具有很高的值。
因此,`Q`表显示了所有可能的状态动作对的值。 因此,通过查看此表,我们可以得出结论,在状态 1 中执行动作 1 和在状态 2 中执行动作 2 是更好的选择,因为它具有很高的值。
每当我们说值函数`V(S)``Q`函数`Q(S, a)`时,它实际上表示值表,而`Q`表,如前所示。
#贝尔曼方程和最优性
以美国数学家理查德·贝尔曼(Richard Bellman)命名的贝尔曼方程式可帮助我们求解 MDP。 它在 RL 中无处不在。 当我们说解决 MDP 时,实际上意味着找到最佳的策略和价值功能。 根据不同的策略,可以有许多不同的值函数。 与所有其他值函数相比,最优值函数`V*(s)`是产生最大值的函数:
以美国数学家理查德·贝尔曼(Richard Bellman)命名的贝尔曼方程式可帮助我们求解 MDP。 它在 RL 中无处不在。 当我们说解决 MDP 时,实际上意味着找到最佳的策略和值函数。 根据不同的策略,可以有许多不同的值函数。 与所有其他值函数相比,最优值函数`V*(s)`是产生最大值的函数:
![](img/00048.jpeg)
......@@ -453,7 +453,7 @@ policy_iteration():
当我们说有多好时,这到底意味着什么? 这意味着最大化奖励是多么的好。
然后,我们使用称为贝尔曼最优性方程的特殊方程式表示值函数和`Q`函数。 如果我们解决这个方程,我们可以找到最佳策略。 在这里,求解方程式意味着找到正确的值函数和策略。 如果我们找到正确的价值功能和策略,那将是我们获得最大回报的最佳途径。
然后,我们使用称为贝尔曼最优性方程的特殊方程式表示值函数和`Q`函数。 如果我们解决这个方程,我们可以找到最佳策略。 在这里,求解方程式意味着找到正确的值函数和策略。 如果我们找到正确的值函数和策略,那将是我们获得最大回报的最佳途径。
我们将使用一种称为动态规划的特殊技术来求解贝尔曼最优性方程。 要应用 DP,必须预先知道模型动态,这基本上意味着必须预先知道模型环境的转换概率和奖励概率。 由于我们知道模型动态,因此可以在此处使用 DP。 我们使用两种特殊的 DP 算法来找到最佳策略:
......@@ -543,7 +543,7 @@ for state in range(env.observation_space.n):
value_table[state] = max(Q_value)
```
然后,我们将检查是否已经达到收敛,即,我们的价值表和更新后的价值表之间的差异非常小。 我们怎么知道它很小? 我们定义了一个名为`threshold`的变量,然后我们看一下差异是否小于我们的`threshold`; 如果小于,则中断循环,并将值函数返回为最佳值函数:
然后,我们将检查是否已经达到收敛,即,我们的值表和更新后的值表之间的差异非常小。 我们怎么知道它很小? 我们定义了一个名为`threshold`的变量,然后我们看一下差异是否小于我们的`threshold`; 如果小于,则中断循环,并将值函数返回为最佳值函数:
```py
threshold = 1e-20
......
......@@ -235,7 +235,7 @@ print("Approximate value of pi is {}" .format(calculate_pi(points_inside_circle,
* **拿牌**:如果玩家需要纸牌
* **停牌**:如果玩家不需要纸牌
玩家必须决定一张王牌的值。 如果玩家的纸牌总数为 10,并且在击中后获得一张王牌,则可以将其视为 11,而`10 + 11 = 21`。但是,如果玩家的纸牌总数为 15,并且在击中后,则获得一张王牌。 ,如果他将其视为 11 且`15 + 11 = 26`,则表示破产。 如果玩家拥有一张王牌,我们可以将其称为**可用王牌**; 玩家可以将其视为 11,而不会破产。 如果玩家通过将王牌视为 11 来破产,则称为**不可用王牌**
玩家必须决定一张王牌的值。 如果玩家的纸牌总数为 10,并且在击中后获得一张王牌,则可以将其视为 11,而`10 + 11 = 21`。但是,如果玩家的纸牌总数为 15,并且在击中后,则获得一张王牌。 ,如果他将其视为 11 且`15 + 11 = 26`,则表示破产。 如果玩家拥有一张王牌,我们可以将其称为**可用王牌**; 玩家可以将其视为 11,而不会破产。 如果玩家通过将王牌视为 11 来破产,则称为**不可用王牌**
现在,我们将看到如何使用首次访问的蒙特卡洛算法来实现二十一点。
......@@ -493,9 +493,9 @@ plot_blackjack(value, axes[0], axes[1])
# 蒙特卡洛探索
与 DP 方法不同,这里我们不估计状态值。 相反,我们专注于行动价值。 当我们知道环境模型时,仅状态值就足够了。 由于我们不了解模型动态,因此这不是单独确定状态值的好方法。
与 DP 方法不同,这里我们不估计状态值。 相反,我们专注于动作值。 当我们知道环境模型时,仅状态值就足够了。 由于我们不了解模型动态,因此这不是单独确定状态值的好方法。
估计动作值比估计状态值更直观,因为状态值根据我们选择的策略而变化。 例如,在二十一点游戏中,假设我们处于某些纸牌为 20 的状态。该状态的价值是什么? 这完全取决于策略。 如果我们选择策略作为命中目标,那将不是一个好的状态,而且此状态的价值非常低。 但是,如果我们选择我们的策略作为立场,那肯定是一个好的国家。因此,国家的价值取决于我们选择的策略。 因此,估计操作的值而不是状态的值更为重要。
估计动作值比估计状态值更直观,因为状态值根据我们选择的策略而变化。 例如,在二十一点游戏中,假设我们处于某些纸牌为 20 的状态。该状态的值是什么? 这完全取决于策略。 如果我们选择策略作为命中目标,那将不是一个好的状态,而且此状态的值非常低。 但是,如果我们选择我们的策略作为立场,那肯定是一个好的国家。因此,状态的值取决于我们选择的策略。 因此,估计操作的值而不是状态的值更为重要。
我们如何估算作用值? 还记得我们在第 3 章,“马尔可夫决策过程和动态规划”中学习的`Q`函数吗? 表示为`Q(s, a)``Q`函数用于确定特定状态下的动作有多好。 它基本上指定了状态-动作对。
......@@ -522,11 +522,11 @@ MC-ES 算法非常简单,如下所示:
# 策略性蒙特卡洛控制
在开始进行蒙特卡洛探索时,我们将探索所有状态-动作对,并选择能给我们带来最大值的对。 但是考虑一下我们拥有大量状态和行动的情况。 在这种情况下,如果我们使用 MC-ES 算法,则将花费大量时间来探索状态和动作的所有组合并选择最佳状态和动作。 我们如何克服这个问题? 有两种不同的控制算法。 上策略和下策略。 在基于策略的蒙特卡洛控制中,我们使用ε贪婪策略。 让我们了解什么是贪婪算法。
在开始进行蒙特卡洛探索时,我们将探索所有状态-动作对,并选择能给我们带来最大值的对。 但是考虑一下我们拥有大量状态和行动的情况。 在这种情况下,如果我们使用 MC-ES 算法,则将花费大量时间来探索状态和动作的所有组合并选择最佳状态和动作。 我们如何克服这个问题? 有两种不同的控制算法。 上策略和下策略。 在基于策略的蒙特卡洛控制中,我们使用ε贪婪策略。 让我们了解什么是贪婪算法。
贪婪的算法会选择当时可用的最佳选择,尽管当您考虑整个问题时,该选择可能不是最佳选择。 考虑您要从数字列表中找到最小的数字。 您可以将列表分为三个子列表,而不是直接从列表中找到最小的数字。 然后,您将在每个子列表中找到最小的数字(局部最优值)。 考虑整个列表时,在一个子列表中找到的最小数目可能不是最小数目(全局最优)。 但是,如果您表现得很贪婪,那么您将仅在当前子列表中看到最小的数字(此刻),然后将其视为最小的数字。
贪婪策略表示在所探索的行动中的最佳行动。 最佳动作是具有最高值的动作。
贪婪策略表示在所探索的行动中的最佳行动。 最佳动作是具有最高值的动作。
假设我们已经探索了状态 1 中的一些动作,如 Q 表所示:
......@@ -536,7 +536,7 @@ MC-ES 算法非常简单,如下所示:
| 状态 1 | 动作 1 | 0.1 |
| 状态 1 | 动作 2 | 0.8 |
如果我们表现出贪婪的态度,那么我们将从所有探索的动作中挑选出具有最大价值的动作。 在前面的情况中,我们具有较高价值的动作 2,因此我们选择该动作。 但是状态 1 中可能还有其他我们尚未探讨的动作,可能价值最高。 因此,我们必须在所有探索的动作中寻找最佳动作或利用最佳动作。 这就是所谓的探索利用困境。 假设您听过爱德·希兰(Ed Sheeran),并且非常喜欢他,所以您因为喜欢音乐而一直只听(探索)爱德·希兰(Ed Sheeran)。 但是,如果您尝试听其他艺术家的音乐,您可能会喜欢比 Ed Sheeran(探索)更好的人。 关于您是否只需要听 Ed Sheeran(利用)还是尝试听不同的艺术家以查看您是否喜欢他们(利用)的这种困惑称为探索利用难题。
如果我们表现出贪婪的态度,那么我们将从所有探索的动作中挑选出具有最大值的动作。 在前面的情况中,我们具有较高值的动作 2,因此我们选择该动作。 但是状态 1 中可能还有其他我们尚未探讨的动作,可能值最高。 因此,我们必须在所有探索的动作中寻找最佳动作或利用最佳动作。 这就是所谓的探索利用困境。 假设您听过爱德·希兰(Ed Sheeran),并且非常喜欢他,所以您因为喜欢音乐而一直只听(探索)爱德·希兰(Ed Sheeran)。 但是,如果您尝试听其他艺术家的音乐,您可能会喜欢比 Ed Sheeran(探索)更好的人。 关于您是否只需要听 Ed Sheeran(利用)还是尝试听不同的艺术家以查看您是否喜欢他们(利用)的这种困惑称为探索利用难题。
因此,为了避免这种困境,我们引入了一种称为`ε`贪婪策略的新策略。 在这里,所有动作均以非零概率(`ε`)进行尝试。 对于概率`ε`,我们随机地探索不同的动作,而对于概率 1,我们选择具有最大值的动作,即,我们不进行任何探索。 因此,我们不仅会以概率`ε`始终利用最佳行动,而且还会随机探索不同的行动。 如果`epsilon`的值设置为零,那么我们将不做任何探索。 这只是贪婪的策略,如果将`epsilon`的值设置为 1,则它将始终仅进行探索。`epsilon`的值会随着时间的流逝而衰减,因为我们不想永远探索。 因此,随着时间的流逝,我们的策略会采取良好的行动:
......
......@@ -489,7 +489,7 @@ sns.distplot(banner_selected)
# 总结
在本章中,我们了解了 MAB 问题以及如何将其应用于不同的应用程序。 我们了解了解决探索-利用困境的几种方法。 首先,我们查看了`ε`贪婪策略,在其中我们以概率`epsilon`进行了探索,并以概率 1 `epsilon`进行了探索。 我们查看了 UCB 算法,在该算法中我们选择了具有最大上限值的最佳操作,其次是 TS 算法,在此我们通过 beta 分布获得了最佳操作。
在本章中,我们了解了 MAB 问题以及如何将其应用于不同的应用。 我们了解了解决探索-利用困境的几种方法。 首先,我们查看了`ε`贪婪策略,在其中我们以概率`epsilon`进行了探索,并以概率 1 `epsilon`进行了探索。 我们查看了 UCB 算法,在该算法中我们选择了具有最大上限值的最佳操作,其次是 TS 算法,在此我们通过 beta 分布获得了最佳操作。
在接下来的章节中,我们将学习深度学习以及如何使用深度学习解决 RL 问题。
......
......@@ -109,7 +109,7 @@
![](img/00177.jpeg)
我们的目标是最小化成本函数,以便我们的神经网络预测会更好。 如何使成本函数最小化? 我们可以通过更改正向传播中的某些值来最小化成本函数。 我们可以改变哪些价值观? 显然,我们不能更改输入和输出。 现在,我们剩下了权重和偏差值。 我们只是随机初始化权重矩阵和偏差,所以它不是完美的。 现在,我们将调整神经网络的权重矩阵(`w[xh]``w[hy]`) 结果。 我们如何调整这些权重矩阵? 这是一种称为梯度下降的新技术。
我们的目标是最小化成本函数,以便我们的神经网络预测会更好。 如何使成本函数最小化? 我们可以通过更改正向传播中的某些值来最小化成本函数。 我们可以改变哪些? 显然,我们不能更改输入和输出。 现在,我们剩下了权重和偏差值。 我们只是随机初始化权重矩阵和偏差,所以它不是完美的。 现在,我们将调整神经网络的权重矩阵(`w[xh]``w[hy]`) 结果。 我们如何调整这些权重矩阵? 这是一种称为梯度下降的新技术。
# 梯度下降
......
......@@ -20,7 +20,7 @@
![](img/00243.jpeg)
`r + r maxQ(s', a)`是目标值,`Q(s, a)`是预测值; 我们试图通过学习正确的策略来最大程度地降低这一值。
`r + r maxQ(s', a)`是目标值,`Q(s, a)`是预测值; 我们试图通过学习正确的策略来最大程度地降低这一值。
同样,在 DQN 中,我们可以将损失函数定义为目标值和预测值之间的平方差,并且我们还将尝试通过更新权重`θ`来最大程度地减少损失:
......@@ -396,7 +396,7 @@ with tf.Session() as sess:
# 双 DQN
深度 Q 学习非常酷,对吗? 它已经普及了玩任何 Atari 游戏的学习。 但是 DQN 的问题在于,它倾向于高估`Q`值。 这是因为`Q`学习方程式中的最大值算子。 最大运算符在选择和评估动作时使用相同的值。 那是什么意思?假设我们处于`s`状态,并且我们有五个动作`a[1]``a[5]`。 假设`a[3]`是最好的动作。 当我们估计状态为`s`的所有这些动作的`Q`值时,估计的`Q`值会有些杂音并且与实际值有所不同。 由于这种噪声,动作`a[2]`会比最佳动作`a[3]`获得更高的值。 现在,如果我们选择最佳动作作为具有最大值的动作,则最终将选择次优动作`a[2]`而不是最佳动作`a[3]`
深度 Q 学习非常酷,对吗? 它已经普及了玩任何 Atari 游戏的学习。 但是 DQN 的问题在于,它倾向于高估`Q`值。 这是因为`Q`学习方程式中的最大值运算符。 最大运算符在选择和评估动作时使用相同的值。 那是什么意思?假设我们处于`s`状态,并且我们有五个动作`a[1]``a[5]`。 假设`a[3]`是最好的动作。 当我们估计状态为`s`的所有这些动作的`Q`值时,估计的`Q`值会有些杂音并且与实际值有所不同。 由于这种噪声,动作`a[2]`会比最佳动作`a[3]`获得更高的值。 现在,如果我们选择最佳动作作为具有最大值的动作,则最终将选择次优动作`a[2]`而不是最佳动作`a[3]`
我们可以通过具有两个单独的`Q`函数来解决此问题,每个函数都是独立学习的。 一个`Q`功能用于选择一个动作,另一个`Q`功能用于评估一个动作。 我们可以通过调整 DQN 的目标功能来实现。 调用 DQN 的目标函数:
......@@ -438,7 +438,7 @@ with tf.Session() as sess:
我们知道`Q`函数指定智能体在状态`s`下执行动作`a`有多好,而值函数则指定使智能体处于`s`状态有多好。 现在,我们引入一个称为优势函数的新函数,该函数可以定义为值函数和优势函数之间的差。 优势功能指定与其他动作相比,智能体执行一个动作`a`有多好。
因此,值函数指定状态的优劣,而优势函数指定动作的优劣。 如果我们将价值功能和优势功能结合起来会发生什么? 这将告诉我们智能体在状态`s`实际上是我们的`Q`功能下执行动作`a`有多好。 因此,我们可以像`Q(s, a) = V(s) + A(a)`中那样将`Q`函数定义为值函数和优势函数的和。
因此,值函数指定状态的优劣,而优势函数指定动作的优劣。 如果我们将值函数和优势功能结合起来会发生什么? 这将告诉我们智能体在状态`s`实际上是我们的`Q`功能下执行动作`a`有多好。 因此,我们可以像`Q(s, a) = V(s) + A(a)`中那样将`Q`函数定义为值函数和优势函数的和。
现在,我们将看到决斗网络架构是如何工作的。 下图显示了决斗 DQN 的架构:
......@@ -446,7 +446,7 @@ with tf.Session() as sess:
决斗 DQN 的架构与 DQN 基本上相同,只是在末端的全连接层分为两个流。 一个流计算值函数,而另一个流计算优势函数。 最后,我们使用聚合层组合这两个流,并获得 Q 函数。
为什么我们必须将我们的 Q 函数计算分成两个流? 在许多州,计算所有动作的价值估算并不重要,尤其是当我们在一个状态中有较大的动作空间时; 那么大多数动作将不会对状态产生任何影响。 同样,可能会有许多具有冗余效果的动作。 在这些情况下,与现有 DQN 架构相比,决斗 DQN 可以更精确地估算 Q 值:
为什么我们必须将我们的 Q 函数计算分成两个流? 在许多状态,计算所有动作的值估算并不重要,尤其是当我们在一个状态中有较大的动作空间时; 那么大多数动作将不会对状态产生任何影响。 同样,可能会有许多具有冗余效果的动作。 在这些情况下,与现有 DQN 架构相比,决斗 DQN 可以更精确地估算 Q 值:
* 当我们在状态中有大量动作时,并且估计每个动作的值并不是很重要时,第一个流与值函数流中一样有用。
* 与优势功能流一样,第二个流在网络必须决定优先选择哪个操作的情况下很有用
......
# 异步优势演员评论网络
# 异步优势演员评论网络
在前面的章节中,我们已经看到了**深度 Q 网络****DQN**)多么酷,以及它如何成功地推广了学习玩具有人类水平性能的 Atari 系列游戏的方法 。 但是我们面临的问题是它需要大量的计算能力和训练时间。 因此,Google 的 DeepMind 引入了一种称为**异步优势演员评论家****A3C**)的新算法,该算法在其他深度强化学习算法中占主导地位,因为它需要较少的计算能力和训练时间。 A3C 的主要思想是,它使用多个智能体并行学习并汇总其整体经验。 在本章中,我们将了解 A3C 网络如何工作。 接下来,我们将学习如何使用 A3C 构建智能体以推动一座山。
......@@ -19,7 +19,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
潜水之前,A3C 是什么意思? 这三个 As 代表什么?
在 A3C 中,第一个 A,**异步**表示其工作方式。 在这里,我们有多个与环境交互的智能体,而不是像 DQN 那样有单个智能体尝试学习最佳策略。 由于我们有多个智能体同时与环境交互,因此我们将环境的副本提供给每个智能体,以便每个智能体可以与自己的环境副本进行交互。 因此,所有这些多个智能体都称为辅助智能体,我们有一个单独的智能体,称为全局网络,所有智能体都向其报告。 全网络汇集了学习内容。
在 A3C 中,第一个 A,**异步**表示其工作方式。 在这里,我们有多个与环境交互的智能体,而不是像 DQN 那样有单个智能体尝试学习最佳策略。 由于我们有多个智能体同时与环境交互,因此我们将环境的副本提供给每个智能体,以便每个智能体可以与自己的环境副本进行交互。 因此,所有这些多个智能体都称为辅助智能体,我们有一个单独的智能体,称为全局网络,所有智能体都向其报告。 全网络汇集了学习内容。
第二个 A 是**优势**; 在讨论 DQN 的决斗网络架构时,我们已经看到了优势功能。 优势函数可以定义为 Q 函数和值函数之间的差。 我们知道 Q 函数指定状态下动作的状态,而值函数指定状态下状态的状态。 现在,凭直觉思考; 两者之间的区别意味着什么? 它告诉我们,与其他所有动作相比,智能体在状态`s`下执行动作`a`有多好。
......@@ -31,11 +31,11 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](img/00292.gif)
仅通过查看上图就可以了解 A3C 的工作原理。 正如我们所讨论的,我们可以看到有多个工作程序智能体,每个工作智能体都与自己的环境副本进行交互。 然后,工作人员将学习策略并计算策略损失的梯度,并将该梯度更新到全局网络。 每个智能体都会同时更新此全球网络。 A3C 的优点之一是,与 DQN 不同,我们在这里不使用经验回放内存。 实际上,这是 A3C 网络的最大优势之一。 由于我们有多个与环境交互并将信息聚合到全球网络的智能体,因此经验之间的相关性很低甚至没有。 经验回放需要占用所有经验的大量内存。 由于 A3C 不需要它,因此我们的存储空间和计算时间将减少。
仅通过查看上图就可以了解 A3C 的工作原理。 正如我们所讨论的,我们可以看到有多个工作程序智能体,每个工作智能体都与自己的环境副本进行交互。 然后,工作人员将学习策略并计算策略损失的梯度,并将该梯度更新到全局网络。 每个智能体都会同时更新此全局网络。 A3C 的优点之一是,与 DQN 不同,我们在这里不使用经验回放内存。 实际上,这是 A3C 网络的最大优势之一。 由于我们有多个与环境交互并将信息聚合到全局网络的智能体,因此经验之间的相关性很低甚至没有。 经验回放需要占用所有经验的大量内存。 由于 A3C 不需要它,因此我们的存储空间和计算时间将减少。
# A3C 如何运作
首先,辅助智能体重置全局网络,然后它们开始与环境进行交互。 每个工人遵循不同的探索策略以学习最佳策略。 然后,他们计算价值和策略损失,然后计算损失的梯度并将梯度更新到全球网络。 随着工作人员智能体开始重置全局网络并重复相同的过程,该循环继续进行。 在查看价值和策略损失函数之前,我们将了解优势函数的计算方式。 众所周知,优点是`Q`函数和值函数之间的区别:
首先,辅助智能体重置全局网络,然后它们开始与环境进行交互。 每个工人遵循不同的探索策略以学习最佳策略。 然后,他们计算值和策略损失,然后计算损失的梯度并将梯度更新到全局网络。 随着工作人员智能体开始重置全局网络并重复相同的过程,该循环继续进行。 在查看值和策略损失函数之前,我们将了解优势函数的计算方式。 众所周知,优点是`Q`函数和值函数之间的区别:
![](img/00293.jpeg)
......@@ -47,7 +47,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](img/00295.jpeg)
现在,我们可以将值损失写为折扣收益与状态值之间的平方差:
现在,我们可以将值损失写为折扣收益与状态值之间的平方差:
![](img/00296.jpeg)
......@@ -423,11 +423,11 @@ coord.join(worker_threads)
tensorboard --logdir=logs --port=6007 --host=127.0.0.1
```
这是我们的 A3C 网络。 我们拥有一个全网络和四名员工:
这是我们的 A3C 网络。 我们拥有一个全网络和四名员工:
![](img/00300.jpeg)
让我们扩展我们的全网络; 您可以看到我们有一位演员和一位评论家:
让我们扩展我们的全网络; 您可以看到我们有一位演员和一位评论家:
![](img/00301.jpeg)
......
......@@ -247,7 +247,7 @@ class PolicyGradient:
![](img/00322.jpeg)
其中`M`是来自回放缓冲区的用于训练的样本数。 我们使用根据此损耗`L`计算出的梯度来更新评论网络的权重。
其中`M`是来自回放缓冲区的用于训练的样本数。 我们使用根据此损耗`L`计算出的梯度来更新评论网络的权重。
同样,我们使用策略梯度更新策略网络权重。 然后,我们在目标网络中更新 Actor 和评论家网络的权重。 我们会缓慢更新目标网络的权重,从而提高稳定性。 它称为软替换:
......
......@@ -153,7 +153,7 @@ class EnvWrapper:
# 决斗网络
现在,我们构建决斗 DQN; 我们先构建三个卷积层,然后是两个全连接层,最后一个全连接层将被分为两个单独的层,用于值流和优势流。 我们将使用将值流和优势流结合在一起的聚合层来计算 q 值。 这些层的尺寸如下:
现在,我们构建决斗 DQN; 我们先构建三个卷积层,然后是两个全连接层,最后一个全连接层将被分为两个单独的层,用于值流和优势流。 我们将使用将值流和优势流结合在一起的聚合层来计算 q 值。 这些层的尺寸如下:
* **第 1 层**:32 个`8x8`滤镜,步幅为 4 + RELU
* **第 2 层**:64 个`4x4`滤镜,步幅为 2 + RELU
......
......@@ -14,7 +14,7 @@
# 第 2 章
1. `conda create --name universe python=3.6 anaconda`
2. 使用 Docker,我们可以将应用程序及其依赖关系打包,称为容器,并且我们可以在服务器上运行应用程序,而无需将任何外部依赖关系与打包的 Docker 容器一起使用。
2. 使用 Docker,我们可以将应用及其依赖关系打包,称为容器,并且我们可以在服务器上运行应用,而无需将任何外部依赖关系与打包的 Docker 容器一起使用。
3. `gym.make(env_name)`
4. `from gym import envs`
`print(envs.registry.all())`
......@@ -98,7 +98,7 @@
1. A3C 是“异步优势演员评论家网络”,它使用多个智能体进行并行学习。
2. 三个 A 是异步,优势,演员评论家。
3. 与 DQN 相比,A3C 需要更少的计算能力和训练时间。
4. 所有智能体(员工)都在环境副本中工作,然后全网络汇总他们的经验。
4. 所有智能体(员工)都在环境副本中工作,然后全网络汇总他们的经验。
5. 熵用于确保足够的探索。
6. 请参阅“A3C 的工作方式”部分。
......
# 前言
《Python 人工智能项目》将帮助您利用深度学习和强化学习构建基于人工智能的智能实用系统。 本书中介绍的项目涵盖了与医疗,电子商务,专家系统,监视时尚行业,基于移动的应用程序以及使用卷积神经网络,深度强化学习, 基于 LSTM 的 RNN,受限玻尔兹曼机,生成对抗网络,机器翻译和迁移学习。 本书中说明的构建智能应用程序的理论方面将使读者能够以有趣的方式扩展项目,并使其快速构建具有影响力的 AI 应用程序。 到本书结尾,您将足够熟练地构建自己的智能模型,以轻松解决任何类型的问题。
《Python 人工智能项目》将帮助您利用深度学习和强化学习构建基于人工智能的智能实用系统。 本书中介绍的项目涵盖了与医疗,电子商务,专家系统,监视时尚行业,基于移动的应用以及使用卷积神经网络,深度强化学习, 基于 LSTM 的 RNN,受限玻尔兹曼机,生成对抗网络,机器翻译和迁移学习。 本书中说明的构建智能应用的理论方面将使读者能够以有趣的方式扩展项目,并使其快速构建具有影响力的 AI 应用。 到本书结尾,您将足够熟练地构建自己的智能模型,以轻松解决任何类型的问题。
# 这本书是给谁的
......@@ -16,11 +16,11 @@
第 4 章,“在 GAN 中使用 GAN” 进行时尚行业中的样式迁移,说明如何创建智能 AI 模型以生成具有与给定手袋相似样式的鞋子,反之亦然。 我们将使用原始 GAN 通过 GAN 的定制版本(例如 DiscoGAN 和 CycleGAN)来实现项目。
第 5 章,“视频字幕应用程序”讨论了 CNN 和 LSTM 在视频字幕中的作用,并说明了如何利用序列到视频(视频到文本)架构来构建视频字幕系统。
第 5 章,“视频字幕应用”讨论了 CNN 和 LSTM 在视频字幕中的作用,并说明了如何利用序列到视频(视频到文本)架构来构建视频字幕系统。
第 6 章,“智能推荐系统”讨论了推荐器系统,这些系统是处理数字数据过载问题的信息过滤系统,以便根据这些信息或信息提取信息。 我们将使用潜在分解进行协同过滤,并使用受限玻尔兹曼机来构建推荐系统。
第 7 章,“用于电影评论情感分析的移动应用程序”解释了如何使用机器学习即服务来使移动应用程序受益。 我们将使用 TensorFlow 创建一个 Android 移动应用,该应用将以电影评论作为输入并基于情感分析提供评分。
第 7 章,“用于电影评论情感分析的移动应用”解释了如何使用机器学习即服务来使移动应用受益。 我们将使用 TensorFlow 创建一个 Android 移动应用,该应用将以电影评论作为输入并基于情感分析提供评分。
第 8 章,“用于客户服务的会话式 AI 聊天机器人”,介绍了聊天机器人在此期间的发展历程,并探讨了使用会话聊天机器人的好处。 我们还将研究如何创建聊天机器人以及什么是 LSTM 序列到序列模型。 我们还将为 Twitter 支持聊天机器人构建序列到序列模型。
......
# 人工智能系统的基础
**人工智能****AI**)在过去几年中一直处于技术的最前沿,并已进入主流应用程序,例如专家系统,移动设备上的个性化应用程序, 自然语言处理中的机器翻译,聊天机器人,自动驾驶汽车等。 但是,AI 的定义在很长一段时间以来一直是一个争论的主题。 这主要是因为所谓的 **AI 效应**将过去已经通过 AI 解决的工作归类为非 AI。 根据一位著名的计算机科学家的说法:
**人工智能****AI**)在过去几年中一直处于技术的最前沿,并已进入主流应用,例如专家系统,移动设备上的个性化应用, 自然语言处理中的机器翻译,聊天机器人,自动驾驶汽车等。 但是,AI 的定义在很长一段时间以来一直是一个争论的主题。 这主要是因为所谓的 **AI 效应**将过去已经通过 AI 解决的工作归类为非 AI。 根据一位著名的计算机科学家的说法:
智能是机器尚未完成的一切。
......@@ -10,7 +10,7 @@
许多人会认为机器永远无法达到人类的智能水平,因为用来学习或执行智能任务的 AI 逻辑是由人类编程的,并且它们缺乏人类所拥有的意识和自我意识。 但是,一些研究人员提出了另一种想法,即人类意识和自我意识就像无限循环程序,可以通过反馈从周围的环境中学习。 因此,也有可能将意识和自我意识编程到机器中。 但是,就目前而言,我们将把 AI 的这一哲学方面再留一天,并简单地讨论我们所知道的 AI。
简而言之,AI 可以定义为机器(通常是计算机或机器人)以类人的智力执行任务的能力,例如具有推理,学习经验,归纳,破译含义和拥有的能力等属性。 视觉感知。 我们将坚持这个更实际的定义,而不是关注 AI 效应所带来的哲学内涵以及 AI 奇异性的前景。 尽管可能存在关于 AI 可以实现和不能实现的争论,但基于 AI 的系统的最新成功故事却令人瞩目。 下图描述了 AI 的一些较新的主流应用程序
简而言之,AI 可以定义为机器(通常是计算机或机器人)以类人的智力执行任务的能力,例如具有推理,学习经验,归纳,破译含义和拥有的能力等属性。 视觉感知。 我们将坚持这个更实际的定义,而不是关注 AI 效应所带来的哲学内涵以及 AI 奇异性的前景。 尽管可能存在关于 AI 可以实现和不能实现的争论,但基于 AI 的系统的最新成功故事却令人瞩目。 下图描述了 AI 的一些较新的主流应用:
![](img/623d9065-122c-4066-bfed-634f7ac3cd75.png)
......@@ -362,7 +362,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
如您所见,如果我们可以将遗忘单元格状态保持在一个附近,则梯度将几乎不衰减地流动,并且 LSTM 不会遭受梯度消失的困扰。
我们将在本书中看到的大多数文本处理应用程序将使用 RSTM 的 LSTM 版本。
我们将在本书中看到的大多数文本处理应用将使用 RSTM 的 LSTM 版本。
# 生成对抗网络
......@@ -408,7 +408,7 @@ Figure 1.14: GAN architecture 
![](img/9dd0ea39-6a35-49d3-aa07-47e8242fd453.png)
现在,生成器的任务是最大化实用程序`V(G, D_hat)`或最小化实用程序`-V(G, D_hat)``-V(G, D_hat)`的表达式可以重新安排如下:
现在,生成器的任务是最大化工具`V(G, D_hat)`或最小化工具`-V(G, D_hat)``-V(G, D_hat)`的表达式可以重新安排如下:
![](img/2e348883-3d4b-421d-940e-8c0c8a593af0.png)
......@@ -418,7 +418,7 @@ Figure 1.14: GAN architecture 
因此,我们可以看到生成器最小化`-V(G, D_hat)`等于最小化实际分布`P(x)`与生成器生成的样本分布之间的 Jensen Shannon 散度`G`(即`G(x)`)。
训练 GAN 并不是一个简单的过程,在训练这样的网络时我们需要考虑几个技术方面的考虑。 我们将使用高级 GAN 网络在第 4 章“使用 GANs 的时装行业中的风格迁移”中构建跨域风格迁移应用程序
训练 GAN 并不是一个简单的过程,在训练这样的网络时我们需要考虑几个技术方面的考虑。 我们将使用高级 GAN 网络在第 4 章“使用 GANs 的时装行业中的风格迁移”中构建跨域风格迁移应用。
# 强化学习
......@@ -562,6 +562,6 @@ Figure 1.14: GAN architecture 
现在,我们到了本章的结尾。 我们已经研究了人工神经网络的几种变体,包括用于图像处理目的的 CNN 和用于自然语言处理目的的 RNN。 此外,我们将 RBM 和 GAN 视为生成模型,将自编码器视为无监督方法,可以解决许多问题,例如降噪或解密数据的内部结构。 此外,我们还谈到了强化学习,这对机器人技术和 AI 产生了重大影响。
您现在应该熟悉本书其余各章中构建智能 AI 应用程序时将要使用的核心技术。 在构建应用程序时,我们将在需要时进行一些技术上的改动。 建议不熟悉深度学习的读者探索更多有关本章涉及的核心技术的信息,以便更全面地理解。
您现在应该熟悉本书其余各章中构建智能 AI 应用时将要使用的核心技术。 在构建应用时,我们将在需要时进行一些技术上的改动。 建议不熟悉深度学习的读者探索更多有关本章涉及的核心技术的信息,以便更全面地理解。
在随后的章节中,我们将讨论实用的 AI 项目,并使用本章中讨论的技术来实现它们。 在第 2 章,“迁移学习”中,我们将从使用迁移学习实现医疗保健应用程序进行医学图像分析开始。 我们希望您期待您的参与。
\ No newline at end of file
在随后的章节中,我们将讨论实用的 AI 项目,并使用本章中讨论的技术来实现它们。 在第 2 章,“迁移学习”中,我们将从使用迁移学习实现医疗保健应用进行医学图像分析开始。 我们希望您期待您的参与。
\ No newline at end of file
......@@ -62,7 +62,7 @@
# 糖尿病视网膜病变数据集
用于构建糖尿病性视网膜病变检测应用程序的数据集可从 Kaggle 获得,[可从以下链接下载](https://www.kaggle.com/c/%20classroom-diabetic-retinopathy-detection-competition/data)
用于构建糖尿病性视网膜病变检测应用的数据集可从 Kaggle 获得,[可从以下链接下载](https://www.kaggle.com/c/%20classroom-diabetic-retinopathy-detection-competition/data)
训练和保留测试数据集都存在于`train_dataset.zip`文件中,该文件可在前面的链接中找到。
......@@ -1005,7 +1005,7 @@ def inception_pseudo(dim=224,freeze_layers=30,full_freeze='N'):
# 使用 keras `utils.sequence`作为生成器
Keras 具有一个名为`keras.utils.sequence()`的优秀批量生成器,可帮助您以极大的灵活性自定义批量创建。 实际上,使用`keras.utils.sequence()`可以设计整个周期流水线。 我们将在此回归问题中使用此实用程序以习惯该实用程序。 对于迁移学习问题,我们可以使用`keras.utils.sequence()`设计生成器类,如下所示:
Keras 具有一个名为`keras.utils.sequence()`的优秀批量生成器,可帮助您以极大的灵活性自定义批量创建。 实际上,使用`keras.utils.sequence()`可以设计整个周期流水线。 我们将在此回归问题中使用此工具以习惯该工具。 对于迁移学习问题,我们可以使用`keras.utils.sequence()`设计生成器类,如下所示:
```py
class DataGenerator(keras.utils.Sequence):
......
# 神经机器翻译
**机器翻译**简而言之,是指使用计算机将文本从一种语言翻译成另一种语言。 它是计算机语言学的一个分支,已经发展了几年。 目前,在美国,翻译业是一个价值 400 亿美元的产业,并且在欧洲和亚洲也正在快速发展。 翻译存在巨大的社会,政府,经济和商业需求,并且 Google,Facebook,eBay 等公司在其应用程序中广泛使用它。 尤其是 Google 的神经翻译系统是目前最先进的翻译系统之一,能够仅用一种模型执行多种语言的翻译。
**机器翻译**简而言之,是指使用计算机将文本从一种语言翻译成另一种语言。 它是计算机语言学的一个分支,已经发展了几年。 目前,在美国,翻译业是一个价值 400 亿美元的产业,并且在欧洲和亚洲也正在快速发展。 翻译存在巨大的社会,政府,经济和商业需求,并且 Google,Facebook,eBay 等公司在其应用中广泛使用它。 尤其是 Google 的神经翻译系统是目前最先进的翻译系统之一,能够仅用一种模型执行多种语言的翻译。
早期的机器翻译系统首先将文本中的单词和短语翻译成所需目标语言的相关替代词。 但是,由于以下原因,通过这些简单的技术实现的翻译质量受到限制:
......
......@@ -746,4 +746,4 @@ Epoch: [ 0] [ 19/ 156] time: 13.7525
现在,我们到了本章的结尾。 您现在应该精通 DiscoGAN 的技术知识和实现复杂性。 我们在本章中探讨的概念可用于实现各种生成性对抗性网络,这些网络具有适合当前问题的细微变化。 DiscoGAN 网络的端到端实现位于 GitHub 存储库中,位于[这里](https://github.com/PacktPublishing/Intelligent-Projects-using-Python/tree/master/Chapter04)
在第 5 章,“视频字幕应用程序”中,我们将研究视频到文本翻译应用程序,它们属于人工智能领域的专家系统。
\ No newline at end of file
在第 5 章,“视频字幕应用”中,我们将研究视频到文本翻译应用,它们属于人工智能领域的专家系统。
\ No newline at end of file
......@@ -10,7 +10,7 @@
* 使用**受限玻尔兹曼机****RBM**)构建推荐系统
* 训练 RBM 的对比差异
* 使用 RBM 的协同过滤
* 使用 RBM 实现协同过滤应用程序
* 使用 RBM 实现协同过滤应用
# 技术要求
......@@ -255,7 +255,7 @@ from surprise.model_selection import cross_validate
from surprise.model_selection import train_test_split
```
可以下载`100K Movie lens`数据集,并使用`surprise`中的`Dataset.load_builtin`实用程序将其提供给代码。 我们将数据分为`80``20`比率的训练和保持测试集。 数据处理代码行如下:
可以下载`100K Movie lens`数据集,并使用`surprise`中的`Dataset.load_builtin`工具将其提供给代码。 我们将数据分为`80``20`比率的训练和保持测试集。 数据处理代码行如下:
```py
# Load the movie lens 10k data and split the data into train test files(80:20)
......@@ -715,4 +715,4 @@ test RMSE : 1.1999306704742303
阅读完本章后,您现在应该能够使用受限玻尔兹曼机构建智能推荐系统,并根据您的领域和要求以有趣的方式对其进行扩展。 有关本章中说明的项目的详细实现,请参考[此项目的 GiHub 链接](https://github.com/PacktPublishing/Intelligent-Projects-using-Python/blob/master/Chapter06)
在下一章中,我们将处理移动应用程序的创建,以执行电影评论的情感分析。 我期待您的参与。
\ No newline at end of file
在下一章中,我们将处理移动应用的创建,以执行电影评论的情感分析。 我期待您的参与。
\ No newline at end of file
此差异已折叠。
......@@ -295,7 +295,7 @@ def train_model(self,model,X_train,X_test,y_train,y_test):
```
`train_model`函数的开头,我们创建`input_y_train``input_y_test`,它们分别是`y_train``y_test`的副本,并从它们移了一个时间步,以便它们可以用作解码器每个时间步的前一个单词的输入。 这些移位序列的第一个单词是`START`关键字,它在解码器 LSTM 的第一时间步输入。 `include_start_token`定制实用程序功能如下:
`train_model`函数的开头,我们创建`input_y_train``input_y_test`,它们分别是`y_train``y_test`的副本,并从它们移了一个时间步,以便它们可以用作解码器每个时间步的前一个单词的输入。 这些移位序列的第一个单词是`START`关键字,它在解码器 LSTM 的第一时间步输入。 `include_start_token`定制工具功能如下:
```py
def include_start_token(self,Y):
......
......@@ -418,11 +418,11 @@ SVHN 是一个现实世界的数据集,由于它在对象识别算法中的使
![](img/ddf54bf8-41b6-4210-92af-e3c4f8ac7d3f.png)
为了最大化目标函数,我们通常使用梯度上升,而为了最小化成本函数,我们使用梯度下降。 前面的优化问题可以分为两部分:生成器和判别器分别通过梯度上升和梯度下降依次优化效用函数。 在优化过程中的任何步骤`t`上,判别器都将通过使实用程序最小化来尝试移至新状态,如下所示:
为了最大化目标函数,我们通常使用梯度上升,而为了最小化成本函数,我们使用梯度下降。 前面的优化问题可以分为两部分:生成器和判别器分别通过梯度上升和梯度下降依次优化效用函数。 在优化过程中的任何步骤`t`上,判别器都将通过使工具最小化来尝试移至新状态,如下所示:
![](img/c113c328-2c94-47ed-80d2-1f63f3820b12.png)
替代地,生成器将尝试最大化相同的效用。 由于鉴别符`D`没有生成器的任何参数,因此实用程序的第二项不会影响生成器的优化。 可以这样表示:
替代地,生成器将尝试最大化相同的效用。 由于鉴别符`D`没有生成器的任何参数,因此工具的第二项不会影响生成器的优化。 可以这样表示:
![](img/ee7b47ef-5a40-4a4c-8dcc-57425720a85a.png)
......@@ -719,4 +719,4 @@ python captcha_gan.py generate-captcha --gen_input_dim 100 --num_images 200 --mo
# 总结
这样,我们到了本章的结尾。 与本章相关的所有代码都可以[在 GitHub 链接中找到](https://github.com/PacktPublishing/Intelligent-Projects-using-Python/tree/master/Chapter10)。 现在,您将对深度学习如何影响验证码有一个清晰的认识。 在频谱的一端,我们可以看到使用具有深度学习的 AI 应用程序的机器人如何轻松地解决 CAPTCHA。 但是,另一方面,我们看到了如何使用深度学习来利用给定的数据集并根据随机噪声创建新的验证码。 您可以在本章中扩展有关生成对抗网络的技术知识,以使用深度学习构建智能的验证码生成系统。 现在,我们到本书的结尾。 我希望通过九个基于人工智能的实用应用程序的旅程是一次充实的旅程。 祝一切顺利!
\ No newline at end of file
这样,我们到了本章的结尾。 与本章相关的所有代码都可以[在 GitHub 链接中找到](https://github.com/PacktPublishing/Intelligent-Projects-using-Python/tree/master/Chapter10)。 现在,您将对深度学习如何影响验证码有一个清晰的认识。 在频谱的一端,我们可以看到使用具有深度学习的 AI 应用的机器人如何轻松地解决 CAPTCHA。 但是,另一方面,我们看到了如何使用深度学习来利用给定的数据集并根据随机噪声创建新的验证码。 您可以在本章中扩展有关生成对抗网络的技术知识,以使用深度学习构建智能的验证码生成系统。 现在,我们到本书的结尾。 我希望通过九个基于人工智能的实用应用的旅程是一次充实的旅程。 祝一切顺利!
\ No newline at end of file
......@@ -291,7 +291,7 @@ def CMatrix(CM, labels=['pay', 'default']):
![](img/f880f3a8-3521-4ee4-a837-7277b036abb9.png)
上面的屏幕截图显示了这四个模型的相似精度,但是对于此特定应用程序,最重要的指标是`recall`指标。
上面的屏幕截图显示了这四个模型的相似精度,但是对于此特定应用,最重要的指标是`recall`指标。
以下屏幕截图显示,具有最佳召回率和准确性的模型是随机森林模型:
......
......@@ -240,7 +240,7 @@ boosting_test_mse = cross_validate(estimator=boosting,X=X,y=y,
# 超参数调优简介
用于为特定数据集选择最佳估计量或为所有超参数选择最佳值的方法称为**超参数调优**。 超参数是无法在估计器中直接学习的参数。 它们的值由建模者决定。
用于为特定数据集选择最佳估计量或为所有超参数选择最佳值的方法称为**超参数调优**。 超参数是无法在估计器中直接学习的参数。 它们的值由建模者决定。
例如,在`RandomForestClassifier`对象中,有很多超参数,例如`n_estimators``max_depth``max_features``min_samples_split`。 建模人员确定这些超参数的值。
......
......@@ -93,7 +93,7 @@
![](img/7d176673-5b2a-4baf-bcca-c02a1d8d8d1c.png)
以下屏幕快照显示了我们从此统计测试的应用程序收到的 p 值:
以下屏幕快照显示了我们从此统计测试的应用收到的 p 值:
![](img/1f7a09ea-105f-424e-8e4c-9c4887a7ced9.png)
......@@ -344,7 +344,7 @@ RFE 是我们将使用`RandomForestClassifier`模型的第三种技术,请记
![](img/af57d7ee-8abb-400f-b988-7d53e42ed206.png)
如您在前面的屏幕截图中所见,我们使用的阈值为 0.2。 该模型生成`71.39`% 的召回率和`37.38`的精度。 在这里,精度是相似的,但是,如前所述,召回率可能是我们应该关注的指标,因为与前一个指标略有不同。 我们对该模型有更好的回忆。 更改可能只是 2% 或 3%,看起来似乎并不多,但是请记住,在这些财务应用程序中,实际上提高 1% 或 2% 可能意味着很多钱。 因此,使用这种小特征工程技术,我们对模型的预测能力有了一点改进。 让我们在以下屏幕截图中查看功能的重要性:
如您在前面的屏幕截图中所见,我们使用的阈值为 0.2。 该模型生成`71.39`% 的召回率和`37.38`的精度。 在这里,精度是相似的,但是,如前所述,召回率可能是我们应该关注的指标,因为与前一个指标略有不同。 我们对该模型有更好的回忆。 更改可能只是 2% 或 3%,看起来似乎并不多,但是请记住,在这些财务应用中,实际上提高 1% 或 2% 可能意味着很多钱。 因此,使用这种小特征工程技术,我们对模型的预测能力有了一点改进。 让我们在以下屏幕截图中查看功能的重要性:
![](img/9225a3eb-041c-46f0-bc51-d6724b30d4f0.png)
......
......@@ -93,7 +93,7 @@
* 这些模型使用某种形式的梯度下降通过反向传播进行训练
* 他们通常需要大量数据和大量计算能力才能使这些模型表现出色
* 这些模型现在被认为是许多应用程序的最新技术,例如计算机视觉,语音识别和游戏
* 这些模型现在被认为是许多应用的最新技术,例如计算机视觉,语音识别和游戏
# MLP 模型的元素
......
# 将 TensorFlow 和深度神经网络用于预测分析
TensorFlow 是 **Google Brain Team** 开发的开源库。 它用于大型机器学习应用程序(例如神经网络)中,并用于进行数值计算。 开发人员可以使用 TensorFlow 创建数据流图。 这些图显示了数据的移动。 TensorFlow 可用于为各种应用(例如图像识别,机器语言翻译和自然语言处理)训练和运行深度神经网络。
TensorFlow 是 **Google Brain Team** 开发的开源库。 它用于大型机器学习应用(例如神经网络)中,并用于进行数值计算。 开发人员可以使用 TensorFlow 创建数据流图。 这些图显示了数据的移动。 TensorFlow 可用于为各种应用(例如图像识别,机器语言翻译和自然语言处理)训练和运行深度神经网络。
我们已经知道预测分析是关于提供未知事件的预测。 我们将在这里将其与 TensorFlow 一起使用。
......@@ -258,9 +258,9 @@ y = tf.placeholder(y_train.dtype)
![](img/e9121538-21c3-43f6-8fe0-59ecaa8da16e.png)
在最后一次测试的 MSE(周期 40)中,我们获得了训练和测试的 MSE 的最终值。
在最后一次测试的 MSE(周期 40)中,我们获得了训练和测试的 MSE 的最终值。
我们从网络获得了实际的预测,并且值相对接近。 在这里,我们可以看到预测价格。 对于廉价钻石,该网络产生的价值相对接近。 对于非常昂贵的钻石,网络产生了很高的价值。 而且,预测值与观察值非常接近。 以下屏幕截图显示了我们从网络获得的实际值和预测值:
我们从网络获得了实际的预测,并且值相对接近。 在这里,我们可以看到预测价格。 对于廉价钻石,该网络产生的值相对接近。 对于非常昂贵的钻石,网络产生了很高的值。 而且,预测值与观察值非常接近。 以下屏幕截图显示了我们从网络获得的实际值和预测值:
![](img/c37daf44-699d-4ec7-a142-2c8cfb057b90.png)
......
# TensorFlow 2.0 入门
本书旨在使读者熟悉 **TensorFlow 2.0****TF 2.0**)中引入的新功能,并在构建机器学习应用程序时使您发挥其潜力。 本章概述了 TF 2.0 中新的架构和 API 级别的变化。 我们将介绍 TF 2.0 的安装和设置,并将比较有关 **TensorFlow 1.x****TF 1.x**)的更改,例如 Keras API 和 Layer API。 我们还将涵盖丰富的扩展,例如 TensorFlow 概率,Tensor2Tensor,参差不齐的 Tensors,以及新的针对损失函数的自定义训练逻辑。 本章还总结了对层 API 和其他 API 的更改。
本书旨在使读者熟悉 **TensorFlow 2.0****TF 2.0**)中引入的新功能,并在构建机器学习应用时使您发挥其潜力。 本章概述了 TF 2.0 中新的架构和 API 级别的变化。 我们将介绍 TF 2.0 的安装和设置,并将比较有关 **TensorFlow 1.x****TF 1.x**)的更改,例如 Keras API 和 Layer API。 我们还将涵盖丰富的扩展,例如 TensorFlow 概率,Tensor2Tensor,参差不齐的 Tensors,以及新的针对损失函数的自定义训练逻辑。 本章还总结了对层 API 和其他 API 的更改。
本章将涵盖以下主题:
......
......@@ -136,7 +136,7 @@ model_using_generator = tf.keras.Sequential(layers=get_layers(10))
# 训练模型
**训练模型**指的是为不同网络组件学习权重的过程,这些过程在给定的一组示例中将损失函数降至最低。 简而言之,训练神经网络意味着找到网络值的最佳组合。 如您所知,训练过程也与评估和预测过程紧密相关。 借助抽象的强大功能,Keras 提供了强大的高级界面来实现和管理端到端的训练过程。 让我们看一下它为使用顺序和函数式 API 创建的模型提供的训练 API。 它为此阶段提供的一些功能如下:
**训练模型**指的是为不同网络组件学习权重的过程,这些过程在给定的一组示例中将损失函数降至最低。 简而言之,训练神经网络意味着找到网络值的最佳组合。 如您所知,训练过程也与评估和预测过程紧密相关。 借助抽象的强大功能,Keras 提供了强大的高级界面来实现和管理端到端的训练过程。 让我们看一下它为使用顺序和函数式 API 创建的模型提供的训练 API。 它为此阶段提供的一些功能如下:
* `model.compile()`:此功能用于配置训练过程。 用户指定详细信息,例如优化器的类型(以及超参数(如果有的话)),损失函数的类型以及要评估的指标。 这些也是可以使用 TensorBoard 可视化的指标。 下面的示例代码片段描述了一个带有**随机梯度下降****SGD**)优化器,`CategoricalCrossentropy`损失函数和记录`Accuracy`指标的样本训练配置:
......@@ -363,7 +363,7 @@ import tensorflow as tfimport tensorflow.keras as keras
# 估计器
从头开始构建机器学习模型时,从业人员通常会经历多个高级阶段。 其中包括训练,评估,预测和装运,以供大规模使用(或出口)。 到目前为止,开发人员必须编写自定义代码才能实现这些步骤中的每个步骤。 在所有应用程序中,运行这些过程所需的许多样板代码都保持不变。 更糟的是,此代码很容易需要在低抽象级别上进行操作。 这些问题放在一起,可能会在开发过程中造成极大的效率低下。
从头开始构建机器学习模型时,从业人员通常会经历多个高级阶段。 其中包括训练,评估,预测和装运,以供大规模使用(或出口)。 到目前为止,开发人员必须编写自定义代码才能实现这些步骤中的每个步骤。 在所有应用中,运行这些过程所需的许多样板代码都保持不变。 更糟的是,此代码很容易需要在低抽象级别上进行操作。 这些问题放在一起,可能会在开发过程中造成极大的效率低下。
TensorFlow 团队尝试通过引入 Estimators 来解决此问题,Estimators 是一个高级 API,旨在抽象出在上述阶段执行不同任务时产生的许多复杂性。 具体来说,估计器是用于封装以下类别任务的高级 API:
......@@ -390,13 +390,13 @@ TensorFlow 团队尝试通过引入 Estimators 来解决此问题,Estimators
* 处理异常
* 创建检查点文件并从故障中恢复
* 为 TensorBoard 保存摘要
* 使用 Estimators 编写应用程序时,程序员可以灵活地将数据输入管道与模型分开。 通过这种分离,可以轻松地尝试使用不同的数据集和不同的数据源。
* 使用 Estimators 编写应用时,程序员可以灵活地将数据输入管道与模型分开。 通过这种分离,可以轻松地尝试使用不同的数据集和不同的数据源。
在 TF 2.0 中,Keras 已经提供了 Estimators 公开的许多功能。 如果您只是入门,那么 Keras 是一个更容易学习的 API。 建议初学者在评估器上使用 Keras API。 一旦用例需要使用 Estimators,就可以查找并了解更多信息。 有关详细指南,请访问[这里](https://www.tensorflow.org/guide/estimators)
# 评估 TensorFlow 图
TensorFlow 的中心思想是,要求程序员创建计算图以指定需要执行的操作才能获得所需的结果。 然后,程序员指定了硬件和其他环境参数,以针对给定的一组输入来计算此计算图的输出。 这意味着在程序员明确计算图形之前,值和变量没有任何值。 当程序员真正想要的只是数量的值时,这增加了程序员创建和管理会话的开销。
TensorFlow 的中心思想是,要求程序员创建计算图以指定需要执行的操作才能获得所需的结果。 然后,程序员指定了硬件和其他环境参数,以针对给定的一组输入来计算此计算图的输出。 这意味着在程序员明确计算图形之前,值和变量没有任何值。 当程序员真正想要的只是数量的值时,这增加了程序员创建和管理会话的开销。
TF 2.0 旨在通过更改评估和计算基础计算图的方式来解决此问题。 用一个句子,TF ...
......
......@@ -226,7 +226,7 @@ model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.1),
model.fit(train_dataset, epochs=10, callbacks=[tensorboard_callback], validation_data=val_dataset)
```
回调是模型训练期间特定实用程序的挂钩。 它们被传递给`fit(...)`函数以自定义和扩展训练过程中模型的行为。 有很多有用的内置回调-以下是其中一些:
回调是模型训练期间特定工具的挂钩。 它们被传递给`fit(...)`函数以自定义和扩展训练过程中模型的行为。 有很多有用的内置回调-以下是其中一些:
* `tf.keras.callbacks.ModelCheckpoint`:定期保存模型的检查点
* `tf.keras.callbacks.LearningRateScheduler`:动态更改学习率
......
......@@ -25,7 +25,7 @@ import tensorflow as tf
# 机器学习工作流程 - 推理阶段
机器学习应用程序的最常见子集之一遵循*构建一次,并多次使用*范式。 这种类型的应用程序涉及所谓的推理阶段。 在推断阶段,开发人员必须专注于运行模型以满足用户需求。 满足用户需求可能涉及从用户那里接受输入并对其进行处理以返回适当的输出。 下图描述了典型的高级机器学习应用程序工作流程:
机器学习应用的最常见子集之一遵循*构建一次,并多次使用*范式。 这种类型的应用涉及所谓的推理阶段。 在推断阶段,开发人员必须专注于运行模型以满足用户需求。 满足用户需求可能涉及从用户那里接受输入并对其进行处理以返回适当的输出。 下图描述了典型的高级机器学习应用工作流程:
![](img/4dba2f20-e39c-4cce-98ba-9f2d018a4f3e.png)
......@@ -33,7 +33,7 @@ import tensorflow as tf
# 从推理的角度理解模型
实现基于机器学习的应用程序的开发人员可以依靠的一件事是使生活变得轻松,无论所服务模型中的实际计算如何,向用户提供模型的过程或多或少都是相同的。 这意味着,如果实现正确,工程师可能不必在每次数据科学家更新模型时都重新构建部署管道。 这可以通过利用抽象的力量来实现。 这里的一个关键抽象是模型存储和加载的格式。 通过引入标准化格式,TF 2.0 使得在一个环境中训练模型然后在各个平台上使用它变得容易。 在 TF 2.0 中,执行此操作的标准方法是通过`SavedModel`格式。 这种标准化格式类似于软件开发管道中的构建工件。 读者可以将模型工件视为快照,可用于重新创建模型而无需访问创建模型的实际代码。
实现基于机器学习的应用的开发人员可以依靠的一件事是使生活变得轻松,无论所服务模型中的实际计算如何,向用户提供模型的过程或多或少都是相同的。 这意味着,如果实现正确,工程师可能不必在每次数据科学家更新模型时都重新构建部署管道。 这可以通过利用抽象的力量来实现。 这里的一个关键抽象是模型存储和加载的格式。 通过引入标准化格式,TF 2.0 使得在一个环境中训练模型然后在各个平台上使用它变得容易。 在 TF 2.0 中,执行此操作的标准方法是通过`SavedModel`格式。 这种标准化格式类似于软件开发管道中的构建工件。 读者可以将模型工件视为快照,可用于重新创建模型而无需访问创建模型的实际代码。
实际上,在推理时,模型被简化为一个黑盒子,它具有一组预定义的输入和输出以及一个与底层模型进行交互的统一接口。 开发人员现在要做的就是建立在给定环境中实现和执行黑匣子所需的基础结构。 在以下各节中,我们将学习如何构建管道以服务于各种流行的软件和硬件环境中的模型。
......@@ -244,7 +244,7 @@ Result for output key output_0:
# 后端服务器上的推理
在当今世界,分布式系统无处不在。 从我们浏览的网站到我们在手机上使用的应用程序范围,当我们不使用分布式系统时几乎没有一天。 鉴于这种无所不在的性质,将这种范例用于构建机器学习系统显然是一个选择。 构建分布式系统的典型模式是在后端服务器上执行资源密集型(和数据敏感型)计算,同时将较轻(且相对独立)的计算任务推向用户设备。 机器学习应用程序的很大一部分属于资源密集型类别。 此外,机器学习模型是使用数据构建的。 在现实世界中的很大一部分...
在当今世界,分布式系统无处不在。 从我们浏览的网站到我们在手机上使用的应用范围,当我们不使用分布式系统时几乎没有一天。 鉴于这种无所不在的性质,将这种范例用于构建机器学习系统显然是一个选择。 构建分布式系统的典型模式是在后端服务器上执行资源密集型(和数据敏感型)计算,同时将较轻(且相对独立)的计算任务推向用户设备。 机器学习应用的很大一部分属于资源密集型类别。 此外,机器学习模型是使用数据构建的。 在现实世界中的很大一部分...
# TensorFlow 服务
......@@ -332,7 +332,7 @@ TensorFlow.js 的引入使在 JavaScript 环境中运行 TensorFlow 模型成为
您可能还记得,在前面的部分中,我们简要讨论了分布式系统。 在那里,我们讨论了主要在主机服务器上执行基于机器学习的计算的场景。 在这里,我们将研究在浏览器中在用户端执行这些计算的场景。 这样做的两个重要优点如下:
* 计算被推送到用户端。 主机不必担心为执行计算而管理服务器。
* 将模型推送到用户端意味着不必将用户数据发送到主机。 对于使用敏感或私有用户数据的应用程序来说,这是一个巨大的优势。 因此,浏览器中的推理成为对隐私至关重要的机器学习应用程序的绝佳选择:
* 将模型推送到用户端意味着不必将用户数据发送到主机。 对于使用敏感或私有用户数据的应用来说,这是一个巨大的优势。 因此,浏览器中的推理成为对隐私至关重要的机器学习应用的绝佳选择:
![](img/ed83cc9d-b1bb-4e26-b251-f69247244b1b.png)
......@@ -350,7 +350,7 @@ Detailed resources for getting started with TensorFlow.js are available at the f
# 移动和物联网设备上的推理
在过去几年中,智能手机的使用呈指数增长,并且以不减缓的方式持续增长。 其他物联网设备在我们的日常生活中也变得越来越普遍。 使用率的这些上升趋势对机器学习系统产生了有趣的影响。 与普通主机相比,这些平台通常资源有限。 结果,需要其他优化来在此类设备上进行推理。 TensorFlow 平台支持构建机器学习和基于深度学习的应用程序,这些应用程序可以在不同类型的边缘设备(例如手机和其他 IoT 设备)上运行。 实现此目的的主要工具是...
在过去几年中,智能手机的使用呈指数增长,并且以不减缓的方式持续增长。 其他物联网设备在我们的日常生活中也变得越来越普遍。 使用率的这些上升趋势对机器学习系统产生了有趣的影响。 与普通主机相比,这些平台通常资源有限。 结果,需要其他优化来在此类设备上进行推理。 TensorFlow 平台支持构建机器学习和基于深度学习的应用,这些应用可以在不同类型的边缘设备(例如手机和其他 IoT 设备)上运行。 实现此目的的主要工具是...
# 总结
......
......@@ -97,11 +97,11 @@ outputTensor = try interpreter.output(at: 0)
}
```
然后可以处理结果并将其显示在应用程序中。
然后可以处理结果并将其显示在应用中。
# 在低功率机器上运行 TFLite
TFLite 能够在低功耗和低二进制计算机上运行的能力使其在嵌入式 Linux 计算机上运行时非常强大。 TFLite 可以在许多流行的嵌入式 Linux 机器以及 Coral Dev Board 上运行。 在本节中,我们将介绍在三个设备上 TFLite 的构建,编译和运行。 涵盖的第一个设备是带有 Edge TPU 处理器的 Coral Dev Board,第二个设备是 NVIDIA Jetson Nano,最后一个是 Raspberry Pi。 NVIDIA Jetson Nano 是 NVIDIA 的小型而强大的计算机,可在图像分类,目标检测,分割和语音等应用程序中并行运行多个神经网络。
TFLite 能够在低功耗和低二进制计算机上运行的能力使其在嵌入式 Linux 计算机上运行时非常强大。 TFLite 可以在许多流行的嵌入式 Linux 机器以及 Coral Dev Board 上运行。 在本节中,我们将介绍在三个设备上 TFLite 的构建,编译和运行。 涵盖的第一个设备是带有 Edge TPU 处理器的 Coral Dev Board,第二个设备是 NVIDIA Jetson Nano,最后一个是 Raspberry Pi。 NVIDIA Jetson Nano 是 NVIDIA 的小型而强大的计算机,可在图像分类,目标检测,分割和语音等应用中并行运行多个神经网络。
# 在 Edge TPU 处理器上运行 TFLite
......@@ -141,13 +141,13 @@ Edge TPU 的性能远远优于许多最强大的 CPU。 当在带或不带 USB
# 在 NVIDIA Jetson Nano 上运行 TF
NVIDIA Jetson Nano 是另一种嵌入式设备,可为机器学习应用程序提供强大的计算能力。 Jetson Nano 的前提与 Edge TPU 不同,因为 Jetson Nano 是一款小型而功能强大的 GPU 计算机。 Jetson Nano 可以像配置用于深度学习的任何机器一样使用,并且可以轻松安装 GPU 版本的 TF。 也不需要安装 CUDA 和 cuDNN,因为它已预先安装在系统上。
NVIDIA Jetson Nano 是另一种嵌入式设备,可为机器学习应用提供强大的计算能力。 Jetson Nano 的前提与 Edge TPU 不同,因为 Jetson Nano 是一款小型而功能强大的 GPU 计算机。 Jetson Nano 可以像配置用于深度学习的任何机器一样使用,并且可以轻松安装 GPU 版本的 TF。 也不需要安装 CUDA 和 cuDNN,因为它已预先安装在系统上。
# 比较 TFLite 和 TF
如前所述,TFLite 模型与普通 TF 模型有很大不同。 TFLite 模型更快,更小且计算量更少。 这种区别来自 TFLite 模型的特殊存储和解释方式。
速度的首次提高来自模型存储的基本格式。`.tflite`模型文件以`FlatBuffer`格式存储,其中包含模型的简化形式和二进制形式。 `FlatBuffer`是适用于多种流行语言的高效跨平台序列化库,由 Google 创建,用于游戏开发和其他对性能至关重要的应用程序`FlatBuffer`格式在有效序列化模型数据并提供对这些数据的快速访问,同时保持较小的二进制大小方面起着至关重要的作用。 由于大量的数字数据,这对于模型存储很有用,这通常会在读取操作中产生很多延迟。 通过使用`FlatBuffers`,TFLite 可以绕过许多传统的文件解析和非解析操作,这在计算上非常昂贵。
速度的首次提高来自模型存储的基本格式。`.tflite`模型文件以`FlatBuffer`格式存储,其中包含模型的简化形式和二进制形式。 `FlatBuffer`是适用于多种流行语言的高效跨平台序列化库,由 Google 创建,用于游戏开发和其他对性能至关重要的应用。 `FlatBuffer`格式在有效序列化模型数据并提供对这些数据的快速访问,同时保持较小的二进制大小方面起着至关重要的作用。 由于大量的数字数据,这对于模型存储很有用,这通常会在读取操作中产生很多延迟。 通过使用`FlatBuffers`,TFLite 可以绕过许多传统的文件解析和非解析操作,这在计算上非常昂贵。
TFLite 模型优化也一直延伸到设备上的硬件。 这是因为,由于电话处理器和嵌入式 CPU 的限制,必须以超高效标准使用所有处理器。 在 Android 上运行 TFLite 时,可访问 Android 神经​​网络 API,该接口可访问 Android 中的硬件加速推理操作,并且已接口,以利用有利的硬件加速来使用所使用的设备。 TFLite 还可以在电话和其他设备中使用内置的 GPU,从而使具有过多可并行化操作和量化敏感精度的模型的速度提高了近 7 倍。
......@@ -163,9 +163,9 @@ Google 为语音和视觉应用发布了自己的制造商套件,称为 AIY。
# 语音套件
语音工具包提供了构建自然语言处理器并将其连接到 Google Assistant 或 Cloud Speech-to-Text 服务的功能。 该套件随附 Raspberry Pi Zero,以及定制设计的语音引擎盖和用于音频功能的扬声器。 该套件还随附可插入 Pi 的 SD 卡,以及用于许多最常见应用程序的大量演示,示例和摘要。 它还带有一个在设备上运行 Google Assistant 并将其转变为智能家居设备的应用程序
语音工具包提供了构建自然语言处理器并将其连接到 Google Assistant 或 Cloud Speech-to-Text 服务的功能。 该套件随附 Raspberry Pi Zero,以及定制设计的语音引擎盖和用于音频功能的扬声器。 该套件还随附可插入 Pi 的 SD 卡,以及用于许多最常见应用的大量演示,示例和摘要。 它还带有一个在设备上运行 Google Assistant 并将其转变为智能家居设备的应用
要开始使用语音工具包,请按照[这个页面](https://aiyprojects.withgoogle.com/voice/#assembly-guide)上的说明构建设备。 该设备设计合理,易于组装和设置。 要设置设备,可以使用计算机或手机。 该套件的设置非常简单,可以通过**安全外壳****SSH**)或 HDMI 连接来完成。 完成后,可以运行许多演示来进一步了解和探索该工具包,例如前面提到的 Google Assistant 应用程序
要开始使用语音工具包,请按照[这个页面](https://aiyprojects.withgoogle.com/voice/#assembly-guide)上的说明构建设备。 该设备设计合理,易于组装和设置。 要设置设备,可以使用计算机或手机。 该套件的设置非常简单,可以通过**安全外壳****SSH**)或 HDMI 连接来完成。 完成后,可以运行许多演示来进一步了解和探索该工具包,例如前面提到的 Google Assistant 应用。
语音工具包可以完成的一些事情包括创建自定义语音用户界面和使用助手控制 IoT 设备。
......@@ -181,6 +181,6 @@ Google 为语音和视觉应用发布了自己的制造商套件,称为 AIY。
# 总结
TFLite 是 TF2.0 的一项功能,它采用 TF 模型并对其进行压缩和优化,以在嵌入式 Linux 设备或低功耗和低二进制设备上运行。 可以通过三种方式将 TF 模型转换为 TFLite 模型:从已保存的模型,`tf.keras`模型或具体函数。 转换模型后,将创建一个`.tflite`文件,然后可以将其传输到所需的设备并使用 TFLite 解释器运行。 该模型经过优化以使用硬件加速,并以`FlatBuffer`格式存储,以提高读取速度。 可以将其他优化技术应用于该模型,例如量化,以最小的精度权衡将 32 位浮点数转换为 8 位定点数。 可以在 TFLite 上运行的某些设备是 Edge TPU,NVIDIA Jetson Nano 和 Raspberry Pi。 Google 还提供了两个工具包,可为用户提供创建与视觉和语音相关的机器学习应用程序所需的硬件。
TFLite 是 TF2.0 的一项功能,它采用 TF 模型并对其进行压缩和优化,以在嵌入式 Linux 设备或低功耗和低二进制设备上运行。 可以通过三种方式将 TF 模型转换为 TFLite 模型:从已保存的模型,`tf.keras`模型或具体函数。 转换模型后,将创建一个`.tflite`文件,然后可以将其传输到所需的设备并使用 TFLite 解释器运行。 该模型经过优化以使用硬件加速,并以`FlatBuffer`格式存储,以提高读取速度。 可以将其他优化技术应用于该模型,例如量化,以最小的精度权衡将 32 位浮点数转换为 8 位定点数。 可以在 TFLite 上运行的某些设备是 Edge TPU,NVIDIA Jetson Nano 和 Raspberry Pi。 Google 还提供了两个工具包,可为用户提供创建与视觉和语音相关的机器学习应用所需的硬件。
在下一章中,我们将学习如何从 TF1.x 迁移到 TF2.0。
\ No newline at end of file
......@@ -112,7 +112,7 @@ model.fit(dataset)
为了向 TF 1.x 编写的代码提供向后兼容性,在 TF 2.0 中引入了`tf.compat.v1`模块。 `tf.compat.v1`模块替换了所有 TF 1.x 符号,例如`tf.foo``tf.compat.v1.foo`。 此模块允许转换为 TF 1.x 编写的大多数代码,以便可以在 TF 2.0 中运行。
作为简化此过程的一种方式,TensorFlow 提供了`tf_upgrade_v2`实用程序,该实用程序有助于尽可能简化转换。 该实用程序已预装...
作为简化此过程的一种方式,TensorFlow 提供了`tf_upgrade_v2`工具,该工具有助于尽可能简化转换。 该工具已预装...
# 转换 TF 1.x 模型
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册