提交 ef0b6ca7 编写于 作者: W wizardforcel

2020-12-27 13:26:50

上级 ca648106
# Preface
# 前言
TensorFlow 是用于机器学习以及最近的深度学习的最受欢迎的架构之一。 本书是将 TensorFlow 和 Keras 模型部署到实际应用程序中的指南。
......@@ -131,6 +131,6 @@ $ python3 lesson_1/activity_1/test_stack.py
按照[以下网站](https://www.tensorflow.org/install/install_windows)上的说明下载并安装 TensorFlow。
## 硬安装
## 安装 Keras
按照[以下网站](https://keras.io/#installation)上的说明下载并安装 Keras。
\ No newline at end of file
# 第 1 章神经网络和深度学习简介
# 第 1 章神经网络和深度学习简介
在本课程中,我们将介绍神经网络的基础知识以及如何建立深度学习编程环境。 我们还将探讨神经网络的常见组件及其基本操作。 我们将通过探索使用 TensorFlow 创建的训练有素的神经网络来结束本课程。
......@@ -27,7 +27,7 @@
深度学习在很大程度上被认为是神经网络的当代研究。 可以将其视为神经网络的当前名称。 主要区别在于,深度学习中使用的神经网络通常比早期的神经网络更大,即具有更多的节点和层。 深度学习算法和应用程序通常需要获得成功的资源,因此使用*深度*一词来强调其大小和大量相互连接的组件。
## 成功的申请
## 成功的应用
自从 40 年代以一种形式或另一种形式出现以来,一直在研究神经网络。 但是,直到最近,深度学习系统才在大型工业应用中成功使用。
......@@ -69,7 +69,7 @@
有关更多信息,请参阅 Michael Nielsen 的[《神经网络和深度学习:神经网络可以计算任何函数的视觉证明》](http://neuralnetworksanddeeplearning.com/chap4.html)
在本书中,我们将不探讨通用性原理的数学证明。 但是,神经网络的两个特征应该为您提供有关如何理解该原理的正确直觉:表示学习和函数逼近
在本书中,我们将不探讨通用性原理的数学证明。 但是,神经网络的两个特征应该为您提供有关如何理解该原理的正确直觉:表示学习和函数近似
### 注意
......@@ -87,7 +87,7 @@
这些步骤中的每一步都代表进入不同抽象层的过程。 数据经过这些层,不断建立更高级别的表示。 该过程以最大可能的表示形式结束:模型试图进行预测。
#### 函数逼近
#### 函数近似
当神经网络学习数据的新表示时,它们通过将权重和偏差与来自不同层的神经元相结合来实现。 每当训练周期发生时,他们就会使用称为反向传播的数学技术来调整这些连接的权重。 权重和偏差在每个回合中都会改善,直至达到最佳效果。 这意味着神经网络可以测量每个训练周期的错误程度,调整每个神经元的权重和偏差,然后重试。 如果确定某项修改产生的效果比上一轮更好,它将投资于该修改,直到获得最佳解决方案。
......@@ -97,13 +97,13 @@
* 训练数据可能会过分拟合
* 可能缺少训练数据
在的许多实际应用中,简单的神经网络能够以合理的精度逼近一个函数。 这些应用程序将成为本书的重点。
在的许多实际应用中,简单的神经网络能够以合理的精度近似一个函数。 这些应用程序将成为本书的重点。
### 深度学习的局限性
深度学习技术最适合可以用形式化数学规则(即,数据表示形式)定义的问题。 如果很难用这种方式定义问题,则深度学习可能不会提供有用的解决方案。 此外,如果可用于给定问题的数据有偏差或仅包含生成该问题的基础功能的部分表示,则深度学习技术将仅能够重现该问题而不能学习解决该问题。
记住,深度学习算法正在学习数据的不同表示以逼近给定的功能。 如果数据不能恰当地表示功能,则可能是神经网络会错误地表示功能。 考虑以下类比:您正在尝试预测汽油(即燃料)的全国价格并创建深度学习模型。 您可以将信用卡对帐单与日常汽油费用一起用作该模型的输入数据。 该模型最终可能会了解您的汽油消耗模式,但可能会误述由仅在您的数据中每周代表的其他因素(例如政府策略,市场竞争,国际政治等)引起的汽油价格波动。 在生产中使用该模型时,最终将产生错误的结果。
记住,深度学习算法正在学习数据的不同表示以近似给定的功能。 如果数据不能恰当地表示功能,则可能是神经网络会错误地表示功能。 考虑以下类比:您正在尝试预测汽油(即燃料)的全国价格并创建深度学习模型。 您可以将信用卡对帐单与日常汽油费用一起用作该模型的输入数据。 该模型最终可能会了解您的汽油消耗模式,但可能会误述由仅在您的数据中每周代表的其他因素(例如政府策略,市场竞争,国际政治等)引起的汽油价格波动。 在生产中使用该模型时,最终将产生错误的结果。
为避免此问题,请确保用于训练模型的数据代表该模型试图尽可能准确地解决的问题。
......@@ -181,7 +181,7 @@ TensorFlow 是一个库,用于以图形形式执行数学运算。 TensorFlow
TensorFlow 也以其生产组件而闻名。 它随附 [TensorFlow 服务](https://github.com/tensorflow/serving),这是一种用于深度学习模型的高性能系统。 此外,可以在其他高性能编程语言(例如 Java,Go 和 C)中使用经过训练的 TensorFlow 模型。这意味着人们可以在从微型计算机(即 RaspberryPi)到 Android 设备的任何内容中部署这些模型。 。
### 大声
### Keras
为了与 TensorFlow 高效交互,我们将使用 [Keras](https://keras.io/),这是一个具有高级 API 的 Python 软件包,用于开发神经网络。 虽然 TensorFlow 专注于在计算图中彼此交互的组件,但 Keras 专门专注于神经网络。 Keras 使用 TensorFlow 作为其后端引擎,使开发此类应用程序变得更加容易。
......@@ -217,7 +217,7 @@ Michael Heydt 的《学习 Pandas》和 Dan Toomey 的《学习 Jupyter》提供
> 表 1:创建深度学习环境所需的软件组件
### 活动 1 –验证软件组件
### 活动 1 – 验证软件组件
在探索训练有素的神经网络之前,让我们验证所需的所有软件组件是否可用。 我们包含了一个脚本,用于验证这些组件的工作情况。 让我们花点时间运行脚本并处理可能发现的所有最终问题。
......@@ -394,7 +394,7 @@ CIFAR 数据集是机器学习数据集,其中包含按不同类别组织的
现在,让我们也测试那些网络在看不见的数据下的性能。 我们将使用 Shafeen Tejani 创建的开源 Web 应用程序来探索受过训练的网络是否正确地预测了我们创建的手写数字。
###### 使用看不见的数据测试网络性能
###### 使用没见过的数据测试网络表现
在浏览器中访问[网站](http://mnist-demo.herokuapp.com/)并在指定的白框中,绘制一个`0``9`之间的数字:
......@@ -459,7 +459,7 @@ $ tensorboard --logdir=mnist_example/
EPOCHS = 2000
```
### Note
### 注意
请在`Code/Lesson-1/activity_2/`中使用`mnist.py`文件作为参考。
......@@ -471,7 +471,7 @@ $ tensorboard --logdir=mnist_example/
使用 TensorBoard 验证网络的训练方式。 通过将起始值乘以 10,再更改几次这些参数,直到您注意到网络正在改善。 调整网络并提高准确性的过程类似于当今工业应用中用于改进现有神经网络模型的过程。
# 摘要
# 总结
在本课程中,我们使用 TensorBoard 探索了经过 TensorFlow 训练的神经网络,并以不同的时期和学习率训练了我们自己的该网络的修改版本。 这为您提供了有关如何训练高性能神经网络的动手经验,还使您能够探索其某些局限性。
......
......@@ -142,7 +142,7 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
正如 Siraj Raval 在视频中建议的,[《如何轻松预测股票价格 - 深度学习入门 7》](https://www.youtube.com/watch?v=ftMq5ps503w),可在 YouTube 上找到。
### 最大最小归一化
### 最大最小归一化
此归一化计算给定观察值与序列的最大值和最小值之间的距离。 当使用系列时,此最大值很有用,在该系列中,最大值和最小值不是离群值,并且对于将来的预测很重要。 此规范化技术可以应用于:
......@@ -172,7 +172,7 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
很好的参考是文章[《使用深度神经网络对浮游生物进行分类》](http://benanne.github.io/2015/03/17/plankton.html)。 作者展示了一系列用于增强少量图像数据以增加模型具有的训练样本数量的技术。
## 活动 3 –探索比特币数据集并为模型准备数据
## 活动 3 – 探索比特币数据集并为模型准备数据
我们将使用最初从 CoinMarketCap 检索的公共数据集,该数据是一个流行的网站,跟踪不同的加密货币统计数据。 数据集已在本课程中提供,并将在本书的其余部分中使用。
......@@ -378,7 +378,7 @@ Keras 允许在每个步骤中进行更大的控制。 但是,其重点是使
在即将进行的活动和课程中,我们将利用该范例。 在下一个活动中,我们将创建最简单的 LSTM 网络。 然后,在“第 3 课”,“模型评估和优化”中,我们将不断评估和更改该网络,以使其更加健壮和高效。
## 活动 4 –使用 Keras 创建 TensorFlow 模型
## 活动 4 – 使用 Keras 创建 TensorFlow 模型
在此活动中,我们将使用 Keras 创建一个 LSTM 模型。
......@@ -557,7 +557,7 @@ LSTM 是计算上昂贵的模型。 在现代计算机上,我们最多可能
图 20:归一化后,我们的 LSTM 模型预测,到 2017 年 7 月下旬,比特币的价格将从 2200 美元增加到大约 2800 美元,一周内增长 30%
## 活动 5 –组装深度学习系统
## 活动 5 – 组装深度学习系统
在本活动中,我们将构建基本的深度学习系统的所有基本要素汇总在一起:数据,模型和预测。
......@@ -670,7 +670,7 @@ LSTM 是计算上昂贵的模型。 在现代计算机上,我们最多可能
对于参考解决方案,请使用`Code/Lesson-2/activity_5`文件夹。
# 摘要
# 总结
在本课程中,我们组装了一个完整的深度学习系统:从数据到预测。 在本活动中创建的模型必须加以大量改进,才能被认为有用。 但是,它是我们不断改进的一个很好的起点。
......
# 第 3 章模型评估和优化
# 第 3 章模型评估和优化
本课程侧重于如何评估神经网络模型。 与使用其他模型不同,在使用神经网络时,我们修改了网络的*超参数*以提高其性能。 但是,在更改任何参数之前,我们需要测量模型的性能。
......@@ -39,7 +39,7 @@
本课程中的所有代码段均在“活动 6 和 7”中实现。 随时随地进行,但不要认为它是强制性的,因为在活动期间将对其进行更详细的重复。
## 损失函数,准确和错误率
## 损失函数,准确和错误率
神经网络利用功能来测量与验证集相比网络的运行情况,也就是说,一部分数据被分离为,用作训练过程的一部分。 这些函数称为**损失函数**
......@@ -73,7 +73,7 @@
我们在“第 2 课”,“模型架构”中开发的网络使用 MSE 作为其损失函数。 在下一节中,我们将探讨该功能如何在网络训练中发挥作用。
### 不同的损函数,相同的架构
### 不同的损函数,相同的架构
在进入下一部分之前,让我们以实践的方式探讨这些问题在神经网络环境中的不同之处。
......@@ -95,7 +95,7 @@ TensorFlow 团队可使用 TensorFlow Playground 应用程序,以帮助我们
TensorBoard 擅长评估神经网络。 正如“第 1 课”,“神经网络和深度学习简介”中所述,TensorBoard 是 TensorFlow 附带的一套可视化工具。 在中,可以探索每个时期后损失函数评估的结果。 TensorBoard 的一大功能是可以分别组织每个运行的结果,并比较每个运行的结果损失函数指标。 然后,您可以决定要调整哪些超参数,并对网络的运行情况有一个大致的了解。 最好的部分是,这一切都是实时完成的。
为了在我们的模型中使用 TensorBoard,我们将使用 Keras 回调函数。 我们通过导入`TensorBoard`回调并将其传递给我们的模型(在调用`fit()`函数时)来完成此操作。 以下代码显示了如何在上一课中创建的比特币模型中实该示例:
为了在我们的模型中使用 TensorBoard,我们将使用 Keras 回调函数。 我们通过导入`TensorBoard`回调并将其传递给我们的模型(在调用`fit()`函数时)来完成此操作。 以下代码显示了如何在上一课中创建的比特币模型中实该示例:
```py
from keras.callbacks import TensorBoard
......@@ -114,13 +114,13 @@ TensorBoard 擅长评估神经网络。 正如“第 1 课”,“神经网络
有关更多信息,请参阅 [Keras 回调文档](https://keras.io/callbacks/)
TensorBoard 回调后,`loss`函数指标现在可在 TensorBoard 接口中使用。 现在,您可以运行 TensorBoard 进程(使用`tensorboard --logdir=./logs`),并在使用`fit()`训练网络时保持运行状态。 要评估的主要图形通常称为*损失*。 通过将已知指标传递给`fit()`函数中的`metrics`参数,可以添加更多指标; 这些将可以在 TensorBoard 中用于可视化,但不会用于调整网络权重。 交互式图形将继续实时更新,这使您可以了解每个时期发生的情况。
TensorBoard 回调后,`loss`函数指标现在可在 TensorBoard 接口中使用。 现在,您可以运行 TensorBoard 进程(使用`tensorboard --logdir=./logs`),并在使用`fit()`训练网络时保持运行状态。 要评估的主要图形通常称为*损失*。 通过将已知指标传递给`fit()`函数中的`metrics`参数,可以添加更多指标; 这些将可以在 TensorBoard 中用于可视化,但不会用于调整网络权重。 交互式图形将继续实时更新,这使您可以了解每个时期发生的情况。
![Using TensorBoard](img/image03_05.jpg)
图 3:TensorBoard 实例的屏幕快照,显示了损失函数结果以及添加到指标参数的其他指标
# 实模型评估指标
# 实模型评估指标
在回归和分类问题中,我们将输入数据集分为其他三个数据集:训练,验证和测试。 训练和验证集都用于训练网络。 网络将训练集用作输入,损失函数将验证集用作输入,以将神经网络的输出与实际数据进行比较,计算预测的错误程度。 最后,在对网络进行培训之后,可以使用测试集来测量网络如何处理从未见过的数据。
......@@ -288,7 +288,7 @@ return np.mean(np.abs((A - B) / A)) * 100
这些结果有助于理解我们的预测。 我们将继续使用`model.evaluate()`方法来跟踪我们的 LSTM 模型的改进情况,但还将在模型的每个版本的完整系列中计算`rmse()``mape()`来解释我们预测的比特币价格的接近程度。
#### 活动 6 –创建积极的培训环境
#### 活动 6 – 创建活动的训练环境
在此活动中,我们为神经网络创建了一个训练环境,以促进其训练和评估。 这个环境对于我们的下一课特别重要,在下一课中,我们寻找超参数的最佳组合。
......@@ -375,7 +375,7 @@ return np.mean(np.abs((A - B) / A)) * 100
图 10:绘制测试集每个星期从`model.predict()`返回的归一化值
LSTM 网络使用 MSE 值作为其损函数。 但是,正如课程中所讨论的,MSE 值难以解释。 为了解决这个问题,我们实现了两个功能(从脚本`utilities.py`加载),它们实现了功能 RMSE 和 MAPE。 这些函数通过返回与原始数据相同的比例尺的度量值,并比较比例尺的百分比差异,从而为我们的模型增加了可解释性。
LSTM 网络使用 MSE 值作为其损函数。 但是,正如课程中所讨论的,MSE 值难以解释。 为了解决这个问题,我们实现了两个功能(从脚本`utilities.py`加载),它们实现了功能 RMSE 和 MAPE。 这些函数通过返回与原始数据相同的比例尺的度量值,并比较比例尺的百分比差异,从而为我们的模型增加了可解释性。
13. 导航至标题`De-normalizing Predictions`并从`utilities.py`脚本中加载两个函数:
......@@ -432,7 +432,7 @@ return np.mean(np.abs((A - B) / A)) * 100
我们将使用在“模型评估”部分末尾开发的相同的主动学习环境来评估每种修改,并测量这些策略中的每一种如何帮助我们开发更精确的模型。
#### 层和节点-添加更多层
#### 层和节点 - 添加更多层
具有单个隐藏层的神经网络在许多问题上的表现都相当不错。 我们的第一个比特币模型(`bitcoin_lstm_v0`)是一个很好的例子:它可以使用单个 LSTM 层预测(根据测试集)未来七天的比特币价格(错误率约为 8.4% )。 但是,并非所有问题都可以用单层建模。
......@@ -458,7 +458,7 @@ return np.mean(np.abs((A - B) / A)) * 100
最后,请注意:您添加的层越多,您需要调整的超参数就越多,网络训练所需的时间也就越长。 如果您的模型运行良好且没有过拟合数据,请在将新层添加到网络之前尝试本课中概述的其他策略。
##### 层和节点-实施
##### 层和节点 - 实现
现在,我们将通过添加更多层来修改我们的原始 LSTM 模型。 在 LSTM 模型中,通常会按顺序添加 LSTM 层,从而在 LSTM 层之间形成一条链。 在我们的案例中,新的 LSTM 层具有与原始层相同的神经元数量,因此我们不必配置该参数。
......@@ -496,7 +496,7 @@ batch_size = 1
> 片段 8:在原始`bitcoin_lstm_v0 model`上添加第二个 LSTM 层,使其成为`bitcoin_lstm_v1`
##### 时代
##### 周期
历元是网络响应于数据通过及其丢失功能而调整其权重的次数。 为更多时期运行模型可以使它从数据中学到更多,但同时也存在过拟合的风险。
......@@ -506,7 +506,7 @@ batch_size = 1
我建议您使用以下关联:训练模型的日期越长,获得良好性能所需的时间越长。
###### 时代-实施
###### 周期 - 实现
我们的比特币数据集非常小,因此增加了模型训练可能会对的性能产生边际影响的时期。 为了使模型具有更多的周期,只需更改`model.fit()`中的`epochs`参数即可:
......@@ -536,7 +536,7 @@ TensorFlow 和 Keras 提供了许多激活函数-偶尔会添加新的激活函
本部分的灵感来自 Avinash Sharma 撰写的文章[《了解神经网络中的激活函数》](https://medium.com/the-theory-of-everything/understanding-activation-functions-in-neural-networks-9491262884e0),该文章可从获得启发。
###### 线性(身份
###### 线性(恒等
仅线性函数会基于恒定值激活神经元。 它们的定义是:
......@@ -578,7 +578,7 @@ ReLU 具有非线性属性。 它们的定义是:
我们不会在网络中使用 ReLU 函数,因为我们的规范化过程会创建许多负值,从而导致学习模型慢得多。
###### 激活函数-实现
###### 激活函数 - 实现
在 Keras 中实现激活函数的最简单方法是实例化`Activation()`类,并将其添加到`Sequential()`模型中。 可以使用 Keras 中可用的任何激活函数实例化`Activation()`(有关完整列表,请参见[这里](https://keras.io/activations/))。 在我们的例子中,我们将使用`tanh`功能。 实现激活函数后,我们将模型的版本更改为`v2`,使其变为`bitcoin_lstm_v3`
......@@ -607,7 +607,7 @@ ReLU 具有非线性属性。 它们的定义是:
> “代码段 10”:在`bitcoin_lstm_v2 model`中添加激活函数 tanh,使其成为`bitcoin_lstm_v3`
还有许多其他激活函数值得尝试。 TensorFlow 和 Keras 都在各自的官方文档中提供了已实现功能的列表。 在实施自己的方法之前,请先从 TensorFlow 和 Keras 中已实施的方法开始。
还有许多其他激活函数值得尝试。 TensorFlow 和 Keras 都在各自的官方文档中提供了已实现功能的列表。 在实现自己的方法之前,请先从 TensorFlow 和 Keras 中已实现的方法开始。
###### 正则化策略
......@@ -627,7 +627,7 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
退出策略易于实现,通常非常有效地避免过拟合。 这将是我们首选的正则化。
###### 正则化策略-实施
###### 正则化策略 - 实现
为了使用 Keras 实现的退出策略,我们导入`Dropout()`类并将其添加到每个 LSTM 层之后的网络中。 有效的添加使我们的网络`bitcoin_lstm_v4`
......@@ -677,9 +677,9 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
有趣的是,我们的第一个模型(`bitcoin_lstm_v0`)在几乎所有定义的指标中表现最佳。 我们将使用该模型构建我们的 Web 应用程序并不断预测比特币价格。
###### 活动 7 –优化深度学习模型
###### 活动 7 – 优化深度学习模型
在此活动中,我们对在“第 2 课”,“模型架构”(`bitcoin_lstm_v0`)中创建的模型实不同的优化策略。 该模型在完整的反规范化测试集上获得了大约 8.4% 的 MAPE 性能。 我们将努力缩小这一差距。
在此活动中,我们对在“第 2 课”,“模型架构”(`bitcoin_lstm_v0`)中创建的模型实不同的优化策略。 该模型在完整的反规范化测试集上获得了大约 8.4% 的 MAPE 性能。 我们将努力缩小这一差距。
1. 在您的终端上,通过执行以下命令来启动 TensorBoard 实例:
......@@ -700,7 +700,7 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
我们将像以前的活动一样加载火车和测试数据。 我们还将使用实用程序功能`split_lstm_input()`将分为训练组和测试组。
在本笔记本的每个部分中,我们将在模型中实新的优化技术。 每次这样做,我们都会训练一个新模型并将其训练后的实例存储在描述模型版本的变量中。 例如,在本笔记本中,我们的第一个模型`bitcoin_lstm_v0,`被称为`model_v0`。 在笔记本的最后,我们使用 MSE,RMSE 和 MAPE 评估所有模型。
在本笔记本的每个部分中,我们将在模型中实新的优化技术。 每次这样做,我们都会训练一个新模型并将其训练后的实例存储在描述模型版本的变量中。 例如,在本笔记本中,我们的第一个模型`bitcoin_lstm_v0,`被称为`model_v0`。 在笔记本的最后,我们使用 MSE,RMSE 和 MAPE 评估所有模型。
4. 现在,在打开的 Jupyter 笔记本中,导航至标题`Adding Layers and Nodes`。 您将在下一个单元格中识别出我们的第一个模型。 这是我们在第 2 课,“模型架构”中构建的基本 LSTM 网络。 现在,我们必须向该网络添加一个新的 LSTM 层。
......@@ -734,7 +734,7 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
我们的最终选择是尝试不同的正则化策略。 这显然更加复杂,并且可能需要花费一些迭代才能注意到任何收益,尤其是数据量很少时。 此外,添加正则化策略通常会增加网络的培训时间。
7. 现在,导航至笔记本中的标题**正则化策略**。 在本部分中,您需要实现`Dropout()`正则化策略。 找到合适的位置放置该步骤并将其实到我们的模型中。
7. 现在,导航至笔记本中的标题**正则化策略**。 在本部分中,您需要实现`Dropout()`正则化策略。 找到合适的位置放置该步骤并将其实到我们的模型中。
8. 您也可以在这里尝试进行 L2 正则化(或将两者结合使用)。 与`Dropout()`相同,但现在使用`ActivityRegularization(l2=0.0001)`
最后,让我们使用 RMSE 和 MAPE 评估我们的模型:
......@@ -749,10 +749,10 @@ L2 正则化使用`λ`参数来确定对模型神经元的惩罚程度。 通常
借此机会来调整前面的优化技术的值,并尝试击败该模型的性能。
# 摘要
# 总结
在本课程中,我们学习了如何使用度量均方误差(MSE),均方误差(RMSE)和均值平均百分比误差(MAPE)来评估模型。 我们通过第一个神经网络模型进行的为期 19 周的一系列预测中计算了后两个指标。 然后我们得知它运行良好。
我们还学习了如何优化模型。 我们研究了通常用于提高神经网络性能的优化技术。 此外,我们实了许多这些技术,并创建了更多模型来预测具有不同错误率的比特币价格。
我们还学习了如何优化模型。 我们研究了通常用于提高神经网络性能的优化技术。 此外,我们实了许多这些技术,并创建了更多模型来预测具有不同错误率的比特币价格。
在下一课中,我们将把我们的模型变成一个执行以下两件事的 Web 应用程序:使用新数据定期重新训练我们的模型,并能够使用 HTTP API 接口进行预测。
\ No newline at end of file
# 第 4.章产品化
# 第 4 章产品化
本课程重点介绍如何*产品化*深度学习模型。 我们使用“产品化”一词来定义可被其他人和应用程序使用的深度学习模型创建的软件产品。
我们对在使用新数据时可用的模型,不断从新数据中学习模式并因此做出更好的预测的模型感兴趣。 我们研究了两种处理新数据的策略:一种重新训练现有模型,另一种创建全新模型。 然后,我们在比特币价格预测模型中实后一种策略,以便它可以连续预测新的比特币价格。
我们对在使用新数据时可用的模型,不断从新数据中学习模式并因此做出更好的预测的模型感兴趣。 我们研究了两种处理新数据的策略:一种重新训练现有模型,另一种创建全新模型。 然后,我们在比特币价格预测模型中实后一种策略,以便它可以连续预测新的比特币价格。
本课程还提供了如何将模型部署为 Web 应用程序的练习。 在本课程结束时,我们将能够部署一个有效的 Web 应用程序(具有正常运行的 HTTP API)并将其修改为我们的核心内容。
......@@ -93,7 +93,7 @@
在此部分中,我们讨论两种策略:重新训练旧模型和训练新模型。
##### 重新训练旧型号
##### 重新训练旧模型
通过这种策略,我们用新数据重新训练了现有模型。 使用此策略,可以不断调整模型参数以适应新现象。 但是,后期训练期间使用的数据可能与其他较早的数据明显不同。 这种差异可能会导致模型参数发生重大变化,从而使其学习新模式而忘记旧模式。 这种现象通常称为*灾难性遗忘*
......@@ -165,9 +165,9 @@ M.train(model_data[i*7:7*(40 + i) + 7])
> 片段 5:该片段实现了在有新数据时训练新模型的策略
这种方法实起来非常简单,并且对于小型数据集而言效果很好。 这将是我们比特币价格预测应用程序的首选解决方案。
这种方法实起来非常简单,并且对于小型数据集而言效果很好。 这将是我们比特币价格预测应用程序的首选解决方案。
###### 活动 8 –处理新数据
###### 活动 8 – 处理新数据
在此活动中,每当有新数据可用时,我们都会重新训练模型。
......@@ -405,7 +405,7 @@ $ docker-compose up -d
现在,应用程序可以部署在远程服务器中,并用于持续预测比特币价格。
###### 活动 9 –部署深度学习应用程序
###### 活动 9 – 部署深度学习应用程序
在此活动中,我们将模型作为本地 Web 应用程序部署。 这使我们可以使用浏览器连接到 Web 应用程序,或者通过应用程序的 HTTP API 使用另一个应用程序。 在继续之前,请确保您已经安装了以下应用程序,并且在计算机中可用:
......@@ -446,7 +446,7 @@ $ docker-compose up -d
对于参考解决方案,请使用`Code/Lesson-4/activity_9` 文件夹。
###### 摘要
###### 总结
本课结束了我们创建深度学习模型并将其部署为 Web 应用程序的旅程。 我们的最后一步包括部署一个模型,该模型预测使用 Keras 和 TensorFlow 引擎构建的比特币价格。 我们通过将应用程序打包为 Docker 容器并进行部署来完成工作,以便其他人可以通过其 API 以及我们的模型使用模型的预测。
......
......@@ -2,15 +2,15 @@
TensorFlow 是 Google 流行的机器学习和深度学习产品。 它已迅速成为执行快速,高效和准确的深度学习任务的工具的流行选择。
这本书向您展示了现实世界项目的实际实现,并教您如何利用 TensorFlow 的功能执行高效的深度学习。 在本书中,您将了解执行深度学习的不同范例,例如深度神经网络,卷积神经网络,循环神经网络等等,以及如何使用 TensorFlow 实它们。
这本书向您展示了现实世界项目的实际实现,并教您如何利用 TensorFlow 的功能执行高效的深度学习。 在本书中,您将了解执行深度学习的不同范例,例如深度神经网络,卷积神经网络,循环神经网络等等,以及如何使用 TensorFlow 实它们。
这将在自然语言处理,图像分类和欺诈检测等热门话题领域的三个真实项目的端到端实的帮助下进行演示。
这将在自然语言处理,图像分类和欺诈检测等热门话题领域的三个真实项目的端到端实的帮助下进行演示。
到本书结尾,您将掌握 TensorFlow 和 Keras 的所有深度学习概念及其实现。
# 这本书是给谁的
本书面向希望将机器学习集成到应用软件中并通过在 TensorFlow 中实实际项目来掌握深度学习的应用开发人员,数据科学家和机器学习从业人员。 要充分利用本书,需要具备 Python 编程知识和深度学习的基础知识。
本书面向希望将机器学习集成到应用软件中并通过在 TensorFlow 中实实际项目来掌握深度学习的应用开发人员,数据科学家和机器学习从业人员。 要充分利用本书,需要具备 Python 编程知识和深度学习的基础知识。
# 本书涵盖的内容
......
......@@ -77,7 +77,7 @@ ReLu 非线性函数-大于零。
这很重要,这样您才能知道哪个答案最有可能。 因此,作为我们可以用来理解`softmax`的示例,让我们看一下我们的值数组。 我们可以看到有三个值。 假设神经网络输出为`1``2``5`。 我们正在尝试将它们分为红色,绿色和蓝色类别。 现在,我们通过`softmax`运行它,我们可以看到概率分数。 如您在此处可以清楚看到的那样,它应该是蓝色,并表示为概率。 读出`softmax`的方法是使用`argmax`。 您查看具有最高值的单元格,并将该索引提取为您的预测类。 但是,如果您查看实际数字-`1``2``5`-您会发现它们总计为八,但是`5`的输出概率为`0.93`。 这是因为`softmax`使用指数函数。 这不仅仅是数字的线性组合,例如将五除以八,然后说`5/8`是该类别中的概率。 我们在这里所说的是,最强的信号将主导较弱的信号,并且该指数实际上将超过具有较高值的​​类的概率,因此当事物相对接近时,您的神经网络在分类方面会更有效。 记住,使用实际的神经网络,您将不会输出漂亮的`1``2``5`数字-您将输出相对较小的十进制数字,例如`0.00007`, 小的浮点数,然后我们需要将它们分成几类。
现在您可能想知道为什么我们应该考虑这一点,因为您可以轻松地从数字`1``2``5`看出`5`是最大的值。 好吧,这个想法是,如果您将事情表示为概率,则可以模拟信心。 从某种意义上讲,您可以在模型之间共享分数,并且知道您的模型实际的自信程度。 另外,不同的型号将在不同的范围内输出不同的数字。 仅仅因为您在尝试的第一个模型中放入了`1``2``5`,这并不意味着它们在另一个模型中具有相同的相对值。 因此,将它们粉碎成概率可以进行比较。 现在,有了这些数学知识,我们就可以开始研究构建实际的神经网络了。 好消息是您实际上不需要记住或知道我们刚才列出的数学。 您只需要记住数学部分的名称,因为在 Keras 中,您使用简单的名称引用了激活函数。
现在您可能想知道为什么我们应该考虑这一点,因为您可以轻松地从数字`1``2``5`看出`5`是最大的值。 好吧,这个想法是,如果您将事情表示为概率,则可以模拟信心。 从某种意义上讲,您可以在模型之间共享分数,并且知道您的模型实际的自信程度。 另外,不同的模型将在不同的范围内输出不同的数字。 仅仅因为您在尝试的第一个模型中放入了`1``2``5`,这并不意味着它们在另一个模型中具有相同的相对值。 因此,将它们粉碎成概率可以进行比较。 现在,有了这些数学知识,我们就可以开始研究构建实际的神经网络了。 好消息是您实际上不需要记住或知道我们刚才列出的数学。 您只需要记住数学部分的名称,因为在 Keras 中,您使用简单的名称引用了激活函数。
# 培训和测试数据
......
......@@ -781,7 +781,7 @@ M_ = prev_M * tf.expand_dims(1\. - tf.one_hot(prev_indices[:, -1], self.memory_s
# 概要
我们看到了神经图灵机如何从内存中存储和检索信息,以及它如何使用不同的寻址机制(例如基于位置和基于内容的寻址)来读写信息。 我们还学习了如何使用 TensorFlow 实 NTM 以执行复制任务。 然后,我们了解了 MANN 以及 MANN 与 NTM 的不同之处。 我们还了解了 MANN 如何使用最近最少使用的访问方法来克服 NTM 的缺点。
我们看到了神经图灵机如何从内存中存储和检索信息,以及它如何使用不同的寻址机制(例如基于位置和基于内容的寻址)来读写信息。 我们还学习了如何使用 TensorFlow 实 NTM 以执行复制任务。 然后,我们了解了 MANN 以及 MANN 与 NTM 的不同之处。 我们还了解了 MANN 如何使用最近最少使用的访问方法来克服 NTM 的缺点。
在下一章中,我们将学习**模型不可知元学习****MAML**)以及如何在监督和强化学习环境中使用它。
......
......@@ -4,7 +4,7 @@
# 这本书是给谁的
本书适用于对人工智能感兴趣并希望从头开始学习强化学习的机器学习开发人员和深度学习爱好者。 阅读本书,并通过在工作中或项目中实实际示例,成为强化学习专家。 掌握线性代数,微积分和 Python 编程语言的知识将帮助您理解本书的流程。
本书适用于对人工智能感兴趣并希望从头开始学习强化学习的机器学习开发人员和深度学习爱好者。 阅读本书,并通过在工作中或项目中实实际示例,成为强化学习专家。 掌握线性代数,微积分和 Python 编程语言的知识将帮助您理解本书的流程。
# 本书涵盖的内容
......
......@@ -30,7 +30,7 @@
![](img/00248.jpeg)
我们更新权重,并通过梯度下降使损失最小化。 简而言之,在 DQN 中,我们使用神经网络作为函数逼近器来逼近`Q`函数,并且通过梯度下降使误差最小化。
我们更新权重,并通过梯度下降使损失最小化。 简而言之,在 DQN 中,我们使用神经网络作为函数近似器来近似`Q`函数,并且通过梯度下降使误差最小化。
# DQN 的架构
......@@ -455,7 +455,7 @@ with tf.Session() as sess:
# 概要
在本章中,我们学习了一种非常流行的深度强化学习算法,称为 DQN。 我们看到了如何使用深度神经网络来逼近 Q 函数。 我们还学习了如何建立代理来玩 Atari 游戏。 后来,我们研究了 DQN 的一些改进,例如双 DQN,它用于避免高估 Q 值。 然后,我们研究了优先级经验重放,优先级经验和决斗的网络架构,该架构将 Q 函数计算分为两个流,分别称为值流和优势流。
在本章中,我们学习了一种非常流行的深度强化学习算法,称为 DQN。 我们看到了如何使用深度神经网络来近似 Q 函数。 我们还学习了如何建立代理来玩 Atari 游戏。 后来,我们研究了 DQN 的一些改进,例如双 DQN,它用于避免高估 Q 值。 然后,我们研究了优先级经验重放,优先级经验和决斗的网络架构,该架构将 Q 函数计算分为两个流,分别称为值流和优势流。
在下一章第 9 章,“实用深度循环 Q 网络玩末日之战”中,我们将介绍一种称为 DRQN 的非常酷的 DQN 变体,它利用 RNN 近似于一个 Q 功能。
......
# 用深度循环 Q 网络玩世界末日
在上一章中,我们介绍了如何使用**深度 Q 网络****DQN**)构建代理以玩 Atari 游戏。 我们利用神经网络来逼近 Q 函数,使用了**卷积神经网络****CNN**)来理解输入游戏画面,并利用过去的四个游戏画面来更好地理解当前的游戏状态。 在本章中,我们将学习如何利用**循环神经网络****RNN**)来提高 DQN 的性能。 我们还将研究**马尔可夫决策过程****MDP**)的部分可观察之处,以及如何使用**深度循环 Q 网络****DRQN**)。 接下来,我们将学习如何构建一个代理来使用 DRQN 玩《毁灭战士》游戏。 最后,我们将看到 DRQN 的一种变体,称为**深度注意力循环 Q 网络****DARQN**),它增强了 DRQN 架构的注意力机制。
在上一章中,我们介绍了如何使用**深度 Q 网络****DQN**)构建代理以玩 Atari 游戏。 我们利用神经网络来近似 Q 函数,使用了**卷积神经网络****CNN**)来理解输入游戏画面,并利用过去的四个游戏画面来更好地理解当前的游戏状态。 在本章中,我们将学习如何利用**循环神经网络****RNN**)来提高 DQN 的性能。 我们还将研究**马尔可夫决策过程****MDP**)的部分可观察之处,以及如何使用**深度循环 Q 网络****DRQN**)。 接下来,我们将学习如何构建一个代理来使用 DRQN 玩《毁灭战士》游戏。 最后,我们将看到 DRQN 的一种变体,称为**深度注意力循环 Q 网络****DARQN**),它增强了 DRQN 架构的注意力机制。
在本章中,您将学习以下主题:
......
......@@ -676,7 +676,7 @@ Kakade 和 Langford 从`(1)`得出以下方程式:
我们从策略梯度方法开始,该方法无需 Q 函数即可直接优化策略。 我们通过解决 Lunar Lander 游戏了解了策略梯度,并研究了 DDPG,它具有策略梯度和 Q 函数的优点。
然后,我们研究了诸如 TRPO 之类的策略优化算法,该算法通过对新旧策略之间的 KL 差异实不大于`δ`的限制来确保单调策略的改进。
然后,我们研究了诸如 TRPO 之类的策略优化算法,该算法通过对新旧策略之间的 KL 差异实不大于`δ`的限制来确保单调策略的改进。
我们还研究了近端策略优化,该优化通过惩罚大型策略更新将约束变为惩罚。 在下一章第 12 章, “Capstone 项目 – 使用 DQN 进行赛车”,我们将了解如何构建能够赢得赛车游戏的代理。
......
# Capstone 项目–使用 DQN 进行赛车
在最后几章中,我们通过使用神经网络逼近 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了**深度 Q 网络****DQN**)的各种改进,例如双重 Q 学习,决斗网络架构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放缓冲区来存储智能体的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的**深度循环 Q 网络****DRQN**)。 在本章中,让我们进入决斗 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。
在最后几章中,我们通过使用神经网络近似 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了**深度 Q 网络****DQN**)的各种改进,例如双重 Q 学习,决斗网络架构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放缓冲区来存储智能体的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的**深度循环 Q 网络****DRQN**)。 在本章中,让我们进入决斗 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。
在本章中,您将学习如何实现以下内容:
......
......@@ -75,7 +75,7 @@
# 第八章
1. **深度 Q 网络****DQN**)是用于逼近 Q 函数的神经网络。
1. **深度 Q 网络****DQN**)是用于近似 Q 函数的神经网络。
2. 经验回放用于删除智能体经验之间的相关性。
3. 当我们使用同一网络来预测目标值和预测值时,会有很多差异,因此我们使用单独的目标网络。
4. 由于最大运算符,DQN 高估了 Q 值。
......
......@@ -14,7 +14,7 @@
第 3 章,“神经机器翻译”涵盖了**循环神经网络****RNN**)架构的基础。 我们还将学习三种不同的机器翻译系统:基于规则的机器翻译,统计机器翻译和神经机器翻译。
第 4 章,“在 GAN 中使用 GAN” 进行时尚行业中的样式迁移,说明如何创建智能 AI 模型以生成具有与给定手袋相似样式的鞋子,反之亦然。 我们将使用原始 GAN 通过 GAN 的定制版本(例如 DiscoGAN 和 CycleGAN)来实项目。
第 4 章,“在 GAN 中使用 GAN” 进行时尚行业中的样式迁移,说明如何创建智能 AI 模型以生成具有与给定手袋相似样式的鞋子,反之亦然。 我们将使用原始 GAN 通过 GAN 的定制版本(例如 DiscoGAN 和 CycleGAN)来实项目。
第 5 章,“视频字幕应用程序”讨论了 CNN 和 LSTM 在视频字幕中的作用,并说明了如何利用序列到视频(视频到文本)架构来构建视频字幕系统。
......
......@@ -28,7 +28,7 @@
* 基于 AI 的聊天机器人
* 强化学习应用
在本章中,我们将简要介绍实现机器学习和深度学习的概念,这些概念是实以下各章中涉及的项目所必需的。
在本章中,我们将简要介绍实现机器学习和深度学习的概念,这些概念是实以下各章中涉及的项目所必需的。
# 神经网络
......@@ -468,11 +468,11 @@ Figure 1.14: GAN architecture 
# 深度 Q 学习
在 Q 学习中,我们通常会处理一组有限的状态和动作。 这意味着,表格足以容纳 Q 值和奖励。 但是,在实际应用中,状态和适用动作的数量大多是无限的,并且需要更好的 Q 函数逼近器来表示和学习 Q 函数。 深度神经网络是通用函数逼近器,因此在这里就应运而生。 我们可以用神经网络表示 Q 函数,该神经网络将状态和动作作为输入并提供相应的 Q 值作为输出。 或者,我们可以只使用状态来训练神经网络,然后将输出作为与所有动作相对应的 Q 值。 下图说明了这两种情况。 由于 Q 值是奖励,因此我们在以下网络中处理回归:
在 Q 学习中,我们通常会处理一组有限的状态和动作。 这意味着,表格足以容纳 Q 值和奖励。 但是,在实际应用中,状态和适用动作的数量大多是无限的,并且需要更好的 Q 函数近似器来表示和学习 Q 函数。 深度神经网络是通用函数近似器,因此在这里就应运而生。 我们可以用神经网络表示 Q 函数,该神经网络将状态和动作作为输入并提供相应的 Q 值作为输出。 或者,我们可以只使用状态来训练神经网络,然后将输出作为与所有动作相对应的 Q 值。 下图说明了这两种情况。 由于 Q 值是奖励,因此我们在以下网络中处理回归:
![](img/673b706b-7aa2-488e-851d-860dffe3abfb.png)
图 1.17:深度 Q 学习功能逼近器网络
图 1.17:深度 Q 学习功能近似器网络
在本书中,我们将使用强化学习来训练赛车,以通过深度 Q 学习自行驾驶。
......
......@@ -6,7 +6,7 @@
* 使用迁移学习来检测人眼中的糖尿病性视网膜病变状况,并确定视网膜病变的严重程度
* 探索可用于训练可检测人眼眼底图像中的糖尿病性视网膜病变的**卷积神经网络****CNN**)的高级预训练卷积神经架构
* 查看实际实 CNN 所需的不同图像预处理步骤
* 查看实际实 CNN 所需的不同图像预处理步骤
* 学习制定适合当前问题的成本函数
* 定义适当的度量标准以衡量训练模型的性能
* 使用仿射变换生成其他数据
......@@ -427,7 +427,7 @@ reduce_lr = keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.50,
# Python 实现培训过程
以下 Python 代码块显示了培训过程的端到端实。 它由前面各节中讨论的所有功能块组成。 让我们首先调用所需的所有 Python 程序包,如下所示:
以下 Python 代码块显示了培训过程的端到端实。 它由前面各节中讨论的所有功能块组成。 让我们首先调用所需的所有 Python 程序包,如下所示:
```py
import numpy as np
......@@ -1220,4 +1220,4 @@ Processing Time 138.52878069877625 secs
在本章中,我们介绍了迁移学习的实际方面,以解决医疗保健领域的现实问题。 希望读者通过尽可能尝试定制这些示例来进一步构建这些概念。
我们通过分类和基于回归的神经网络获得的准确性和 kappa 分数足以用于生产实施。 在第 3 章,“神经机器翻译”中,我们将致力于实现智能机器翻译系统,这是比本章介绍的主题更为高级的主题。 我期待您的参与。
\ No newline at end of file
我们通过分类和基于回归的神经网络获得的准确性和 kappa 分数足以用于生产实现。 在第 3 章,“神经机器翻译”中,我们将致力于实现智能机器翻译系统,这是比本章介绍的主题更为高级的主题。 我期待您的参与。
\ No newline at end of file
......@@ -204,7 +204,7 @@ NMT 与其他传统方法相比的一些优点如下:
* NMT 模型可以更好地利用单词和短语的相似性
* RNN 允许生成更好质量的文本,因此,相对于已翻译文本的语法而言,翻译更加准确
# 编码器-解码器型号
# 编码器-解码器模型
下图说明了一种神经翻译机的架构,该结构使用一个 LSTM 作为编码器,将输入源语言序列编码为最终隐藏状态`h[f]`和最终存储单元状态`c[f]`。 最终的隐藏状态和单元状态`[h[f]; c[f]]`将捕获整个输入序列的上下文。 因此,`[h[f]; c[f]]`成为解码器网络可适应的良好候选者。
......@@ -712,7 +712,7 @@ python MachineTranslation.py --path '/home/santanu/ML_DS_Catalog/Machine Transla
嵌入层将输入单词的索引作为输入,并提供单词的单词向量嵌入作为输出。 嵌入层的尺寸为`R^(dxV)`,其中`d`是词向量嵌入的尺寸,`V`是词汇的尺寸。 嵌入层可以根据问题了解嵌入本身,也可以提供预训练的嵌入层。 在我们的案例中,我们将让神经机器翻译找出对于源语言和目标语言而言,嵌入向量应该是什么,以实现良好的翻译。 结果,我们定义的每个函数都应更改以适应嵌入层。
# 实基于嵌入的 NMT
# 实基于嵌入的 NMT
我们将需要对现有功能进行一些更改,以适应嵌入层。 首先,`process_input`将处理输入以在不同的时间步长中具有单词索引,而不是单热编码矢量,如下所示:
......
......@@ -702,7 +702,7 @@ Epoch: [ 0] [ 19/ 156] time: 13.7525
2. 执行完步骤 1 中的命令后,导航到 TensorBoard 的`localhost:6006`站点:
以下屏幕快照中展示了在项目中实的 DiscoGAN 培训期间在 TensorBoard 中查看的一些生成器和鉴别器损耗的痕迹:
以下屏幕快照中展示了在项目中实的 DiscoGAN 培训期间在 TensorBoard 中查看的一些生成器和鉴别器损耗的痕迹:
![](img/8c1362f9-bf37-4c56-ac05-30bb6d00a579.png)
......@@ -744,6 +744,6 @@ Epoch: [ 0] [ 19/ 156] time: 13.7525
# 概要
现在,我们到了本章的结尾。 您现在应该精通 DiscoGAN 的技术知识和实施复杂性。 我们在本章中探讨的概念可用于实施各种生成性对抗性网络,这些网络具有适合当前问题的细微变化。 DiscoGAN 网络的端到端实现位于 GitHub 存储库中,位于[这里](https://github.com/PacktPublishing/Intelligent-Projects-using-Python/tree/master/Chapter04)
现在,我们到了本章的结尾。 您现在应该精通 DiscoGAN 的技术知识和实现复杂性。 我们在本章中探讨的概念可用于实现各种生成性对抗性网络,这些网络具有适合当前问题的细微变化。 DiscoGAN 网络的端到端实现位于 GitHub 存储库中,位于[这里](https://github.com/PacktPublishing/Intelligent-Projects-using-Python/tree/master/Chapter04)
在第 5 章,“视频字幕应用程序”中,我们将研究视频到文本翻译应用程序,它们属于人工智能领域的专家系统。
\ No newline at end of file
......@@ -10,7 +10,7 @@
* 使用**受限玻尔兹曼机****RBM**)构建推荐系统
* 训练 RBM 的对比差异
* 使用 RBM 的协同过滤
* 使用 RBM 实协同过滤应用程序
* 使用 RBM 实协同过滤应用程序
# 技术要求
......@@ -403,7 +403,7 @@ RBM 的参数是可见层单位`i`与隐藏层单位之间的广义权重连接`
# 使用 RBM 的协同过滤实现
在接下来的几节中,我们将使用前一部分介绍的技术原理,使用受限玻尔兹曼机实协同过滤系统。 我们将使用的数据集是 MovieLens 100K 数据集,其中包含用户对不同电影提供的评分(从 1 到 5)。 可以从[这里](https://grouplens.org/datasets/movielens/100k/)下载数据集。
在接下来的几节中,我们将使用前一部分介绍的技术原理,使用受限玻尔兹曼机实协同过滤系统。 我们将使用的数据集是 MovieLens 100K 数据集,其中包含用户对不同电影提供的评分(从 1 到 5)。 可以从[这里](https://grouplens.org/datasets/movielens/100k/)下载数据集。
此协同过滤系统的 TensorFlow 实现在接下来的几节中介绍。
......
......@@ -132,7 +132,7 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
与基本的`DQN`相比,这导致稳定得多的训练。
# 实自动驾驶汽车
# 实自动驾驶汽车
现在,我们将研究实现一种自动驾驶的无人驾驶赛车,该赛车使用深度 Q 网络学习如何在赛道上自行驾驶。 驾驶员和汽车将充当代理,赛车场及其周围环境将充当环境。 我们将使用 OpenAI Gym `CarRacing-v0`框架作为环境。 状态和奖励将由环境呈现给代理,而代理将通过采取适当的行动对代理采取行动。 这些状态采用从汽车前面的摄像头拍摄的图像的形式。 环境接受的动作为三维矢量`a ∈ R^3`的形式,其中第一个分量用于左移,第二个分量用于前移,第三部分用于右移。 该代理将与环境交互并将交互转换为`(s, a, r, s'), i = 1 -> m`形式的元组。 这些交互元组将用作我们的训练数据。
......@@ -157,7 +157,7 @@ Sharp Right: [0.6, 0.05, 0.0]
Straight: [0.0, 0.3, 0.0]
```
# 实双重深度 Q 网络
# 实双重深度 Q 网络
**双重深度 Q 网络**的网络架构如下所示。 网络具有 CNN 架构,可将状态处理为图像并输出所有可能动作的 Q 值。 详细代码(`DQN.py`)如下:
......
......@@ -8,7 +8,7 @@ Python 是一种编程语言,可提供数据科学领域的各种功能。 在
# 这本书是给谁的
本书适用于对使用 Python 实高级预测分析感兴趣的数据分析师,软件工程师和机器学习开发人员。 商业智能专家还将发现本书必不可少,因为它将教给他们如何从基本的预测模型转变为建立高级模型并产生更好的预测。 假定您具有 Python 知识并熟悉预测分析概念。
本书适用于对使用 Python 实高级预测分析感兴趣的数据分析师,软件工程师和机器学习开发人员。 商业智能专家还将发现本书必不可少,因为它将教给他们如何从基本的预测模型转变为建立高级模型并产生更好的预测。 假定您具有 Python 知识并熟悉预测分析概念。
# 本书涵盖的内容
......
......@@ -51,7 +51,7 @@
如果我们有数百万个点,则此验证方法的计算量将非常昂贵。 在这种情况下,我们使用重复的 K 折交叉验证,因为这种验证方法将为我们提供相对较好的结果。
# 实 k 折交叉验证
# 实 k 折交叉验证
让我们以`diamond`数据集为例来了解 K 折交叉验证的实现。
......@@ -378,8 +378,8 @@ RF_tunned_test_mse = mean_squared_error(y_pred=RF_classifier.predict(X_test), y_
# 概要
在本章中,我们学习了交叉验证以及各种交叉验证方法,包括保持交叉验证和 k 折交叉验证。 我们知道 k 折交叉验证不过是多次进行保持交叉验证而已。 我们使用`diamond`数据集实了 k 折交叉验证。 我们还使用 K 折交叉验证比较了不同的模型,并找到了性能最佳的模型,即随机森林模型。
在本章中,我们学习了交叉验证以及各种交叉验证方法,包括保持交叉验证和 k 折交叉验证。 我们知道 k 折交叉验证不过是多次进行保持交叉验证而已。 我们使用`diamond`数据集实了 k 折交叉验证。 我们还使用 K 折交叉验证比较了不同的模型,并找到了性能最佳的模型,即随机森林模型。
然后,我们讨论了超参数调优。 我们遇到了详尽的网格搜索方法,该方法用于执行超参数调优。 我们再次使用`diamond`数据集实了超参数调优。 我们还比较了调整后的模型和未调整的模型,发现调整后的参数使模型的性能优于未调整的模型。
然后,我们讨论了超参数调优。 我们遇到了详尽的网格搜索方法,该方法用于执行超参数调优。 我们再次使用`diamond`数据集实了超参数调优。 我们还比较了调整后的模型和未调整的模型,发现调整后的参数使模型的性能优于未调整的模型。
在下一章中,我们将研究特征选择方法,降维和**主成分分析****PCA**)以及特征工程。 我们还将学习一种通过特征工程改进模型的方法。
\ No newline at end of file
......@@ -128,7 +128,7 @@ TensorFlow 是一个开源软件库,用于使用数据流图进行数值计算
TensorFlow 提供了多个 API,它们可以分为以下两种类型:
* **低级**:也称为 TensorFlow Core,这是最低级的 API。 该 API 为我们提供了完整的编程控制,面向在构建深度学习模型时需要高度灵活性的研究人员和用户。
* **高级**:高级 API(例如`tf.contrib.learn``keras`和 TF-Slim)通常更易于使用。 他们负责重复性任务和低级细节,作为高级用户,您无需担心。 它们是为快速实常用模型而设计的。
* **高级**:高级 API(例如`tf.contrib.learn``keras`和 TF-Slim)通常更易于使用。 他们负责重复性任务和低级细节,作为高级用户,您无需担心。 它们是为快速实常用模型而设计的。
# TensorFlow 安装
......
......@@ -432,4 +432,4 @@ TensorFlow,`tf.nn.elu`中获得此功能,从中您可以获得许多功能
# 概要
在本章中,我们学习了如何使用 TensorFlow 进行预测。 我们研究了 MNIST 数据集和使用该数据集的模型分类。 我们遇到了 DNN 模型的元素以及 DNN 的构建过程。 后来,我们开始研究 DNN 的回归和分类。 我们对手写数字进行了分类,并进一步了解了 TensorFlow 中的构建模型。 这使我们到本书的结尾! 我们学习了如何使用集成算法来生成准确的预测。 我们应用了各种技术来组合和构建更好的模型。 我们学习了如何有效执行交叉验证。 我们还实施了各种技术来解决预测分析领域中的当前问题。 最好的部分是,我们使用建立的 DNN 模型来解决分类和回归问题。 本书帮助我们实施了各种机器学习技术,以构建高级的预测模型并将其应用于现实世界。
\ No newline at end of file
在本章中,我们学习了如何使用 TensorFlow 进行预测。 我们研究了 MNIST 数据集和使用该数据集的模型分类。 我们遇到了 DNN 模型的元素以及 DNN 的构建过程。 后来,我们开始研究 DNN 的回归和分类。 我们对手写数字进行了分类,并进一步了解了 TensorFlow 中的构建模型。 这使我们到本书的结尾! 我们学习了如何使用集成算法来生成准确的预测。 我们应用了各种技术来组合和构建更好的模型。 我们学习了如何有效执行交叉验证。 我们还实现了各种技术来解决预测分析领域中的当前问题。 最好的部分是,我们使用建立的 DNN 模型来解决分类和回归问题。 本书帮助我们实现了各种机器学习技术,以构建高级的预测模型并将其应用于现实世界。
\ No newline at end of file
......@@ -372,7 +372,7 @@ TensorFlow 团队尝试通过引入 Estimators 来解决此问题,Estimators
* 预测
* 模型共享(导出和运输模型)
用户可以从一组预先构建的估算器中进行选择,甚至可以实自己的估算器。 标准库中提供了针对各种常用机器学习和深度学习算法的估算器的实现。
用户可以从一组预先构建的估算器中进行选择,甚至可以实自己的估算器。 标准库中提供了针对各种常用机器学习和深度学习算法的估算器的实现。
估算器具有以下优点:
......
......@@ -33,9 +33,9 @@ import tensorflow as tf
# 从推理的角度理解模型
实现基于机器学习的应用程序的开发人员可以依靠的一件事是使生活变得轻松,无论所服务模型中的实际计算如何,向用户提供模型的过程或多或少都是相同的。 这意味着,如果实正确,工程师可能不必在每次数据科学家更新模型时都重新构建部署管道。 这可以通过利用抽象的力量来实现。 这里的一个关键抽象是模型存储和加载的格式。 通过引入标准化格式,TF 2.0 使得在一个环境中训练模型然后在各个平台上使用它变得容易。 在 TF 2.0 中,执行此操作的标准方法是通过`SavedModel`格式。 这种标准化格式类似于软件开发管道中的构建工件。 读者可以将模型工件视为快照,可用于重新创建模型而无需访问创建模型的实际代码。
实现基于机器学习的应用程序的开发人员可以依靠的一件事是使生活变得轻松,无论所服务模型中的实际计算如何,向用户提供模型的过程或多或少都是相同的。 这意味着,如果实正确,工程师可能不必在每次数据科学家更新模型时都重新构建部署管道。 这可以通过利用抽象的力量来实现。 这里的一个关键抽象是模型存储和加载的格式。 通过引入标准化格式,TF 2.0 使得在一个环境中训练模型然后在各个平台上使用它变得容易。 在 TF 2.0 中,执行此操作的标准方法是通过`SavedModel`格式。 这种标准化格式类似于软件开发管道中的构建工件。 读者可以将模型工件视为快照,可用于重新创建模型而无需访问创建模型的实际代码。
实际上,在推理时,模型被简化为一个黑盒子,它具有一组预定义的输入和输出以及一个与底层模型进行交互的统一接口。 开发人员现在要做的就是建立在给定环境中实和执行黑匣子所需的基础结构。 在以下各节中,我们将学习如何构建管道以服务于各种流行的软件和硬件环境中的模型。
实际上,在推理时,模型被简化为一个黑盒子,它具有一组预定义的输入和输出以及一个与底层模型进行交互的统一接口。 开发人员现在要做的就是建立在给定环境中实和执行黑匣子所需的基础结构。 在以下各节中,我们将学习如何构建管道以服务于各种流行的软件和硬件环境中的模型。
# 模型工件– SavedModel 格式
......@@ -43,7 +43,7 @@ import tensorflow as tf
# 了解核心数据流模型
在我们研究`SavedModel`格式的细微差别之前,重要的是要首先了解 TensorFlow 模型的真正含义。 对于初学者,TensorFlow 实数据流编程范例。 在这种范式下,程序被建模为在不同计算操作之间流动的数据的*有向图*。 这意味着每个节点代表一个操作(或计算),边代表数据。 输入边缘将代表该节点的输入,而输出边缘将对应于计算节点产生的输出。 为了说明这个想法,让我们看一下`tf.add()`操作的(粗略)数据流表示形式。 如下图所示,输入边对应于 x 和 y 的输入。 输出边缘`z(x + y)`对应于节点的输出,在这种特定情况下,该输出恰好是输入的总和:
在我们研究`SavedModel`格式的细微差别之前,重要的是要首先了解 TensorFlow 模型的真正含义。 对于初学者,TensorFlow 实数据流编程范例。 在这种范式下,程序被建模为在不同计算操作之间流动的数据的*有向图*。 这意味着每个节点代表一个操作(或计算),边代表数据。 输入边缘将代表该节点的输入,而输出边缘将对应于计算节点产生的输出。 为了说明这个想法,让我们看一下`tf.add()`操作的(粗略)数据流表示形式。 如下图所示,输入边对应于 x 和 y 的输入。 输出边缘`z(x + y)`对应于节点的输出,在这种特定情况下,该输出恰好是输入的总和:
![](img/2e09fd48-ab43-4546-8eab-1df5c1dae380.png)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册