提交 ea2f3791 编写于 作者: W wizardforcel

2020-12-22 15:21:12

上级 8bf84e76
......@@ -63,7 +63,7 @@
为了预测第一个单词,LSTM 将提供一个虚拟的起始关键字 **< BOS >** ,它代表句子的开头。 同样, **< EOS >** 虚拟关键字表示句子的结尾,并且一旦预测到该句,就应该停止输出生成。
在训练每个目标词的序列到序列模型的过程中,我们知道*先验*先前的词,这是**解码器 LSTM** 的输入。 但是,在推论过程中,我们将没有这些目标词,因此我们必须将上一步作为输入。
在训练每个目标词的序列到序列模型的过程中,我们知道`apriori`先前的词,这是**解码器 LSTM** 的输入。 但是,在推论过程中,我们将没有这些目标词,因此我们必须将上一步作为输入。
# 建立序列到序列模型
......
......@@ -25,7 +25,7 @@
在 k 折交叉验证中,我们基本上会进行多次交叉验证。 因此,在 k 倍交叉验证中,我们将数据集划分为`k`个相等大小的样本。 在许多`k`子样本中,保留了一个子样本作为用于测试模型的验证数据,其余 *k-1* 子样本用作训练数据。 然后,此交叉验证过程重复`k`次,每个`k`子样本中的每一个仅被使用一次作为验证数据。 然后可以将`k`结果平均,以产生单个估计。
以下屏幕截图显示了 5 倍交叉验证的直观示例( *k = 5* ):
以下屏幕截图显示了 5 倍交叉验证的直观示例(`k = 5`):
![](img/da18d7be-8cc3-4aa7-a092-e74201a63185.png)
......@@ -89,9 +89,9 @@ y = diamonds[target_name]
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=55)
```
这与我们在第 1 章,*回归和分类的组合方法*中使用的单元格相同。 此处的区别在于我们不使用`train_test_split`功能。 在这里,我们正在生成`X`矩阵,该矩阵包含所有功能并具有我们的目标功能。 因此,我们有了`X`矩阵和`y`向量。
这与我们在第 1 章,“回归和分类的集成方法”中使用的单元格相同。 此处的区别在于我们不使用`train_test_split`功能。 在这里,我们正在生成`X`矩阵,该矩阵包含所有功能并具有我们的目标功能。 因此,我们有了`X`矩阵和`y`向量。
为了训练模型,我们将实例化`RandomForestRegressor`函数,该函数在此数据集的第 1 章 ,*回归和分类集成方法*中是最佳模型。 。 以下显示了用于实例化`RandomForestRegressor`函数**的代码:**
为了训练模型,我们将实例化`RandomForestRegressor`函数,该函数在此数据集的第 1 章 ,“回归和分类集成方法”中是最佳模型。 。 以下显示了用于实例化`RandomForestRegressor`函数**的代码:**
```py
from sklearn.ensemble import RandomForestRegressor
......
......@@ -9,7 +9,7 @@
在开始执行前面部分中描述的步骤之前,您需要具备以下条件:
* Python 3.4 或更高版本
* 具有 Ubuntu 16.04 或更高版本的计算机(对于大多数基于* NIX 的系统,例如 macOS 或其他 Linux 变体,说明仍然相似)
* 具有 Ubuntu 16.04 或更高版本的计算机(对于大多数基于 \*NIX 的系统,例如 macOS 或其他 Linux 变体,说明仍然相似)
# 什么是新的?
......@@ -27,7 +27,7 @@ TF 1.x 和 TF 2.0 之间的第一个主要区别是 API 的组织。 TF 2.0 减
`tf.contrib`库现在也已从主要 TensorFlow 存储库中删除。 该库中实现的代码已移至其他位置或已移至 TensorFlow 附加库。 这样做的原因是`contrib`模块已经超出了单个存储库中可以维护的范围。
其他更改包括删除`QueueRunner`模块以支持使用`tf.data`,删除图形集合以及更改如何处理变量。 `QueueRunner`模块是一种向模型提供数据以进行训练的方法,但是它比`tf.data`复杂且难于使用,后者现在是将数据提供给模型的默认方法。 在第 3 章*设计和构造输入数据管道*中,说明了将`tf.data`用于数据管道的其他好处。
其他更改包括删除`QueueRunner`模块以支持使用`tf.data`,删除图形集合以及更改如何处理变量。 `QueueRunner`模块是一种向模型提供数据以进行训练的方法,但是它比`tf.data`复杂且难于使用,后者现在是将数据提供给模型的默认方法。 在第 3 章“设计和构造输入数据管道”中,说明了将`tf.data`用于数据管道的其他好处。
TF 2.0 的另一个主要变化是没有更多的全局变量。 在 TF 1.x 中,使用`tf.Variable`创建的变量将被放在默认图中,并且仍可以通过其名称恢复。 TF 1.x 具有各种机制,旨在帮助用户恢复变量,例如变量作用域,全局集合以及诸如`tf.get_global_step``tf.global_variables_initializer`之类的辅助方法。 对于 TF 中的默认变量行为,所有这些都已在 TF 2.0 中删除。
......
......@@ -119,7 +119,7 @@ for element in dataset:
* 来自内存中的`numpy` / `tensorflow`对象
* 使用`TFRecords`从磁盘
* 将转换应用于现有数据集:
* 从一个或多个数据集构造一个数据集。 这将在*数据集转换*部分中更详细地说明。
* 从一个或多个数据集构造一个数据集。 这将在“数据集转换”部分中更详细地说明。
由于建议使用`TFRecords`创建一个`tf.data.Dataset`,让我们看看它是如何工作的。 然后,我们将介绍从其他类型的输入创建数据集的方法。
......@@ -138,7 +138,7 @@ dataset = tf.data.TFRecordDataset(tfrecords_file_names)
# 使用内存中的对象和张量创建数据集
从内存中对象创建`tf.data.Dataset`的最简单方法是使用`from_tensor_slices()`方法,该方法相对于数据中的第一个索引对数组进行切片。 我们将在此处引用`tf.data.Dataset.map()` API,该 API 在*数据集转换*部分中详细定义。 就目前而言,`map(...)`仅表示正在基于应用于数据集对象的每个元素的某些函数来修改(转换)数据集。
从内存中对象创建`tf.data.Dataset`的最简单方法是使用`from_tensor_slices()`方法,该方法相对于数据中的第一个索引对数组进行切片。 我们将在此处引用`tf.data.Dataset.map()` API,该 API 在“数据集转换”部分中详细定义。 就目前而言,`map(...)`仅表示正在基于应用于数据集对象的每个元素的某些函数来修改(转换)数据集。
您可以使用两种 API 从内存中的张量创建数据集:
......@@ -372,7 +372,7 @@ dataset = dataset.repeat(count = None)
dataset = dataset.batch(batch_size, drop_remainder=True)
```
`batch(...)` API 将此数据集的连续元素合并为批处理。 `batch_size`是传递给此 API 的超参数。 在第 4 章,*模型训练和 TensorBoard* 的使用中,我们将讨论并提供批量建议。
`batch(...)` API 将此数据集的连续元素合并为批处理。 `batch_size`是传递给此 API 的超参数。 在第 4 章,“模型训练和 TensorBoard 的使用”中,我们将讨论并提供批量建议。
# 预取
......
......@@ -37,7 +37,7 @@ TensorFlow 1.x 已建议为其高级 API 集使用`tf.estimator` API,该 API
* 无监督学习,对没有标签的数据进行分组和聚类
* 强化学习,其中存在一种环境,代理可以通过该环境通过采取行动并从环境中获取反馈(奖励)来学习实现预期目标
生成模型和判别模型可以与这三种机器学习技术一起使用。 生成模型尝试从具有未知分布的给定数据集中凭经验学习模式和分布,并可能使用学习的模型来生成新数据,就好像它来自同一分布。 一些流行的生成模型是高斯混合模型,隐马尔可夫模型,贝叶斯网络(例如朴素贝叶斯)等。 生成对抗模型是 2014 年非常流行的生成模型,由于其强大的成功和潜力而备受关注。 除了仅学习可用于无监督学习的分布之外,生成模型还可以用于执行分类或预测任务(有监督学习),该任务使用样本`x`的条件概率, 通过使用朴素贝叶斯定理计算概率 *P(y | x)*,属于`y`类。 与生成模型相反,判别模型用于直接学习条件概率 *P(y | x)*,用于回归,分类和其他类型的监督学习问题。 深度神经网络可用于构建生成模型或判别模型。
生成模型和判别模型可以与这三种机器学习技术一起使用。 生成模型尝试从具有未知分布的给定数据集中凭经验学习模式和分布,并可能使用学习的模型来生成新数据,就好像它来自同一分布。 一些流行的生成模型是高斯混合模型,隐马尔可夫模型,贝叶斯网络(例如朴素贝叶斯)等。 生成对抗模型是 2014 年非常流行的生成模型,由于其强大的成功和潜力而备受关注。 除了仅学习可用于无监督学习的分布之外,生成模型还可以用于执行分类或预测任务(有监督学习),该任务使用样本`x`的条件概率, 通过使用朴素贝叶斯定理计算概率`P(y | x)`,属于`y`类。 与生成模型相反,判别模型用于直接学习条件概率`P(y | x)`,用于回归,分类和其他类型的监督学习问题。 深度神经网络可用于构建生成模型或判别模型。
TensorFlow 提供了丰富的 API 集来构建上述生成模型和判别模型。 此外,在 TF 2.0 中,通过引入急切的执行(在第 2 章, “Keras 默认集成和急切执行”中进行了解释),创建这些模型的理念发生了整体变化, 这使得`tf.keras`的使用非常简单且易于调试。 此外,TensorFlow 2.0 中的`tf.keras` API 丰富了 TF 在 TF 1.x 版本中可以执行的全部功能。 在本书中,除非另有说明,否则我们主要使用`tf.keras` API 来构建,训练和预测神经网络模型,并且不会讨论低级或中级 TF API。
......@@ -195,7 +195,7 @@ self.num_filters = 32
# 模型编制与培训
神经网络对复杂的非线性函数建模,例如 *sin(x)**x ** 2**x ** 3* ,仅举几个简单的函数, 由层的网络(堆栈)组成。 这些层可以是卷积层,循环层或简单的前馈层的混合。 每层由神经元组成。 神经元有两种模型化非线性的成分:前一层的加权总和,然后是激活函数。 神经网络试图以迭代方式学习给定训练数据的分布。 一旦通过指定激活函数以层堆叠的形式构建了神经网络,就需要定义一个目标函数(也称为损失函数)以使用适当的模型来改善模型权重。
神经网络对复杂的非线性函数建模,例如`sin(x)``x ** 2``x ** 3`,仅举几个简单的函数, 由层的网络(堆栈)组成。 这些层可以是卷积层,循环层或简单的前馈层的混合。 每层由神经元组成。 神经元有两种模型化非线性的成分:前一层的加权总和,然后是激活函数。 神经网络试图以迭代方式学习给定训练数据的分布。 一旦通过指定激活函数以层堆叠的形式构建了神经网络,就需要定义一个目标函数(也称为损失函数)以使用适当的模型来改善模型权重。
# compile()API
......@@ -207,7 +207,7 @@ model.compile(optimizer='adam',
metrics=['accuracy'])
```
可以使用`mse``categorical_crossentropy`之类的字符串或通过指定`tf.keras.losses.CategoricalCrossentropy`来简单地定义损失,如以下代码块所示。 优化器也是如此。 但是,为了为优化器指定明确的学习率,您必须使用 Python 优化器类,例如`tf.keras.optimizers.Adam`,如下所示*:*
可以使用`mse``categorical_crossentropy`之类的字符串或通过指定`tf.keras.losses.CategoricalCrossentropy`来简单地定义损失,如以下代码块所示。 优化器也是如此。 但是,为了为优化器指定明确的学习率,您必须使用 Python 优化器类,例如`tf.keras.optimizers.Adam`,如下所示
```py
# Specify the training configuration (optimizer, loss, metrics)
......@@ -412,11 +412,11 @@ def clip_gradient_by_norm(x, norm):
# 分布式培训
TF 2.0 的优点之一是能够在多个 GPU 和 TPU 上以分布式方式训练和推断模型,而无需编写大量代码。 使用分发策略 API `tf.distribute.Strategy(...)`可以简化此过程,该 API 随时可用。 *fit()API* 部分介绍了`tf.keras.Model.fit(...)`,该部分说明了如何使用此功能训练模型。 在本节中,我们将展示如何使用分布策略跨多个 GPU 和 TPU 训练基于`tf.keras`的模型。 值得注意的是,`tf.distribute.Strategy(...)`可与`tf.keras``tf.estimator`等高级 API 一起使用,并支持自定义训练循环或...中的任何计算。
TF 2.0 的优点之一是能够在多个 GPU 和 TPU 上以分布式方式训练和推断模型,而无需编写大量代码。 使用分发策略 API `tf.distribute.Strategy(...)`可以简化此过程,该 API 随时可用。 `fit()` API”部分介绍了`tf.keras.Model.fit(...)`,该部分说明了如何使用此功能训练模型。 在本节中,我们将展示如何使用分布策略跨多个 GPU 和 TPU 训练基于`tf.keras`的模型。 值得注意的是,`tf.distribute.Strategy(...)`可与`tf.keras``tf.estimator`等高级 API 一起使用,并支持自定义训练循环或...中的任何计算。
# 张量板
TensorBoard 是 TensorFlow 平台最重要的优势之一,而有了 TF 2.0,TensorBoard 进入了一个新的高度。 在机器学习中,要改善模型权重,通常需要能够对其进行度量。 TensorBoard 是用于提供机器学习工作流程期间所需的测量和可视化的工具。 它可以跟踪实验指标,例如损失和准确性,可视化模型图,将嵌入投影到较低维度的空间等。 与 TF 1.x 相比,TF 2.0 提供了一种非常简单的方法来使用回调来集成和调用 TensorBoard,在*,**fit()API* 部分*中对此进行了解释。* TensorBoard 还提供了一些技巧来测量和可视化您的数据和模型图,并且具有假设分析和分析工具。 它还扩展了自身以进行调试。
TensorBoard 是 TensorFlow 平台最重要的优势之一,而有了 TF 2.0,TensorBoard 进入了一个新的高度。 在机器学习中,要改善模型权重,通常需要能够对其进行度量。 TensorBoard 是用于提供机器学习工作流程期间所需的测量和可视化的工具。 它可以跟踪实验指标,例如损失和准确性,可视化模型图,将嵌入投影到较低维度的空间等。 与 TF 1.x 相比,TF 2.0 提供了一种非常简单的方法来使用回调来集成和调用 TensorBoard,在`fit()` API”部分中对此进行了解释。 TensorBoard 还提供了一些技巧来测量和可视化您的数据和模型图,并且具有假设分析和分析工具。 它还扩展了自身以进行调试。
# 使用回调和调用连接 TensorBoard
......@@ -570,7 +570,7 @@ for num_units in HP_NUM_UNITS.domain.values:
# 假设工具
TensorFlow 2.0 引入了一个非常强大的工具,即**假设工具****WIT**),该工具可在 TensorBoard 仪表板内部提供易于使用的界面。 但是,仅当使用 TensorFlow Serving 为模型提供服务时,才可以使用 WIT。 在第 5 章,*模型推理管道–* *多平台部署*中解释了 TensorFlow Serving。 另外,为了使用 WIT,推理数据集必须为`TFRecords`格式。
TensorFlow 2.0 引入了一个非常强大的工具,即**假设工具****WIT**),该工具可在 TensorBoard 仪表板内部提供易于使用的界面。 但是,仅当使用 TensorFlow Serving 为模型提供服务时,才可以使用 WIT。 在第 5 章,“模型推理管道 – 多平台部署”中解释了 TensorFlow Serving。 另外,为了使用 WIT,推理数据集必须为`TFRecords`格式。
WIT 的某些功能是可以将具有相同工作流程的多个模型进行比较,推理结果的可视化,基于相似度的数据排列以及通过编辑数据点执行模型的敏感性分析的能力。
......
......@@ -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)
......@@ -58,7 +58,7 @@ import tensorflow as tf
# tf.function API
正如我们在第 1 章中看到的那样, *TensorFlow 2.0*[入门第 2 章](2.html), “Keras 默认集成和急切执行”,渴望 默认情况下启用执行是 TF 2.0 中引入的主要更改之一。 第 1 章和 “TensorFlow 2.0 入门”还简要提到了 TF 2.0 与 Python 编程语言更紧密地结合在一起。 此更改的核心是低级`tf.function` API。 实际上,这是通过使用户能够从 Python 函数创建 TensorFlow 图而将 TensorFlow 1.x 的功能与渴望执行的优点相结合。 它既可以用作可调用函数,也可以用作装饰器。 在本节中,我们将简要介绍一下如何在每个人中使用它。
正如我们在第 1 章中看到的那样,第 2 章“TensorFlow 2.0 入门”, “Keras 默认集成和急切执行”,渴望 默认情况下启用执行是 TF 2.0 中引入的主要更改之一。 第 1 章和 “TensorFlow 2.0 入门”还简要提到了 TF 2.0 与 Python 编程语言更紧密地结合在一起。 此更改的核心是低级`tf.function` API。 实际上,这是通过使用户能够从 Python 函数创建 TensorFlow 图而将 TensorFlow 1.x 的功能与渴望执行的优点相结合。 它既可以用作可调用函数,也可以用作装饰器。 在本节中,我们将简要介绍一下如何在每个人中使用它。
# tf.autograph 函数
......@@ -258,7 +258,7 @@ Result for output key output_0:
如果容器映像对您不起作用,请在[这个页面](https://www.tensorflow.org/tfx/serving/setup)上获取其他安装 TensorFlow Serving 方法的摘要。
使用 Docker 设置 TensorFlow 服务涉及一个简单的步骤。 但是,此步骤需要将 Docker 安装在主机上。 有关设置 Docker 的说明,请参阅第 1 章, “TensorFlow 2.0 入门”或本章的*技术要求*部分。 您需要做的就是拉相关的 Docker 映像以...
使用 Docker 设置 TensorFlow 服务涉及一个简单的步骤。 但是,此步骤需要将 Docker 安装在主机上。 有关设置 Docker 的说明,请参阅第 1 章, “TensorFlow 2.0 入门”或本章的“技术要求”部分。 您需要做的就是拉相关的 Docker 映像以...
# 设置并运行推理服务器
......
......@@ -42,7 +42,7 @@ tflite.run(inp,out);
# iOS 上的 TFLite
在 iOS 上使用 TFLite 的过程与此类似,其中包括安装 TFLite 解释器,加载模型并运行它。 再次按照 *TFLite* 入门部分中的步骤操作,以创建和转换机器学习模型以在智能手机上使用。 我们将使用以下步骤在 iOS 上实现 TFLite:
在 iOS 上使用 TFLite 的过程与此类似,其中包括安装 TFLite 解释器,加载模型并运行它。 再次按照“TFLite 入门”部分中的步骤操作,以创建和转换机器学习模型以在智能手机上使用。 我们将使用以下步骤在 iOS 上实现 TFLite:
1. 通过将 TFLite 添加到项目的`root`目录中的`pod`文件中来安装它:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册