diff --git a/new/begin-app-dev-tf-keras/3.md b/new/begin-app-dev-tf-keras/3.md index 2ac1ed300bc2c4017a5a52d81938fb9f716fab6e..d0ced79805f27ce77f723276077c5a632617b068 100644 --- a/new/begin-app-dev-tf-keras/3.md +++ b/new/begin-app-dev-tf-keras/3.md @@ -597,7 +597,7 @@ ReLU 具有非线性属性。 它们的定义是: ###### 激活功能-实现 -在 Keras 中实现激活功能的最简单方法是实例化`Activation()`类,并将其添加到`Sequential()`模型中。 可以使用 Keras 中可用的任何激活功能实例化`Activation()`(有关完整列表,请参见 [https://keras.io/activations/](https://keras.io/activations/) )。 在我们的例子中,我们将使用`tanh`功能。 实现激活功能后,我们将模型的版本更改为`v2`,使其变为`bitcoin_lstm_v3`: +在 Keras 中实现激活功能的最简单方法是实例化`Activation()`类,并将其添加到`Sequential()`模型中。 可以使用 Keras 中可用的任何激活功能实例化`Activation()`(有关完整列表,请参见[这里](https://keras.io/activations/))。 在我们的例子中,我们将使用`tanh`功能。 实现激活功能后,我们将模型的版本更改为`v2`,使其变为`bitcoin_lstm_v3`: ```py model = Sequential() @@ -768,7 +768,7 @@ MAPE(整个系列) activation_function = "tanh" ``` - 我们在本节中使用了`tanh`功能,但是请随时尝试其他激活功能。 查看 [https://keras.io/activations/](https://keras.io/activations/) 上可用的列表,然后尝试其他可能性。 + 我们在本节中使用了`tanh`功能,但是请随时尝试其他激活功能。 查看[这个页面](https://keras.io/activations/)上可用的列表,然后尝试其他可能性。 我们的最终选择是尝试不同的正则化策略。 这显然更加复杂,并且可能需要花费一些迭代才能注意到任何收益,尤其是数据量很少时。 此外,添加正则化策略通常会增加网络的培训时间。 diff --git a/new/begin-app-dev-tf-keras/4.md b/new/begin-app-dev-tf-keras/4.md index 2faf7050dd6ca335c8abdac22cebde0d4a943eb1..229d3e924716b0716fab6732ba7cf8ac27ad91dc 100644 --- a/new/begin-app-dev-tf-keras/4.md +++ b/new/begin-app-dev-tf-keras/4.md @@ -27,7 +27,7 @@ 按照该建议,我们将使用两个类来帮助我们构建 Web 应用程序:`CoinMarketCap()`和`Model()`: -* `CoinMarketCap()`:此是用于从以下网站获取比特币价格的类: [http://www.coinmarketcap.com](http://www.coinmarketcap.com) 。 这就是我们原始比特币数据来自的地方。 通过此类,可以轻松地定期检索该数据,并返回带有已解析记录和所有可用历史数据的 Pandas DataFrame。 `CoinMarketCap()`是我们的数据组件。 +* `CoinMarketCap()`:此是[用于从以下网站获取比特币价格的类](http://www.coinmarketcap.com)。 这就是我们原始比特币数据来自的地方。 通过此类,可以轻松地定期检索该数据,并返回带有已解析记录和所有可用历史数据的 Pandas DataFrame。 `CoinMarketCap()`是我们的数据组件。 * `Model()`:此类将到目前为止已编写的所有代码实现为一个类。 该类提供了与我们先前训练的模型进行交互的工具,并且还允许使用非规范化数据进行预测,这更容易理解。 `Model()`类是我们的模型组件。 这两个类在我们的示例应用程序中得到了广泛使用,并定义了数据和模型组件。 @@ -99,7 +99,7 @@ ### 注意 -灾难性的遗忘是影响神经网络的常见现象。 深度学习研究人员多年来一直在努力解决这个问题。 DeepMind 是英国拥有的 Google 深度学习研究小组,在寻找解决方案方面取得了显着进步。 et al。发表的文章*克服了神经网络中的灾难性遗忘,*。 等 是此类工作的很好参考。 该论文可在以下网站获得: [https://arxiv.org/pdf/1612.00796.pdf](https://arxiv.org/pdf/1612.00796.pdf) 。 +灾难性的遗忘是影响神经网络的常见现象。 深度学习研究人员多年来一直在努力解决这个问题。 DeepMind 是英国拥有的 Google 深度学习研究小组,在寻找解决方案方面取得了显着进步。 [《克服神经网络中的灾难性遗忘》](https://arxiv.org/pdf/1612.00796.pdf)是此类工作的很好参考。 首次用于训练的接口(`model.fit()`)可以用于训练新数据: @@ -183,7 +183,7 @@ M.train(model_data[i*7:7*(40 + i) + 7]) 2. Open the URL provided by the application in your browser and open the Jupyter Notebook named `Activity_8_Re_training_a_model_dynamically.ipynb`. - 现在,我们将从`cryptonic: Model()`和`CoinMarketCap()`加载这两个类。 这些类有助于操纵模型的过程以及从网站 CoinMarketCap( [https://coinmarketcap.com/](https://coinmarketcap.com/) )获取数据的过程。 + 现在,我们将从`cryptonic: Model()`和`CoinMarketCap()`加载这两个类。 这些类有助于操纵模型的过程以及从网站 [CoinMarketCap](https://coinmarketcap.com/) 获取数据的过程。 3. In the Jupyter Notebook instance, navigate to the header **Fetching Real-Time Data**. We will now be fetching updated historical data from CoinMarketCap. Simply call the method: @@ -425,7 +425,7 @@ $ docker-compose up -d * Docker(社区版)17.12.0-ce 或更高版本 * Docker Compose(docker-compose)1.18.0 或更高版本 -可以从以下网站下载上述两个组件并将其安装在所有主要系统中: [http://docker.com/](https://www.docker.com/)。 这些对于完成此活动至关重要。 继续前进之前,请确保这些在系统中可用。 +可以从[以下网站](https://www.docker.com/)下载上述两个组件并将其安装在所有主要系统中。 这些对于完成此活动至关重要。 继续前进之前,请确保这些在系统中可用。 1. 在您的终端上,浏览至加密目录并为所有必需的组件构建 docker 映像: diff --git a/new/handson-dl-img-tf/0.md b/new/handson-dl-img-tf/0.md index 614ed22afdfc8149a44728a8f37dec9f33915f04..eae71c7543a903fb76504e0f1103d792e9d828f4 100644 --- a/new/handson-dl-img-tf/0.md +++ b/new/handson-dl-img-tf/0.md @@ -48,9 +48,9 @@ TensorFlow 是 Google 流行的机器学习和深度学习产品。 它已迅速 * Mac 版 Zipeg / iZip / UnRarX * 适用于 Linux 的 7-Zip / PeaZip -本书的代码包也托管在 GitHub 的 [https://github.com/PacktPublishing/Hands-On-Deep-Learning-for-Images-with-TensorFlow](https://github.com/PacktPublishing/Hands-On-Deep-Learning-for-Images-with-TensorFlow) 。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 +本书的代码包也托管在 [GitHub](https://github.com/PacktPublishing/Hands-On-Deep-Learning-for-Images-with-TensorFlow)。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 -我们还有丰富的书籍和视频目录中的其他代码包,可通过 **[https://github.com/PacktPublishing/](https://github.com/PacktPublishing/)** 获得。 去看一下! +我们还有丰富的书籍和视频目录中的其他代码包,可通过[这里](https://github.com/PacktPublishing/)获得。 去看一下! # 使用约定 diff --git a/new/handson-dl-img-tf/1.md b/new/handson-dl-img-tf/1.md index 716e84a0b404515b4695d9fefa58ff6ffb321126..97b8c2e31e9e30c9e40e0a6deb6a43c40577b303 100644 --- a/new/handson-dl-img-tf/1.md +++ b/new/handson-dl-img-tf/1.md @@ -11,7 +11,7 @@ 我们需要下载 Docker 才能安装它,在本节中,您将看到我们如何在 Windows 上安装 Docker 并使用适合在 Linux 上安装的脚本。 -让我们从 [https://www.docker.com/](https://www.docker.com/) 安装 Docker。 完成此操作的最快方法是前往菜单。 在这里,我们将选择下载 Windows 版本。 单击一下,直接转到 Docker 商店,您可以在其中下载适用于您平台的特定安装程序,如以下屏幕快照所示: +让我们从[这里](https://www.docker.com/)安装 Docker。 完成此操作的最快方法是前往菜单。 在这里,我们将选择下载 Windows 版本。 单击一下,直接转到 Docker 商店,您可以在其中下载适用于您平台的特定安装程序,如以下屏幕快照所示: ![](img/d683abc7-f74f-43a6-b21f-d817e6323905.png) @@ -43,7 +43,7 @@ GPU 状态 现在,让我们开始准备准备机器学习的 Docker 文件。 在本节中,我们将研究克隆源文件,Docker 所需的基本映像,安装其他必需的软件包,公开一个卷以便您可以共享您的工作以及公开端口以便您能够 看 Jupyter Notebooks,这是我们将用来探索机器学习的工具。 -现在,您需要获取这些部分附带的源代码。 前往 [https://github.com/wballard/kerasvideo/tree/2018](https://github.com/wballard/kerasvideo/tree/2018) ,您可以在其中快速克隆存储库。 在这里,我们只是使用 GitHub for Windows 作为一种相对快速的方法来克隆该存储库,但是您可以以自己喜欢的任何方式使用 Git。 将这些文件放在哪个目录中都没有关系。 我们只是将它们下载到本地工作目录中。 然后,我们将使用此位置作为开始构建实际 Docker 容器的位置。 +现在,您需要获取这些部分附带的源代码。 前往[这里](https://github.com/wballard/kerasvideo/tree/2018),您可以在其中快速克隆存储库。 在这里,我们只是使用 GitHub for Windows 作为一种相对快速的方法来克隆该存储库,但是您可以以自己喜欢的任何方式使用 Git。 将这些文件放在哪个目录中都没有关系。 我们只是将它们下载到本地工作目录中。 然后,我们将使用此位置作为开始构建实际 Docker 容器的位置。 在克隆存储库中,查看 Docker 文件: @@ -232,6 +232,6 @@ IPython 笔记本 # 概要 -在本章中,我们研究了如何安装 Docker,包括从 [https://www.docker.com/](https://www.docker.com/) 获取它,设置机器学习 Docker 文件,与主机共享数据回传。 ,然后最后,运行 REST 服务以提供我们将在本书中使用的环境。 +在本章中,我们研究了如何安装 Docker,包括从[这里](https://www.docker.com/)获取它,设置机器学习 Docker 文件,与主机共享数据回传。 ,然后最后,运行 REST 服务以提供我们将在本书中使用的环境。 在下一章中,我们将深入研究并开始查看实际数据。 然后,我们将从了解如何获取图像数据并准备将其用于机器学习模型开始。 \ No newline at end of file diff --git a/new/handson-meta-learn-py/00.md b/new/handson-meta-learn-py/00.md index ff0fc9490a6b051a8904df6cdf5a7e3517e05238..3265d25635d9f470e51e386d6aa3b034c315449f 100644 --- a/new/handson-meta-learn-py/00.md +++ b/new/handson-meta-learn-py/00.md @@ -1,6 +1,6 @@ # 前言 -*使用 Python 进行动手元学习*解释了元学习的基础知识,并帮助您了解学习学习的概念。 您将经历各种一次性学习算法,例如暹罗,原型,关系和内存增强网络,并在 TensorFlow 和 Keras 中实现它们。 您还将了解最新的元学习算法,例如与模型无关的元学习(MAML),爬行动物和通过元学习进行快速上下文适应(CAML)。 然后,您将探索如何使用 meta-SGD 快速学习,并发现如何使用元学习进行无监督学习。 +*使用 Python 进行动手元学习*解释了元学习的基础知识,并帮助您了解元学习的概念。 您将经历各种一次性学习算法,例如连体,原型,关系和内存增强网络,并在 TensorFlow 和 Keras 中实现它们。 您还将了解最新的元学习算法,例如与模型无关的元学习(MAML),爬行动物和通过元学习进行快速上下文适应(CAML)。 然后,您将探索如何使用 meta-SGD 快速学习,并发现如何使用元学习进行无监督学习。 # 这本书是给谁的 @@ -32,9 +32,9 @@ * Mac 版 Zipeg / iZip / UnRarX * 适用于 Linux 的 7-Zip / PeaZip -本书的代码包也托管在 GitHub 上 [https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python](https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python) 。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 +本书的代码包也[托管在 GitHub 上](https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python)。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 -我们还有丰富的书籍和视频目录中的其他代码包,可通过 **[https://github.com/PacktPublishing/](https://github.com/PacktPublishing/)** 获得。 去看一下! +我们还有丰富的书籍和视频目录中的其他代码包,可通过[这里](https://github.com/PacktPublishing/)获得。 去看一下! # 使用约定 diff --git a/new/handson-meta-learn-py/01.md b/new/handson-meta-learn-py/01.md index e1cfee466e4b7823a5853f6a74c30a41fe5fc2ac..5205c352f0360ec341f1165ea679ec0c738704eb 100644 --- a/new/handson-meta-learn-py/01.md +++ b/new/handson-meta-learn-py/01.md @@ -16,7 +16,7 @@ 近年来,借助强大的算法(如生成对抗网络和胶囊网络),深度学习取得了飞速的发展。 但是深度神经网络的问题在于,我们需要拥有大量的训练集来训练我们的模型,而当我们只有很少的数据点时,它将突然失败。 假设我们训练了一个深度学习模型来执行任务 *A* 。 现在,当我们有一个新任务 *B,*与 *A* 密切相关时,我们不能使用相同的模型。 我们需要从头开始为任务 *B* 训练模型。 因此,对于每项任务,我们都需要从头开始训练模型,尽管它们可能是相关的。 -深度学习真的是真正的 AI 吗? 好吧,不是。 人类如何学习? 我们将学习概括为多个概念并从中学习。 但是当前的学习算法仅能完成一项任务。 这就是元学习的用武之地。元学习产生了一个通用的 AI 模型,该模型可以学习执行各种任务,而无需从头开始进行培训。 我们使用很少的数据点在各种相关任务上训练我们的元学习模型,因此对于新的相关任务,它可以利用从先前任务中获得的学习知识,而不必从头开始进行训练。 许多研究人员和科学家认为,元学习可以使我们更接近实现 AGI。 在接下来的部分中,我们将确切学习元学习模型如何学习学习过程。 +深度学习真的是真正的 AI 吗? 好吧,不是。 人类如何学习? 我们将学习概括为多个概念并从中学习。 但是当前的学习算法仅能完成一项任务。 这就是元学习的用武之地。元学习产生了一个通用的 AI 模型,该模型可以学习执行各种任务,而无需从头开始进行培训。 我们使用很少的数据点在各种相关任务上训练我们的元学习模型,因此对于新的相关任务,它可以利用从先前任务中获得的学习知识,而不必从头开始进行训练。 许多研究人员和科学家认为,元学习可以使我们更接近实现 AGI。 在接下来的部分中,我们将确切学习元学习模型如何元学习过程。 # 元学习和少拍 @@ -34,7 +34,7 @@ # 学习度量空间 -在基于度量的元学习设置中,我们将学习适当的度量空间。 假设我们要学习两个图像之间的相似性。 在基于度量的设置中,我们使用一个简单的神经网络从两个图像中提取特征,并通过计算这两个图像的特征之间的距离来找到相似性。 这种方法广泛用于我们没有很多数据点的几次学习设置中。 在接下来的章节中,我们将学习基于度量的学习算法,例如暹罗网络,原型网络和关系网络。 +在基于度量的元学习设置中,我们将学习适当的度量空间。 假设我们要学习两个图像之间的相似性。 在基于度量的设置中,我们使用一个简单的神经网络从两个图像中提取特征,并通过计算这两个图像的特征之间的距离来找到相似性。 这种方法广泛用于我们没有很多数据点的几次学习设置中。 在接下来的章节中,我们将学习基于度量的学习算法,例如连体网络,原型网络和关系网络。 # 学习初始化 @@ -46,7 +46,7 @@ # 学习通过梯度下降学习梯度下降 -现在,我们将看到一种有趣的元学习算法,称为学习通过梯度下降学习梯度下降。 这个名字不是很令人生畏吗? 好吧,事实上,它是最简单的元学习算法之一。 我们知道,在元学习中,我们的目标是学习学习过程。 通常,我们如何训练神经网络? 我们通过计算损耗并通过梯度下降使损耗最小化来训练我们的网络。 因此,我们使用梯度下降来优化模型。 除了使用梯度下降,我们还能自动学习此优化过程吗? +现在,我们将看到一种有趣的元学习算法,称为学习通过梯度下降学习梯度下降。 这个名字不是很令人生畏吗? 好吧,事实上,它是最简单的元学习算法之一。 我们知道,在元学习中,我们的目标是元学习过程。 通常,我们如何训练神经网络? 我们通过计算损耗并通过梯度下降使损耗最小化来训练我们的网络。 因此,我们使用梯度下降来优化模型。 除了使用梯度下降,我们还能自动学习此优化过程吗? 但是我们如何学习呢? 我们用**递归神经网络**( **RNN** )取代了传统的优化器(梯度下降)。 但这如何工作? 如何用 RNN 代替梯度下降? 如果您仔细研究,我们在梯度下降中到底在做什么? 这基本上是从输出层到输入层的一系列更新,我们将这些更新存储在一个状态中。 因此,我们可以使用 RNN 并将更新存储在 RNN 单元中。 @@ -159,5 +159,5 @@ # 进一步阅读 -* 学习通过梯度下降学习梯度下降: [https://arxiv.org/pdf/1606.04474.pdf](https://arxiv.org/pdf/1606.04474.pdf) -* 优化作为少量学习设置的模型: [https://openreview.net/pdf?id=rJY0-Kcll](https://openreview.net/pdf?id=rJY0-Kcll) \ No newline at end of file +* [学习通过梯度下降学习梯度下降](https://arxiv.org/pdf/1606.04474.pdf) +* [优化作为少量学习设置的模型](https://openreview.net/pdf?id=rJY0-Kcll) \ No newline at end of file diff --git a/new/handson-meta-learn-py/02.md b/new/handson-meta-learn-py/02.md index 63854d20f27337a45ef00ed96833b1c7a39907c7..b11bde91e534892920b67f2ef2c0c36c98a6961f 100644 --- a/new/handson-meta-learn-py/02.md +++ b/new/handson-meta-learn-py/02.md @@ -1,34 +1,34 @@ # 使用连体网络的人脸和音频识别 -在上一章中,我们了解了什么是元学习和不同类型的元学习技术。 我们还看到了如何通过梯度下降和优化来学习梯度下降,这是一次快速学习的模型。 在本章中,我们将学习一种称为**暹罗网络**的最常用的基于度量的单次学习算法。 我们将看到暹罗网络如何从很少的数据点学习以及如何将它们用于解决低数据问题。 之后,我们将详细探讨暹罗网络的体系结构,并看到暹罗网络的一些应用。 在本章的最后,我们将学习如何使用暹罗网络构建人脸和音频识别模型。 +在上一章中,我们了解了什么是元学习和不同类型的元学习技术。 我们还看到了如何通过梯度下降和优化来学习梯度下降,这是一次快速学习的模型。 在本章中,我们将学习一种称为**连体网络**的最常用的基于度量的单次学习算法。 我们将看到连体网络如何从很少的数据点学习以及如何将它们用于解决低数据问题。 之后,我们将详细探讨连体网络的体系结构,并看到连体网络的一些应用。 在本章的最后,我们将学习如何使用连体网络构建人脸和音频识别模型。 在本章中,您将学习以下内容: -* 什么是暹罗网络? -* 暹罗网络的体系结构 -* 暹罗网络的应用 -* 使用暹罗网络进行人脸识别 -* 使用暹罗网络构建音频识别模型 +* 什么是连体网络? +* 连体网络的体系结构 +* 连体网络的应用 +* 使用连体网络进行人脸识别 +* 使用连体网络构建音频识别模型 -# 什么是暹罗网络? +# 什么是连体网络? -暹罗网络是神经网络的一种特殊类型,它是最简单且使用最广泛的单发学习算法之一。 正如我们在上一章中学到的,单次学习是一种技术,其中我们每个班级仅从一个训练示例中学习。 因此,在每个类别中没有很多数据点的应用程序中主要使用暹罗网络。 例如,假设我们要为我们的组织建立一个人脸识别模型,并且在组织中有大约 500 个人在工作。 如果我们想从头开始使用**卷积神经网络**( **CNN** )建立人脸识别模型,那么我们需要这 500 人中的许多人来训练网络并获得良好的图像 准确性。 但是显然,我们不会为这 500 个人提供很多图像,因此除非有足够的数据点,否则使用 CNN 或任何深度学习算法构建模型都是不可行的。 因此,在这种情况下,我们可以求助于复杂的单次学习算法,例如暹罗网络,该算法可以从更少的数据点进行学习。 +连体网络是神经网络的一种特殊类型,它是最简单且使用最广泛的单发学习算法之一。 正如我们在上一章中学到的,单次学习是一种技术,其中我们每个班级仅从一个训练示例中学习。 因此,在每个类别中没有很多数据点的应用程序中主要使用连体网络。 例如,假设我们要为我们的组织建立一个人脸识别模型,并且在组织中有大约 500 个人在工作。 如果我们想从头开始使用**卷积神经网络**( **CNN** )建立人脸识别模型,那么我们需要这 500 人中的许多人来训练网络并获得良好的图像 准确性。 但是显然,我们不会为这 500 个人提供很多图像,因此除非有足够的数据点,否则使用 CNN 或任何深度学习算法构建模型都是不可行的。 因此,在这种情况下,我们可以求助于复杂的单次学习算法,例如连体网络,该算法可以从更少的数据点进行学习。 -但是,暹罗网络如何工作? 暹罗网络基本上由两个对称的神经网络组成,它们共享相同的权重和结构,并且都使用能量函数 **E** 最终结合在一起。 我们的暹罗网络的目标是了解两个输入值是相似还是相异。 假设我们有两个图像 **X 1** 和 **X2** ,我们想了解两个图像是相似还是相异。 +但是,连体网络如何工作? 连体网络基本上由两个对称的神经网络组成,它们共享相同的权重和结构,并且都使用能量函数 **E** 最终结合在一起。 我们的连体网络的目标是了解两个输入值是相似还是相异。 假设我们有两个图像 **X 1** 和 **X2** ,我们想了解两个图像是相似还是相异。 如下图所示,我们将图像 **X 1** 馈送到**网络** **A** 和图像 **X 2** 到另一个**网络 B** 。 这两个网络的作用是为输入图像生成嵌入(特征向量)。 因此,我们可以使用任何可以嵌入我们的网络。 由于我们的输入是图像,因此我们可以使用卷积网络来生成嵌入,即用于提取特征。 请记住,CNN 在这里的作用仅仅是提取特征而不是进行分类。 我们知道这些网络应该具有相同的权重和架构,如果我们的**网络 A** 是三层 CNN,那么我们的**网络 B** 也应该是三层 CNN,我们 这两个网络必须使用相同的权重集。 因此,**网络 A** 和**网络 B** 将为我们提供输入图像 **X 1** 和 **X 的嵌入 2** 。 然后,我们会将这些嵌入信息提供给能量函数,从而告诉我们两个输入的相似程度。 能量函数基本上是任何相似性度量,例如欧几里得距离和余弦相似性。 ![](img/a7f1a41e-4291-4bec-87dd-fa6bc1d0c00b.png) -暹罗网络不仅用于人脸识别,而且还广泛用于我们没有很多数据点和任务需要学习两个输入之间相似性的应用中。 暹罗网络的应用包括签名验证,相似问题检索,对象跟踪等。 我们将在下一部分中详细研究暹罗网络。 +连体网络不仅用于人脸识别,而且还广泛用于我们没有很多数据点和任务需要学习两个输入之间相似性的应用中。 连体网络的应用包括签名验证,相似问题检索,对象跟踪等。 我们将在下一部分中详细研究连体网络。 -# 暹罗网络的体系结构 +# 连体网络的体系结构 -现在,我们对暹罗网络有了基本的了解,我们将详细探讨它们。 下图显示了暹罗网络的体系结构: +现在,我们对连体网络有了基本的了解,我们将详细探讨它们。 下图显示了连体网络的体系结构: ![](img/5b9384ce-2640-4df1-8d41-f668a5da1b79.png) -如上图所示,暹罗网络由两个相同的网络组成,它们共享相同的权重和架构。 假设我们有两个输入, **X 1** 和 **X 2** 。 我们将输入 **X 1** 馈送到**网络 A** ,即 **f w (X 1 )**,然后将输入的 **X 2** 馈送到**网络 B** ,即 **f w ( X 2 )**。 您会注意到,这两个网络的权重相同 **w** ,它们将为我们的输入 **X 1** 和 **X 生成嵌入 2** 。 然后,我们将这些嵌入提供给能量函数 **E** ,这将使我们在两个输入之间具有相似性。 +如上图所示,连体网络由两个相同的网络组成,它们共享相同的权重和架构。 假设我们有两个输入, **X 1** 和 **X 2** 。 我们将输入 **X 1** 馈送到**网络 A** ,即 **f w (X 1 )**,然后将输入的 **X 2** 馈送到**网络 B** ,即 **f w ( X 2 )**。 您会注意到,这两个网络的权重相同 **w** ,它们将为我们的输入 **X 1** 和 **X 生成嵌入 2** 。 然后,我们将这些嵌入提供给能量函数 **E** ,这将使我们在两个输入之间具有相似性。 可以表示为: @@ -36,13 +36,13 @@ 假设我们使用欧几里得距离作为能量函数,那么如果 **X 1** 和 **X 2** 相似。 如果输入值不相同,则 **E** 的值将很大。 -假设您有两个句子,句子 1 和句子 2。我们将句子 1 馈送到**网络 A** ,将句子 2 馈送到**网络 B** 。 假设我们的**网络 A** 和**网络 B** 都是 LSTM 网络,它们共享相同的权重。 因此,**网络 A** 和**网络 B** 将分别为句子 1 和句子 2 生成单词嵌入。 然后,我们将这些嵌入提供给能量函数,从而为我们提供两个句子之间的相似度得分。 但是我们如何训练我们的暹罗网络呢? 数据应该如何? 有哪些功能和标签? 我们的目标功能是什么? +假设您有两个句子,句子 1 和句子 2。我们将句子 1 馈送到**网络 A** ,将句子 2 馈送到**网络 B** 。 假设我们的**网络 A** 和**网络 B** 都是 LSTM 网络,它们共享相同的权重。 因此,**网络 A** 和**网络 B** 将分别为句子 1 和句子 2 生成单词嵌入。 然后,我们将这些嵌入提供给能量函数,从而为我们提供两个句子之间的相似度得分。 但是我们如何训练我们的连体网络呢? 数据应该如何? 有哪些功能和标签? 我们的目标功能是什么? -暹罗网络的输入应该成对出现**(X 1 ,X 2 )**以及它们的二进制标签 **Y∈(0 ,1)**,指出输入对是真对(相同)还是非对(不同)。 正如您在下表中所看到的,我们将句子成对存在,并且标签暗示句子对是真实的(1)还是假的(0): +连体网络的输入应该成对出现**(X 1 ,X 2 )**以及它们的二进制标签 **Y∈(0 ,1)**,指出输入对是真对(相同)还是非对(不同)。 正如您在下表中所看到的,我们将句子成对存在,并且标签暗示句子对是真实的(1)还是假的(0): ![](img/be1f76a8-acc1-4eb3-8ff8-3111ce40625d.png) -那么,我们的暹罗网络的损失函数是什么? 由于暹罗网络的目标不是执行分类任务而是为了了解两个输入值之间的相似性,因此我们使用对比损失函数。 +那么,我们的连体网络的损失函数是什么? 由于连体网络的目标不是执行分类任务而是为了了解两个输入值之间的相似性,因此我们使用对比损失函数。 可以表示为: @@ -50,19 +50,19 @@ 在前面的公式中, **Y** 的值是真实的标签,如果两个输入值相似,则为 **1** ;如果两个输入值为 **0** 是不同的, **E** 是我们的能量函数,可以是任何距离度量。 术语**边距**用于保持约束,也就是说,当两个输入值互不相同时,并且如果它们的距离大于边距,则不会造成损失。 -# 暹罗网络的应用 +# 连体网络的应用 -如我们所知,暹罗网络通过使用相同的体系结构找到两个输入值之间的相似性来学习。 它是涉及两个实体之间的计算相似性的任务中最常用的一次性学习算法之一。 它功能强大且强大,可作为低数据问题的解决方案。 +如我们所知,连体网络通过使用相同的体系结构找到两个输入值之间的相似性来学习。 它是涉及两个实体之间的计算相似性的任务中最常用的一次性学习算法之一。 它功能强大且强大,可作为低数据问题的解决方案。 -在发表暹罗网络的第一篇论文中 [https://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf](https://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf) ),作者描述了网络对于签名验证任务的重要性。 签名验证任务的目的是识别签名的真实性。 因此,作者用真正的和不正确的签名对训练了暹罗网络,并使用了卷积网络从签名中提取特征。 提取特征后,他们测量了两个特征向量之间的距离以识别相似性。 因此,当出现新的签名时,我们提取特征并将其与签名者存储的特征向量进行比较。 如果距离小于某个阈值,则我们接受签名为真实签名,否则我们拒绝签名。 +在发表连体网络的[第一篇论文](https://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf)中,作者描述了网络对于签名验证任务的重要性。 签名验证任务的目的是识别签名的真实性。 因此,作者用真正的和不正确的签名对训练了连体网络,并使用了卷积网络从签名中提取特征。 提取特征后,他们测量了两个特征向量之间的距离以识别相似性。 因此,当出现新的签名时,我们提取特征并将其与签名者存储的特征向量进行比较。 如果距离小于某个阈值,则我们接受签名为真实签名,否则我们拒绝签名。 -连体网络也广泛用于 NLP 任务。 有一篇有趣的论文( [http://www.aclweb.org/anthology/W16-1617](http://www.aclweb.org/anthology/W16-1617) ),作者使用暹罗网络来计算文本相似度。 他们使用暹罗网络作为双向单位,并使用余弦相似度作为能量函数来计算文本之间的相似度。 +连体网络也广泛用于 NLP 任务。 [有一篇有趣的论文](http://www.aclweb.org/anthology/W16-1617),作者使用连体网络来计算文本相似度。 他们使用连体网络作为双向单位,并使用余弦相似度作为能量函数来计算文本之间的相似度。 -暹罗网络的应用是无止境的。 它们已经堆叠了用于执行各种任务的各种体系结构,例如人类动作识别,场景更改检测和机器翻译。 +连体网络的应用是无止境的。 它们已经堆叠了用于执行各种任务的各种体系结构,例如人类动作识别,场景更改检测和机器翻译。 -# 使用暹罗网络进行人脸识别 +# 使用连体网络进行人脸识别 -我们将通过建立人脸识别模型来了解暹罗网络。 我们网络的目标是了解两个面孔是相似还是相异。 我们使用 AT&T 人脸数据库,可以从此处下载: [https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html](https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html) 。 +我们将通过建立人脸识别模型来了解连体网络。 我们网络的目标是了解两个面孔是相似还是相异。 我们使用 AT&T 人脸数据库,[可以从此处下载](https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html)。 下载并解压缩存档后,可以看到文件夹`s1`,`s2`,最高到`s40`,如下所示: @@ -76,13 +76,13 @@ ![](img/3ebe64c4-215f-42a9-a6fd-dc5a61a10d7b.png) -我们知道,暹罗网络需要输入值和标签一起作为一对,因此我们必须以这种方式创建数据。 因此,我们将从同一文件夹中随机获取两张图像,并将它们标记为真正的一对,而我们将从两个不同文件夹中获取单幅图像,并将它们标记为不正确的一对。 以下屏幕快照显示了一个示例; 如您所见,一对真实的人具有相同的人的形象,而一对不真实的人具有不同的人的形象: +我们知道,连体网络需要输入值和标签一起作为一对,因此我们必须以这种方式创建数据。 因此,我们将从同一文件夹中随机获取两张图像,并将它们标记为真正的一对,而我们将从两个不同文件夹中获取单幅图像,并将它们标记为不正确的一对。 以下屏幕快照显示了一个示例; 如您所见,一对真实的人具有相同的人的形象,而一对不真实的人具有不同的人的形象: ![](img/adbe22c0-decf-4c78-803e-dbd84d4ef58b.png) -一旦我们将数据与它们的标签配对在一起,就可以训练我们的暹罗网络。 从图像对中,我们将一个图像馈入网络 A,将另一个图像馈入网络 B。这两个网络的作用仅仅是提取特征向量。 因此,我们使用具有 **rec** **固定线性单位**( **ReLU** )激活的两个卷积层来提取特征。 一旦了解了特征,就将来自两个网络的合成特征向量馈入能量函数,以测量相似度。 我们使用欧几里得距离作为我们的能量函数。 因此,我们通过提供图像对来训练我们的网络,以了解它们之间的语义相似性。 现在,我们将逐步看到这一点。 +一旦我们将数据与它们的标签配对在一起,就可以训练我们的连体网络。 从图像对中,我们将一个图像馈入网络 A,将另一个图像馈入网络 B。这两个网络的作用仅仅是提取特征向量。 因此,我们使用具有 **rec** **固定线性单位**( **ReLU** )激活的两个卷积层来提取特征。 一旦了解了特征,就将来自两个网络的合成特征向量馈入能量函数,以测量相似度。 我们使用欧几里得距离作为我们的能量函数。 因此,我们通过提供图像对来训练我们的网络,以了解它们之间的语义相似性。 现在,我们将逐步看到这一点。 -为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter Notebook 中找到,并在此处进行解释: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/ master / 02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks / 2.4%20Face%20Recognition%20Using%20Siamese%20Network.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.4%20Face%20Recognition%20Using%20Siamese%20Network.ipynb) 。 +为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter Notebook 中找到,[并在此处进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.4%20Face%20Recognition%20Using%20Siamese%20Network.ipynb)。 首先,我们将导入所需的库: @@ -141,7 +141,7 @@ img.shape (112, 92) ``` -现在,我们定义另一个函数`get_data`,用于生成我们的数据。 众所周知,对于暹罗网络,数据应采用带有二进制标签的成对形式(正版和非正版)。 +现在,我们定义另一个函数`get_data`,用于生成我们的数据。 众所周知,对于连体网络,数据应采用带有二进制标签的成对形式(正版和非正版)。 首先,我们从同一目录中读取(`img1`和`img2`)图像,并将它们存储在`x_genuine_pair`数组中,然后将`y_genuine`分配给`1`。 接下来,我们从不同目录中读取(`img1`,`img2`)图像,并将它们存储在`x_imposite`对中,并将`y_imposite`分配给`0`。 @@ -243,7 +243,7 @@ Y.shape x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=.25) ``` -现在我们已经成功地生成了数据,我们就建立了暹罗网络。 首先,我们定义基础网络,该网络基本上是用于特征提取的卷积网络。 我们使用 ReLU 激活和最大池化以及一个平坦层来构建两个卷积层: +现在我们已经成功地生成了数据,我们就建立了连体网络。 首先,我们定义基础网络,该网络基本上是用于特征提取的卷积网络。 我们使用 ReLU 激活和最大池化以及一个平坦层来构建两个卷积层: ```py def build_base_network(input_shape): @@ -381,15 +381,15 @@ compute_accuracy(pred, y_test) 0.9779092702169625 ``` -# 使用暹罗网络构建音频识别模型 +# 使用连体网络构建音频识别模型 -在上一教程中,我们了解了如何使用暹罗网络识别人脸。 现在,我们将看到如何使用暹罗网络来识别音频。 我们将训练我们的网络,以区分狗的声音和猫的声音。 可以从此处下载猫和狗音频的数据集: [https://www.kaggle.com/mmoreaux/audio-cats-and-dogs#cats_dogs.zip](https://www.kaggle.com/mmoreaux/audio-cats-and-dogs#cats_dogs.zip) 。 +在上一教程中,我们了解了如何使用连体网络识别人脸。 现在,我们将看到如何使用连体网络来识别音频。 我们将训练我们的网络,以区分狗的声音和猫的声音。 可以从此处下载[猫和狗音频的数据集](https://www.kaggle.com/mmoreaux/audio-cats-and-dogs#cats_dogs.zip)。 -下载数据后,我们将数据分成三个文件夹:`Dogs`,`Sub_dogs`和`Cats`。 在`Dogs`和`Sub_dogs`中,放置狗的吠叫音频,在`Cats`文件夹中,放置猫的音频。 我们网络的目标是识别音频是狗的吠叫还是其他声音。 众所周知,对于暹罗网络,我们需要成对输入输入。 我们从`Dogs`和`Sub_dogs`文件夹中选择一个音频并将其标记为真正对,并从`Dogs`和`Cats`文件夹中选择一个音频并将它们标记为非对。 即,*(狗,子狗)*是真正的对,*(狗,猫)*是非对的。 +下载数据后,我们将数据分成三个文件夹:`Dogs`,`Sub_dogs`和`Cats`。 在`Dogs`和`Sub_dogs`中,放置狗的吠叫音频,在`Cats`文件夹中,放置猫的音频。 我们网络的目标是识别音频是狗的吠叫还是其他声音。 众所周知,对于连体网络,我们需要成对输入输入。 我们从`Dogs`和`Sub_dogs`文件夹中选择一个音频并将其标记为真正对,并从`Dogs`和`Cats`文件夹中选择一个音频并将它们标记为非对。 即,*(狗,子狗)*是真正的对,*(狗,猫)*是非对的。 -现在,我们将逐步展示如何训练暹罗网络以识别音频是狗的吠叫声还是其他声音。 +现在,我们将逐步展示如何训练连体网络以识别音频是狗的吠叫声还是其他声音。 -为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter Notebook 中找到,并在此处进行解释: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/ master / 02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks / 2.5%20Audio%20Recognition%20using%20Siamese%20Network.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.5%20Audio%20Recognition%20using%20Siamese%20Network.ipynb) 。 +为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter Notebook 中找到,[并在此处进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.5%20Audio%20Recognition%20using%20Siamese%20Network.ipynb)。 首先,我们将加载所有必需的库: @@ -421,7 +421,7 @@ IPython.display.Audio("data/audio/Dogs/dog_barking_0.wav") IPython.display.Audio("data/audio/Cats/cat_13.wav") ``` -那么,如何将这些原始音频馈送到我们的网络? 我们如何从原始音频中提取有意义的功能? 众所周知,神经网络仅接受向量化输入,因此我们需要将音频转换为特征向量。 我们该怎么做? 嗯,我们可以通过几种机制生成音频的嵌入。 这样的流行机制之一是**梅尔频率倒谱系数**( **MFCC** )。 MFCC 使用对数功率谱在频率的非线性梅尔尺度上的线性余弦变换来转换音频的短期功率谱。 要了解有关 MFCC 的更多信息,请查看此不错的教程: [http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/](http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/) 。 +那么,如何将这些原始音频馈送到我们的网络? 我们如何从原始音频中提取有意义的功能? 众所周知,神经网络仅接受向量化输入,因此我们需要将音频转换为特征向量。 我们该怎么做? 嗯,我们可以通过几种机制生成音频的嵌入。 这样的流行机制之一是**梅尔频率倒谱系数**( **MFCC** )。 MFCC 使用对数功率谱在频率的非线性梅尔尺度上的线性余弦变换来转换音频的短期功率谱。 要了解有关 MFCC 的更多信息,[请查看此不错的教程](http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/)。 我们将使用`librosa`库中的 MFCC 函数来生成音频嵌入。 因此,我们定义了一个名为`audio2vector`的函数,该函数在给定音频文件的情况下返回音频嵌入: @@ -466,7 +466,7 @@ array([[-297.54905127, -288.37618855, -314.92037769, ..., 0\. , 0\. , 0\. ]]) ``` -现在我们已经了解了如何生成音频嵌入,我们需要为我们的暹罗网络创建数据。 众所周知,暹罗网络可以成对接受数据,因此我们定义了获取数据的功能。 我们将创建一个真正的对(`Dogs`,`Sub_dogs`),并将标签指定为`1`,将非正当对创建为(`Dogs`,`Cats`),并将标签指定为`0`: +现在我们已经了解了如何生成音频嵌入,我们需要为我们的连体网络创建数据。 众所周知,连体网络可以成对接受数据,因此我们定义了获取数据的功能。 我们将创建一个真正的对(`Dogs`,`Sub_dogs`),并将标签指定为`1`,将非正当对创建为(`Dogs`,`Cats`),并将标签指定为`0`: ```py def get_data(): @@ -503,7 +503,7 @@ X, Y = get_data("/home/sudarshan/sudarshan/Experiments/oneshot-audio/data/") X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2) ``` -现在我们已经成功地生成了数据,我们就建立了暹罗网络。 我们定义了用于特征提取的基本网络,我们使用了三个密集层,中间有一个辍学层: +现在我们已经成功地生成了数据,我们就建立了连体网络。 我们定义了用于特征提取的基本网络,我们使用了三个密集层,中间有一个辍学层: ```py def build_base_network(input_shape): @@ -606,19 +606,19 @@ Epoch 13/13 # 概要 -在本章中,我们学习了什么是暹罗网络,以及如何使用暹罗网络构建人脸和音频识别模型。 我们探索了暹罗网络的架构,该网络基本上由两个相同的神经网络组成,它们具有相同的权重和架构,并且将这些网络的输出插入到一些能量函数中以了解相似性。 +在本章中,我们学习了什么是连体网络,以及如何使用连体网络构建人脸和音频识别模型。 我们探索了连体网络的架构,该网络基本上由两个相同的神经网络组成,它们具有相同的权重和架构,并且将这些网络的输出插入到一些能量函数中以了解相似性。 在下一章中,我们将学习原型网络及其变种,例如高斯原型网络和半原型网络。 我们还将看到如何使用原型网络进行全方位字符集分类。 # 问题 -1. 什么是暹罗网络? +1. 什么是连体网络? 2. 什么是对比损失函数? 3. 能量函数是什么? -4. 暹罗网络所需的数据格式是什么? -5. 暹罗网络有哪些应用? +4. 连体网络所需的数据格式是什么? +5. 连体网络有哪些应用? # 进一步阅读 -* 用于对象跟踪的暹罗网络: [https://arxiv.org/pdf/1606.09549.pdf](https://arxiv.org/pdf/1606.09549.pdf) -* 用于图像识别的暹罗网络: [https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf](https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf) \ No newline at end of file +* [用于对象跟踪的连体网络](https://arxiv.org/pdf/1606.09549.pdf) +* [用于图像识别的连体网络](https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/03.md b/new/handson-meta-learn-py/03.md index 83d29f0724d8db7f6da15de64dd7aa1274639090..0c108b89a4728b198623cdaced47d35799b544f2 100644 --- a/new/handson-meta-learn-py/03.md +++ b/new/handson-meta-learn-py/03.md @@ -1,6 +1,6 @@ # 原型网络及其变体 -在上一章中,我们了解了什么是暹罗网络以及如何将它们用于执行少量学习任务。 我们还探讨了如何使用暹罗网络进行面部和音频识别。 在本章中,我们将介绍另一种有趣的几次学习算法,称为原型网络,该算法能够将其推广到训练集中没有的班级。 我们将从了解什么是原型网络开始,然后我们将了解如何使用原型网络在 omniglot 数据集中执行分类任务。 然后,我们将看到原型网络的不同变体,例如高斯原型网络和半原型网络。 +在上一章中,我们了解了什么是连体网络以及如何将它们用于执行少量学习任务。 我们还探讨了如何使用连体网络进行面部和音频识别。 在本章中,我们将介绍另一种有趣的几次学习算法,称为原型网络,该算法能够将其推广到训练集中没有的班级。 我们将从了解什么是原型网络开始,然后我们将了解如何使用原型网络在 omniglot 数据集中执行分类任务。 然后,我们将看到原型网络的不同变体,例如高斯原型网络和半原型网络。 在本章中,您将了解以下内容: @@ -13,7 +13,7 @@ # 原型网络 -原型网络是另一种简单,高效,很少的镜头学习算法。 像暹罗网络一样,原型网络尝试学习度量空间以执行分类。 原型网络的基本思想是创建每个类的原型表示形式,并根据类原型与查询点之间的距离对查询点(即新点)进行分类。 +原型网络是另一种简单,高效,很少的镜头学习算法。 像连体网络一样,原型网络尝试学习度量空间以执行分类。 原型网络的基本思想是创建每个类的原型表示形式,并根据类原型与查询点之间的距离对查询点(即新点)进行分类。 假设我们有一个包含狮子,大象和狗的图像的支持集,如下图所示: @@ -69,7 +69,7 @@ 现在,我们将看到如何使用原型网络执行分类任务。 我们使用 omniglot 数据集进行分类。 该数据集包含来自 50 个不同字母的 1,623 个手写字符,每个字符都有 20 个不同的示例,这些示例是由不同的人编写的。 由于我们希望我们的网络从数据中学习,因此我们以相同的方式对其进行训练。 我们从每个类中采样五个示例,并将其用作我们的支持集。 我们使用四个卷积块作为编码器来学习支持集的嵌入,并构建类原型。 同样,我们从每个类中为我们的查询集采样五个示例,学习查询集嵌入,并通过比较查询集嵌入和类原型之间的欧式距离来预测查询集类。 让我们逐步了解它会更好地理解这一点。 -您还可以在此处查看 Jupyter Notebook 中可用的代码并进行解释: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/03.%20Prototypical% 20Networks%20and%20its%20Variants / 3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/03.%20Prototypical%20Networks%20and%20its%20Variants/3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb) 。 +[您还可以在此处查看 Jupyter Notebook 中可用的代码并进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/03.%20Prototypical%20Networks%20and%20its%20Variants/3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb)。 首先,我们导入所有必需的库: @@ -558,6 +558,6 @@ elif inverse_transform_type == "other": # 进一步阅读 -* 原型网络: [https://arxiv.org/pdf/1703.05175.pdf](https://arxiv.org/pdf/1703.05175.pdf) -* 高斯原型网络: [https://arxiv.org/pdf/1708.02735.pdf](https://arxiv.org/pdf/1708.02735.pdf) -* 半原型网络: [https://arxiv.org/pdf/1803.00676.pdf](https://arxiv.org/pdf/1803.00676.pdf) \ No newline at end of file +* [原型网络](https://arxiv.org/pdf/1703.05175.pdf) +* [高斯原型网络](https://arxiv.org/pdf/1708.02735.pdf) +* [半原型网络](https://arxiv.org/pdf/1803.00676.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/04.md b/new/handson-meta-learn-py/04.md index 8c2a40547430a3534da236061cdeaa7a8622423b..b1349fda830297006d960f82e3c4d5ae14fcefbc 100644 --- a/new/handson-meta-learn-py/04.md +++ b/new/handson-meta-learn-py/04.md @@ -94,7 +94,7 @@ 关系函数非常简单,对吧? 通过在 TensorFlow 中实现一个关系网络,我们将更好地理解关系网络。 -您还可以在此处查看 Jupyter Notebook 中可用的代码并进行解释: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/04.%20Relation% 20and%20Matching%20Networks%20Using%20Tensorflow / 4.5%20Building%20Relation%20Network%20Using%20Tensorflow.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/04.%20Relation%20and%20Matching%20Networks%20Using%20Tensorflow/4.5%20Building%20Relation%20Network%20Using%20Tensorflow.ipynb) 。 +[您还可以在此处查看 Jupyter Notebook 中可用的代码并进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/04.%20Relation%20and%20Matching%20Networks%20Using%20Tensorflow/4.5%20Building%20Relation%20Network%20Using%20Tensorflow.ipynb)。 首先,我们导入所有必需的库: @@ -685,5 +685,5 @@ class Matching_network(): # 进一步阅读 -* 匹配网络: [https://arxiv.org/pdf/1606.04080.pdf](https://arxiv.org/pdf/1606.04080.pdf) -* 关系网络: [https://arxiv.org/pdf/1711.06025.pdf](https://arxiv.org/pdf/1711.06025.pdf) \ No newline at end of file +* [匹配网络](https://arxiv.org/pdf/1606.04080.pdf) +* [关系网络](https://arxiv.org/pdf/1711.06025.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/05.md b/new/handson-meta-learn-py/05.md index 04e8a3931017ba967856c88095fe42408d4d58d2..39a6c518671a6d24b6bdc9dfe912318985f03c3b 100644 --- a/new/handson-meta-learn-py/05.md +++ b/new/handson-meta-learn-py/05.md @@ -1,6 +1,6 @@ # 记忆增强神经网络 -到目前为止,在前面的章节中,我们已经学习了几种基于距离的度量学习算法。 我们从暹罗网络开始,了解了暹罗网络如何学会区分两个输入,然后我们研究了原型网络以及原型网络的变体,例如高斯原型网络和半原型网络。 展望未来,我们探索了有趣的匹配网络和关系网络。 +到目前为止,在前面的章节中,我们已经学习了几种基于距离的度量学习算法。 我们从连体网络开始,了解了连体网络如何学会区分两个输入,然后我们研究了原型网络以及原型网络的变体,例如高斯原型网络和半原型网络。 展望未来,我们探索了有趣的匹配网络和关系网络。 在本章中,我们将学习用于一次性学习的**记忆增强神经网络**( **MANN** )。 在进入 MANN 之前,我们将了解他们的前身**神经图灵机**( **NTM** )。 我们将学习 NTM 如何使用外部存储器来存储和检索信息,并且还将看到如何使用 NTM 执行复制任务。 @@ -161,7 +161,7 @@ NTM 的重要组成部分如下: 现在,我们将看到如何使用 NTM 执行复制任务。 复制任务的目的是了解 NTM 如何存储和调用任意长度的序列。 我们将为网络提供一个随机序列,以及一个指示序列结束的标记。 它必须学习输出给定的输入序列。 因此,网络会将输入序列存储在内存中,然后从内存中回读。 现在,我们将逐步了解如何执行复制任务,然后在最后看到整个最终代码。 -您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/05.%20Memory% 20Augmented%20Networks / 5.4%20Copy%20Task%20Using%20NTM.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/05.%20Memory%20Augmented%20Networks/5.4%20Copy%20Task%20Using%20NTM.ipynb) 。 +[您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/05.%20Memory%20Augmented%20Networks/5.4%20Copy%20Task%20Using%20NTM.ipynb)。 首先,我们将了解如何实现 NTM 单元。 而不是查看整个代码,我们将逐行查看它。 @@ -795,5 +795,5 @@ M_ = prev_M * tf.expand_dims(1\. - tf.one_hot(prev_indices[:, -1], self.memory_s # 进一步阅读 -* NTM 论文: [https://arxiv.org/pdf/1410.5401.pdf](https://arxiv.org/pdf/1410.5401.pdf) -* 使用记忆增强神经网络的一次性学习: [https://arxiv.org/pdf/1605.06065.pdf](https://arxiv.org/pdf/1605.06065.pdf) \ No newline at end of file +* [NTM 论文](https://arxiv.org/pdf/1410.5401.pdf) +* [使用记忆增强神经网络的一次性学习](https://arxiv.org/pdf/1605.06065.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/06.md b/new/handson-meta-learn-py/06.md index cc8231b58ee2f2c7fec764ed085369ff53243bf7..8fd5b53b3b8b155ac57e4ed76bce53a98912a225 100644 --- a/new/handson-meta-learn-py/06.md +++ b/new/handson-meta-learn-py/06.md @@ -14,7 +14,7 @@ # MAML -MAML 是最近推出且使用最广泛的元学习算法之一,它在元学习研究中创造了重大突破。 学习学习是元学习的重点,我们知道,在元学习中,我们从仅包含少量数据点的各种相关任务中学习,并且元学习者会产生一个可以很好地概括新的相关任务的快速学习者 即使训练样本数量较少。 +MAML 是最近推出且使用最广泛的元学习算法之一,它在元学习研究中创造了重大突破。 元学习是元学习的重点,我们知道,在元学习中,我们从仅包含少量数据点的各种相关任务中学习,并且元学习者会产生一个可以很好地概括新的相关任务的快速学习者 即使训练样本数量较少。 MAML 的基本思想是找到一个更好的初始参数,以便具有良好的初始参数,该模型可以以较少的梯度步骤快速学习新任务。 @@ -112,7 +112,7 @@ MAML 非常擅长寻找最佳初始参数,对吗? 现在,我们将看到 在上一节中,我们了解了 MAML 的工作原理。 我们看到了 MAML 如何获得更好,更健壮的模型参数θ,该参数可以在各个任务之间推广。 现在,我们将通过从头开始编码来更好地了解 MAML。 为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用简单的单层神经网络对其进行训练,然后尝试找到最佳参数θ。 现在,我们将逐步逐步了解如何执行此操作: -您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML% 20and%20it 的%20Variants / 6.5%20Building%20MAML%20From%20Scratch.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.5%20Building%20MAML%20From%20Scratch.ipynb) 。 +[您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.5%20Building%20MAML%20From%20Scratch.ipynb)。 首先,我们导入`numpy`库: @@ -517,7 +517,7 @@ Sampling Next Batch of Tasks 在上一节中,我们了解了 ADML 的工作原理。 我们看到了如何使用干净样本和对抗样本训练我们的模型,以获得更好,更健壮的模型参数θ,该参数可在各个任务之间推广。 现在,我们将通过从头开始编码来更好地理解 ADML。 为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用单层神经网络对其进行训练,然后尝试找到最佳参数`theta`。 现在,我们将逐步了解 ADML 的工作原理。 -您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML% 20and%20it 的%20Variants / 6.7%20Building%20ADML%20From%20Scratch.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.7%20Building%20ADML%20From%20Scratch.ipynb) 。 +[您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.7%20Building%20ADML%20From%20Scratch.ipynb)。 首先,我们导入所有必需的库: @@ -1070,6 +1070,6 @@ Sampling Next Batch of Tasks # 进一步阅读 -* MAML 论文: [https://arxiv.org/pdf/1703.03400.pdf](https://arxiv.org/pdf/1703.03400.pdf) -* 对抗性元学习论文: [https://arxiv.org/pdf/1806.03316.pdf](https://arxiv.org/pdf/1806.03316.pdf) -* CAML 论文: [https://arxiv.org/pdf/1810.03642.pdf](https://arxiv.org/pdf/1810.03642.pdf) \ No newline at end of file +* [MAML 论文](https://arxiv.org/pdf/1703.03400.pdf) +* [对抗性元学习论文](https://arxiv.org/pdf/1806.03316.pdf) +* [CAML 论文](https://arxiv.org/pdf/1810.03642.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/07.md b/new/handson-meta-learn-py/07.md index 33e029fd5b7cb45fc7b8c44dc502fa440c540c8d..abd363b5f89482c5c2ba2203006fe0e96604b8c4 100644 --- a/new/handson-meta-learn-py/07.md +++ b/new/handson-meta-learn-py/07.md @@ -80,7 +80,7 @@ 在上一节中,我们了解了 Meta-SGD 的工作原理。 我们看到了 Meta-SGD 如何获得更好,更健壮的模型参数![](img/0d2d5f82-a3f2-4f2e-a7e0-6d458a3a6600.png),该参数可跨任务进行通用化,并具有最佳的学习率和更新方向。 现在,我们将从头开始对 Meta-SGD 进行编码,以更好地了解它们。 就像我们在 MAML 中所做的一样,为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用简单的单层神经网络对其进行训练,并尝试找到最佳参数![](img/02af8bcf-db2f-4e62-9447-2e072986d3b3.png)。 我们将逐步详细介绍如何执行此操作。 -您还可以在此处查看 Jupyter Notebook 中提供的代码,并提供说明: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta- SGD%20and%20Reptile%20Algorithms / 7.4%20Building%20Meta-SGD%20from%20Scratch.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.4%20Building%20Meta-SGD%20from%20Scratch.ipynb) 。 +[您还可以在此处查看 Jupyter Notebook 中提供的代码,并提供说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.4%20Building%20Meta-SGD%20from%20Scratch.ipynb)。 首先,我们导入`numpy`库: @@ -460,7 +460,7 @@ Sampling Next Batch of Tasks 假设 *y =幅度* sin(x + phase)*。 我们算法的目标是学习在给定 *x* 的情况下对 *y* 的值进行回归。 幅度的值在 0.1 到 5.0 之间随机选择,相位的值在 0 到![](img/21218cec-890b-4d1e-bca2-5f739aa42d55.png)之间随机选择。 因此,对于每个任务,我们仅采样 10 个数据点并训练网络-也就是说,对于每个任务,我们仅采样 10 个*(x,y)*对。 让我们看一下代码并详细查看它。 -您还可以在此处查看 Jupyter Notebook 中提供的代码,并提供说明: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta- SGD%20and%20Reptile%20Algorithms / 7.7%20Sine%20wave%20Regression%20Using%20Reptile.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.7%20Sine%20wave%20Regression%20Using%20Reptile.ipynb) 。 +[您还可以在此处查看 Jupyter Notebook 中提供的代码,并提供说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.7%20Sine%20wave%20Regression%20Using%20Reptile.ipynb)。 首先,我们导入所有必需的库: @@ -777,5 +777,5 @@ Sampling Next Batch of Tasks # 进一步阅读 -* Meta-SGD: [https://arxiv.org/pdf/1707.09835.pdf](https://arxiv.org/pdf/1707.09835.pdf) -* 爬行动物: [https://arxiv.org/pdf/1803.02999.pdf](https://arxiv.org/pdf/1803.02999.pdf) \ No newline at end of file +* [Meta-SGD](https://arxiv.org/pdf/1707.09835.pdf) +* [Reptile](https://arxiv.org/pdf/1803.02999.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/08.md b/new/handson-meta-learn-py/08.md index cd47e5d4295488fea20f66d6a03bbacfe99dc26e..aea2e560ea80e8058eac324a0fb46df0bbc5e24f 100644 --- a/new/handson-meta-learn-py/08.md +++ b/new/handson-meta-learn-py/08.md @@ -114,7 +114,7 @@ for i in range(num_tasks): 现在,我们将逐步详细地了解如何执行此操作。 -您也可以在此处以 Jupyter 笔记本的形式查看完整代码: [https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/08.%20Gradient% 20Agreement%20As%20An%20Optimization%20Objective / 8.4%20Building%20Gradient%20Agreement%20Algorithm%20with%20MAML.ipynb](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/08.%20Gradient%20Agreement%20As%20An%20Optimization%20Objective/8.4%20Building%20Gradient%20Agreement%20Algorithm%20with%20MAML.ipynb) 。 +[您也可以在此处以 Jupyter 笔记本的形式查看完整代码](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/08.%20Gradient%20Agreement%20As%20An%20Optimization%20Objective/8.4%20Building%20Gradient%20Agreement%20Algorithm%20with%20MAML.ipynb)。 我们导入所有必要的库: @@ -484,4 +484,4 @@ Sampling Next Batch of Tasks # 进一步阅读 -* 梯度一致性算法论文: [https://arxiv.org/pdf/1810.08178.pdf](https://arxiv.org/pdf/1810.08178.pdf) \ No newline at end of file +* [梯度一致性算法论文](https://arxiv.org/pdf/1810.08178.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/09.md b/new/handson-meta-learn-py/09.md index efc9790f45aceef1ad70ba24e068489f30164d13..281632518af3f37e2a1e127a040191d03ebd3883 100644 --- a/new/handson-meta-learn-py/09.md +++ b/new/handson-meta-learn-py/09.md @@ -1,6 +1,6 @@ # 最新进展和后续步骤 -恭喜你! 我们已经到了最后一章。 我们已经走了很长一段路。 我们从元学习基础开始,然后看到了几种一次性学习算法,例如暹罗,原型,匹配和关系网络。 后来,我们还看到了 NTM 如何存储和检索信息。 展望未来,我们看到了有趣的元学习算法,例如 MAML,Reptile 和 Meta-SGD。 我们看到了这些算法如何找到最佳的初始参数。 现在,我们将看到元学习的一些最新进展。 我们将学习如何使用与任务无关的元学习来减少元学习中的任务偏差,以及如何在模仿学习系统中使用元学习。 然后,我们将看到如何使用 CACTUs 算法在无监督的学习环境中应用 MAML。 稍后,我们将学习一种称为学习在概念空间中学习的深度元学习算法。 +恭喜你! 我们已经到了最后一章。 我们已经走了很长一段路。 我们从元学习基础开始,然后看到了几种一次性学习算法,例如连体,原型,匹配和关系网络。 后来,我们还看到了 NTM 如何存储和检索信息。 展望未来,我们看到了有趣的元学习算法,例如 MAML,Reptile 和 Meta-SGD。 我们看到了这些算法如何找到最佳的初始参数。 现在,我们将看到元学习的一些最新进展。 我们将学习如何使用与任务无关的元学习来减少元学习中的任务偏差,以及如何在模仿学习系统中使用元学习。 然后,我们将看到如何使用 CACTUs 算法在无监督的学习环境中应用 MAML。 稍后,我们将学习一种称为学习在概念空间中学习的深度元学习算法。 在本章中,您将了解以下内容: @@ -181,7 +181,7 @@ MIL 中涉及的步骤如下: # 学习在概念空间中学习 -现在,我们将看到如何使用深度元学习在概念空间中学习学习。 首先,我们如何进行元学习? 我们在每个任务中抽样一批相关任务和一些 *k* 数据点,并训练我们的元学习者。 我们可以将深度学习的力量与元学习结合起来,而不仅仅是使用我们的原始元学习技术进行培训。 因此,当我们对一批任务以及每个任务中的一些 *k* 数据点进行采样时,我们将使用深度神经网络学习每个 *k* 数据点的表示形式,然后 对这些表示进行元学习。 +现在,我们将看到如何使用深度元学习在概念空间中元学习。 首先,我们如何进行元学习? 我们在每个任务中抽样一批相关任务和一些 *k* 数据点,并训练我们的元学习者。 我们可以将深度学习的力量与元学习结合起来,而不仅仅是使用我们的原始元学习技术进行培训。 因此,当我们对一批任务以及每个任务中的一些 *k* 数据点进行采样时,我们将使用深度神经网络学习每个 *k* 数据点的表示形式,然后 对这些表示进行元学习。 我们的框架包含三个组件: @@ -282,7 +282,7 @@ MIL 中涉及的步骤如下: # 进一步阅读 -* 与任务无关的元学习: [https://arxiv.org/pdf/1805.07722.pdf](https://arxiv.org/pdf/1805.07722.pdf) -* 元模仿学习: [http://proceedings.mlr.press/v78/finn17a/finn17a.pdf](http://proceedings.mlr.press/v78/finn17a/finn17a.pdf) -* 仙人掌: [https://arxiv.org/pdf/1810.02334.pdf](https://arxiv.org/pdf/1810.02334.pdf) -* 在概念空间中学习学习: [https://arxiv.org/pdf/1802.03596.pdf](https://arxiv.org/pdf/1802.03596.pdf) \ No newline at end of file +* [与任务无关的元学习](https://arxiv.org/pdf/1805.07722.pdf) +* [元模仿学习](http://proceedings.mlr.press/v78/finn17a/finn17a.pdf) +* [CACTUS](https://arxiv.org/pdf/1810.02334.pdf) +* [概念空间中的元学习](https://arxiv.org/pdf/1802.03596.pdf) \ No newline at end of file diff --git a/new/handson-meta-learn-py/10.md b/new/handson-meta-learn-py/10.md index 8018a2cbc01a6501b10e981dc640cb9075c41d44..639e3449b28f53971d9dc7db81d6f52b103290eb 100644 --- a/new/handson-meta-learn-py/10.md +++ b/new/handson-meta-learn-py/10.md @@ -11,7 +11,7 @@ # 第 2 章:使用连体网络的面部和音频识别 -1. 暹罗网络是神经网络的一种特殊类型,它是最简单,最常用的单次学习算法之一。 暹罗网络基本上由两个对称的神经网络组成,它们具有相同的权重和架构,并最终通过能量函数 *E* 结合在一起。 +1. 连体网络是神经网络的一种特殊类型,它是最简单,最常用的单次学习算法之一。 连体网络基本上由两个对称的神经网络组成,它们具有相同的权重和架构,并最终通过能量函数 *E* 结合在一起。 2. The contrastive loss function can be expressed as follows:  ![](img/eb7b45ed-a6b9-4a3d-aff4-1cea02fba160.png) @@ -20,9 +20,9 @@ 3. 能量函数告诉我们两个输入的相似程度。 它基本上是任何相似性度量,例如欧几里得距离和余弦相似性。 -4. 暹罗网络的输入应该成对( *X 1* , *X 2* )及其二进制标记*Y∈(0,1)*,指出输入对是真实对(相同)还是非真实对(不同)。 +4. 连体网络的输入应该成对( *X 1* , *X 2* )及其二进制标记*Y∈(0,1)*,指出输入对是真实对(相同)还是非真实对(不同)。 -5. 暹罗网络的应用是无止境的。 它们已经堆叠了用于执行各种任务的各种体系结构,例如人类动作识别,场景更改检测和机器翻译。 +5. 连体网络的应用是无止境的。 它们已经堆叠了用于执行各种任务的各种体系结构,例如人类动作识别,场景更改检测和机器翻译。 # 第三章:原型网络及其变体 diff --git a/new/handson-rl-py/00.md b/new/handson-rl-py/00.md index a8f5ce09a6f33a1a5b184be41e49f60345378f7d..4ac61d72f0e7e7dad1538ce9b94ac6cf92565b6d 100644 --- a/new/handson-rl-py/00.md +++ b/new/handson-rl-py/00.md @@ -60,13 +60,13 @@ * Mac 版 Zipeg / iZip / UnRarX * 适用于 Linux 的 7-Zip / PeaZip -本书的代码包也托管在 GitHub 的 [](https://github.com/PacktPublishing/Hands-On-Reinforcement-Learning-with-Python) [https://github.com/PacktPublishing/Hands-On-Reinforcement-Learning-with-Python](https://github.com/PacktPublishing/Hands-On-Reinforcement-Learning-with-Python) 上。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 +本书的代码包也托管在 [GitHub](https://github.com/PacktPublishing/Hands-On-Reinforcement-Learning-with-Python) 上。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 -我们还从 **[https://github.com/PacktPublishing/](https://github.com/PacktPublishing/)** 提供了丰富的书籍和视频目录中的其他代码包。 去看一下! +我们还从[这里](https://github.com/PacktPublishing/)提供了丰富的书籍和视频目录中的其他代码包。 去看一下! # 下载彩色图像 -我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 您可以在此处下载: [http://www.packtpub.com/sites/default/files/downloads/HandsOnReinforcementLearningwithPython_ColorImages.pdf](http://www.packtpub.com/sites/default/files/downloads/Bookname_ColorImages.pdf) 。 +我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 [您可以在此处下载](http://www.packtpub.com/sites/default/files/downloads/Bookname_ColorImages.pdf)。 # 使用约定 diff --git a/new/handson-rl-py/01.md b/new/handson-rl-py/01.md index a38cefa0b7a8998cd5d3e327fe0234a245d79bc0..e28c82576b5ed3c86a2a2341e4d9e68b12581974 100644 --- a/new/handson-rl-py/01.md +++ b/new/handson-rl-py/01.md @@ -203,4 +203,4 @@ RL 被广泛用于金融投资组合管理,这是将资金不断重新分配 # 进一步阅读 -**RL 概述**: [https://www.cs.ubc.ca/~murphyk/Bayes/pomdp.html](https://www.cs.ubc.ca/~murphyk/Bayes/pomdp.html) 。 \ No newline at end of file +[**RL 概述**](https://www.cs.ubc.ca/~murphyk/Bayes/pomdp.html)。 \ No newline at end of file diff --git a/new/handson-rl-py/02.md b/new/handson-rl-py/02.md index aa5454591e4ce490c265491d13359842e132052b..4594d6cca5bebb2b3e0d4bd4da3c1c03ae5e95d7 100644 --- a/new/handson-rl-py/02.md +++ b/new/handson-rl-py/02.md @@ -19,7 +19,7 @@ OpenAI 是由 Elon Musk 和 Sam Altman 创立的非营利性,开源**人工智 本书中的所有示例均使用 Anaconda 版本的 Python。 Anaconda 是 Python 的开源发行版。 它被广泛用于科学计算和处理大量数据。 它提供了一个出色的程序包管理环境。 它提供对 Windows,macOS 和 Linux 的支持。 Anaconda 随附安装了 Python 以及用于科学计算的流行软件包,例如 NumPy,SciPy 等。 -要下载 Anaconda,请访问 [https://www.anaconda.com/download/](https://www.anaconda.com/download/) ,您将在此处看到用于下载用于不同平台的 Anaconda 的选项。 +要下载 Anaconda,请访问[这里](https://www.anaconda.com/download/),您将在此处看到用于下载用于不同平台的 Anaconda 的选项。 如果使用 Windows 或 Mac,则可以根据计算机体系结构直接下载图形安装程序,然后使用图形安装程序进行安装。 @@ -53,7 +53,7 @@ source activate universe 安装 Anaconda 之后,我们需要安装 Docker。 Docker 使将应用程序部署到生产变得容易。 假设您在具有 TensorFlow 和其他一些库的 localhost 中构建了一个应用程序,并且要将应用程序部署到服务器中。 您将需要在服务器上安装所有这些依赖项。 但是使用 Docker,我们可以将应用程序及其依赖项打包在一起,这称为容器,并且我们可以在服务器上运行应用程序而无需在打包的 Docker 容器中使用任何外部依赖项。 OpenAI 不支持 Windows,因此要在 Windows 中安装 OpenAI,我们需要使用 Docker。 而且,大多数 OpenAI Universe 环境都需要 Docker 来模拟环境。 现在让我们看看如何安装 Docker。 -要下载 Docker,请转至 [https://docs.docker.com/](https://docs.docker.com/) ,您将在其中看到一个名为 Get Docker 的选项。 如果选择该选项,则将看到不同操作系统的选项。 如果使用 Windows 或 Mac,则可以下载 Docker 并直接使用图形安装程序进行安装。 +要下载 Docker,请转至[这里](https://docs.docker.com/),您将在其中看到一个名为 Get Docker 的选项。 如果选择该选项,则将看到不同操作系统的选项。 如果使用 Windows 或 Mac,则可以下载 Docker 并直接使用图形安装程序进行安装。 如果您使用的是 Linux,请按照以下步骤操作: @@ -770,6 +770,6 @@ with tf.Session() as sess: 您可以进一步参考以下论文: -* **OpenAI 博客**: [https://blog.openai.com](https://blog.openai.com) -* **OpenAI 环境**: [https://gym.openai.com/envs/](https://gym.openai.com/envs/) -* **TensorFlow 官方网站**: [https://www.tensorflow.org/](https://www.tensorflow.org/) \ No newline at end of file +* [**OpenAI 博客**](https://blog.openai.com) +* [**OpenAI 环境**](https://gym.openai.com/envs/) +* [**TensorFlow 官方网站**](https://www.tensorflow.org/) \ No newline at end of file diff --git a/new/handson-rl-py/03.md b/new/handson-rl-py/03.md index 2f88494e1dbab20effe861622239d30aa3c1f824..9992d93eb5edd388a545e13b81813d048e49f68f 100644 --- a/new/handson-rl-py/03.md +++ b/new/handson-rl-py/03.md @@ -854,4 +854,4 @@ print (policy_iteration(env)) # 进一步阅读 -**MDP 哈佛讲座材料**: [http://am121.seas.harvard.edu/site/wp-content/uploads/2011/03/MarkovDecisionProcesses-HillierLieberman.pdf](http://am121.seas.harvard.edu/site/wp-content/uploads/2011/03/MarkovDecisionProcesses-HillierLieberman.pdf) \ No newline at end of file +[**MDP 哈佛讲座材料**](http://am121.seas.harvard.edu/site/wp-content/uploads/2011/03/MarkovDecisionProcesses-HillierLieberman.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/04.md b/new/handson-rl-py/04.md index 520a70ee7847a48539a107c4a39644a5a5da8028..20d36c366d7771b71077ee1751dd4fb69b052f66 100644 --- a/new/handson-rl-py/04.md +++ b/new/handson-rl-py/04.md @@ -625,5 +625,5 @@ def epsilon_greedy_policy(state, epsilon): 请参考以下链接: -* **David Silver 的无模型预测演示**: [http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/MC-TD.pdf](http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/MC-TD.pdf) -* **David Silver 的无模型控件演示文稿**: [http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/control.pdf](http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/control.pdf) \ No newline at end of file +* [**David Silver 的无模型预测演示**](http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/MC-TD.pdf) +* [**David Silver 的无模型控件演示文稿**](http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/control.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/05.md b/new/handson-rl-py/05.md index f706aef49b95dab286986c19ca55d9533133da1b..a5bbb8e14167de3a1dbd1f68667fdd4895db896e 100644 --- a/new/handson-rl-py/05.md +++ b/new/handson-rl-py/05.md @@ -551,4 +551,4 @@ Q 学习和 SARSA 对许多人来说总是很困惑。 让我们分解一下两 # 进一步阅读 -**萨顿的原始 TD 论文**: [https://pdfs.semanticscholar.org/9c06/865e912788a6a51470724e087853d7269195.pdf](https://pdfs.semanticscholar.org/9c06/865e912788a6a51470724e087853d7269195.pdf) \ No newline at end of file +[**萨顿的原始 TD 论文**](https://pdfs.semanticscholar.org/9c06/865e912788a6a51470724e087853d7269195.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/06.md b/new/handson-rl-py/06.md index af5c066b08d22cb8ef09a0346395672c60584e14..7ce8e71bb7ede80ba103a7f48a7f053e8053aaf1 100644 --- a/new/handson-rl-py/06.md +++ b/new/handson-rl-py/06.md @@ -508,6 +508,6 @@ sns.distplot(banner_selected) 您还可以参考以下链接: -* **个性化的上下文强盗**: [https://www.microsoft.com/zh-CN/research/blog/contextual-bandit-breakthrough-enables-deeper-personalization/](https://www.microsoft.com/en-us/research/blog/contextual-bandit-breakthrough-enables-deeper-personalization/) -* **Netflix 如何使用情境强盗**: [https://medium.com/netflix-techblog/artwork-personalization-c589f074ad76](https://medium.com/netflix-techblog/artwork-personalization-c589f074ad76) -* **使用 MAB 的协作过滤**: [https://arxiv.org/pdf/1708.03058.pdf](https://arxiv.org/pdf/1708.03058.pdf) \ No newline at end of file +* [**个性化的上下文强盗**](https://www.microsoft.com/en-us/research/blog/contextual-bandit-breakthrough-enables-deeper-personalization/) +* [**Netflix 如何使用情境强盗**](https://medium.com/netflix-techblog/artwork-personalization-c589f074ad76) +* [**使用 MAB 的协作过滤**](https://arxiv.org/pdf/1708.03058.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/07.md b/new/handson-rl-py/07.md index 62350da94c9871d6e8e86108379d285a45e12752..cf5c6a30376a964572a5cbfbd8f480cc38a98057 100644 --- a/new/handson-rl-py/07.md +++ b/new/handson-rl-py/07.md @@ -479,7 +479,7 @@ LSTM 单元称为内存,它们负责存储信息。 但是信息必须在存 # 使用 LSTM RNN 生成歌曲歌词 -现在,我们将看到如何使用 LSTM 网络生成 Zayn Malik 的歌曲歌词。 可以从此处下载数据集( [https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/07.%20Deep%20Learning%20Fundamentals/data/ZaynLyrics。 txt)](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/07.%20Deep%20Learning%20Fundamentals/data/ZaynLyrics.txt)),其中包含 Zayn 的歌词集。 +现在,我们将看到如何使用 LSTM 网络生成 Zayn Malik 的歌曲歌词。 [可以从此处下载数据集](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/07.%20Deep%20Learning%20Fundamentals/data/ZaynLyrics.txt),其中包含 Zayn 的歌词集。 首先,我们将导入必要的库: @@ -998,7 +998,7 @@ output = tf.matmul(fc, w_out)+ b_out yhat = tf.nn.softmax(output) ``` -我们可以将损失函数定义为交叉熵损失。 我们将使用一种称为 Adam 优化器( [https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer) )的新型优化器,而不是使用梯度下降优化器,来使损失函数最小化。 : +我们可以将损失函数定义为交叉熵损失。 我们将使用一种称为 [Adam 优化器](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer)的新型优化器,而不是使用梯度下降优化器,来使损失函数最小化。 : ```py cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=output, labels=y))optimiser = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cross_entropy) @@ -1065,5 +1065,5 @@ with tf.Session() as sess: 深度学习是一个巨大的话题。 要探索有关深度学习和其他相关算法的更多信息,请查看以下非常有用的链接: -* **有关此 CNN 的更多信息,请访问这门很棒的斯坦福课程**: [https://www.youtube.com/watch?v=NfnWJUyUJYU & list = PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC](https://www.youtube.com/watch?v=NfnWJUyUJYU&list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC) -* **通过此很棒的博客文章**深入研究 RNN: [http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/](http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/) \ No newline at end of file +* [**有关此 CNN 的更多信息,请访问这门很棒的斯坦福课程**](https://www.youtube.com/watch?v=NfnWJUyUJYU&list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC) +* [**通过此很棒的博客文章深入研究 RNN**](http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/) \ No newline at end of file diff --git a/new/handson-rl-py/08.md b/new/handson-rl-py/08.md index 0bf2f48b97175f2510db1f987d12828022963363..daf9d552500658558130c7f028697933eb2d5e7a 100644 --- a/new/handson-rl-py/08.md +++ b/new/handson-rl-py/08.md @@ -92,7 +92,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧 # 建立代理来玩 Atari 游戏 -现在,我们将看到如何建立一个代理来玩任何 Atari 游戏。 您可以在此处获得 Jupyter 笔记本的完整代码及其说明( [https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/08.%20Atari%20Games %20with%20DQN / 8.8%20Building%20an%20Agent%20to%20Play%20Atari%20Games.ipynb](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/08.%20Atari%20Games%20with%20DQN/8.8%20Building%20an%20Agent%20to%20Play%20Atari%20Games.ipynb) )。 +现在,我们将看到如何建立一个代理来玩任何 Atari 游戏。 [您可以在此处获得 Jupyter 笔记本的完整代码及其说明](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/08.%20Atari%20Games%20with%20DQN/8.8%20Building%20an%20Agent%20to%20Play%20Atari%20Games.ipynb)。 首先,我们导入所有必需的库: @@ -106,7 +106,7 @@ import random from datetime import datetime ``` -我们可以使用此处提供的任何 Atari 游戏环境: [http://gym.openai.com/envs/#atari](http://gym.openai.com/envs/#atari) 。 +[我们可以使用此处提供的任何 Atari 游戏环境](http://gym.openai.com/envs/#atari)。 在此示例中,我们使用“吃豆人”游戏环境: @@ -467,6 +467,6 @@ with tf.Session() as sess: # 进一步阅读 -* **DQN 论文**: [https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf](https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf) -* **双重 DQN 论文**: [https://arxiv.org/pdf/1509.06461.pdf](https://arxiv.org/pdf/1509.06461.pdf) -* **决斗网络架构**: [https://arxiv.org/pdf/1511.06581.pdf](https://arxiv.org/pdf/1511.06581.pdf) \ No newline at end of file +* [**DQN 论文**](https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf) +* [**双重 DQN 论文**](https://arxiv.org/pdf/1509.06461.pdf) +* [**决斗网络架构**](https://arxiv.org/pdf/1511.06581.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/09.md b/new/handson-rl-py/09.md index b3f3e4d6385b0df05edbe0f1ff0bd03ef30504d0..48c68ba44e47e7c7444d7db78bb96a66bfc2b0d4 100644 --- a/new/handson-rl-py/09.md +++ b/new/handson-rl-py/09.md @@ -36,7 +36,7 @@ 毁灭战士是一款非常受欢迎的第一人称射击游戏。 游戏的目标是杀死怪物。 末日是部分可观察的 MDP 的另一个示例,因为座席(玩家)的视角限制为 90 度。 该代理对其余环境一无所知。 现在,我们将看到如何使用 DRQN 来训练我们的经纪人玩《毁灭战士》。 -代替 OpenAI Gym,我们将使用 ViZDoom 软件包来模拟 Doom 环境以训练我们的代理。 要了解有关 ViZDoom 软件包的更多信息,请访问其官方网站,网址为 [http://vizdoom.cs.put.edu.pl/](http://vizdoom.cs.put.edu.pl/) 。 我们可以使用以下命令简单地安装 ViZDoom: +代替 OpenAI Gym,我们将使用 ViZDoom 软件包来模拟 Doom 环境以训练我们的代理。 要了解有关 ViZDoom 软件包的更多信息,[请访问其官方网站](http://vizdoom.cs.put.edu.pl/)。 我们可以使用以下命令简单地安装 ViZDoom: ```py pip install vizdoom @@ -121,7 +121,7 @@ for i in range(no_of_episodes): # DRQN 的厄运 -现在,让我们看看如何利用 DRQN 算法来训练我们的特工玩《毁灭战士》。 我们为成功杀死怪物分配正面奖励,为失去生命,自杀和失去弹药(子弹)分配负面奖励。 您可以在[中获得 Jupyter 笔记本的完整代码及其解释,网址为](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/09.%20Playing%20Doom%20Game%20using%20DRQN/9.5%20Doom%20Game%20Using%20DRQN.ipynb) [https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/09.%20Playing%20Doom% 20Game%20using%20DRQN / 9.5%20Doom%20Game%20Using%20DRQN.ipynb](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/09.%20Playing%20Doom%20Game%20using%20DRQN/9.5%20Doom%20Game%20Using%20DRQN.ipynb) 。 本节中使用的代码的信誉归于 Luthanicus([​​HTG2] https://github.com/Luthanicus/losaltoshackathon-drqn )。 +现在,让我们看看如何利用 DRQN 算法来训练我们的特工玩《毁灭战士》。 我们为成功杀死怪物分配正面奖励,为失去生命,自杀和失去弹药(子弹)分配负面奖励。 您可以在[这里](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/09.%20Playing%20Doom%20Game%20using%20DRQN/9.5%20Doom%20Game%20Using%20DRQN.ipynb)获得 Jupyter 笔记本的完整代码及其解释。 本节中使用的代码的权利归于 [Luthanicus](https://github.com/Luthanicus/losaltoshackathon-drqn)。 首先,让我们导入所有必需的库: @@ -601,6 +601,6 @@ DARQN 的体系结构如下所示: 考虑以下内容,以进一步了解您的知识: -* **DRQN 论文**: [https://arxiv.org/pdf/1507.06527.pdf](https://arxiv.org/pdf/1507.06527.pdf) -* **使用 DRQN 玩 FPS 游戏**: [https://arxiv.org/pdf/1609.05521.pdf](https://arxiv.org/pdf/1609.05521.pdf) -* **DARQN 论文**: [https://arxiv.org/pdf/1512.01693.pdf](https://arxiv.org/pdf/1512.01693.pdf) \ No newline at end of file +* [**DRQN 论文**](https://arxiv.org/pdf/1507.06527.pdf) +* [**使用 DRQN 玩 FPS 游戏**](https://arxiv.org/pdf/1609.05521.pdf) +* [**DARQN 论文**](https://arxiv.org/pdf/1512.01693.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/10.md b/new/handson-rl-py/10.md index 27838a65e72551a62def3ab98a41fb7d60fe34d4..059c3f3b11ae815b9608445938c6664a110bcca7 100644 --- a/new/handson-rl-py/10.md +++ b/new/handson-rl-py/10.md @@ -59,11 +59,11 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外 # 驾驶 A3C 上山 -让我们通过山车示例了解 A3C。 我们的代理人是汽车,它被放置在两座山之间。 我们代理人的目标是向右上方爬。 但是,汽车不能一口气上山。 它必须来回驱动以建立动力。 如果我们的经纪人在开车上花费更少的精力,将获得高额奖励。 本节使用的代码归功于 Stefan Boschenriedter( [https://github.com/stefanbo92/A3C-Continuous](https://github.com/stefanbo92/A3C-Continuous) )。 环境如下所示: +让我们通过山车示例了解 A3C。 我们的代理人是汽车,它被放置在两座山之间。 我们代理人的目标是向右上方爬。 但是,汽车不能一口气上山。 它必须来回驱动以建立动力。 如果我们的经纪人在开车上花费更少的精力,将获得高额奖励。 本节使用的代码归功于 [Stefan Boschenriedter](https://github.com/stefanbo92/A3C-Continuous)。 环境如下所示: ![](img/00298.jpeg) -好的,让我们开始编码吧! 完整的代码可在 Jupyter 笔记本中获得,并在此处进行解释( [https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/10.%20Aysnchronous%20Advantage% 20Actor%20Critic%20Network / 10.5%20Drive%20up%20the%20Mountain%20Using%20A3C.ipynb](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/10.%20Aysnchronous%20Advantage%20Actor%20Critic%20Network/10.5%20Drive%20up%20the%20Mountain%20Using%20A3C.ipynb) )。 +好的,让我们开始编码吧! 完整的代码可在 Jupyter 笔记本中获得,[并在此处进行解释](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/10.%20Aysnchronous%20Advantage%20Actor%20Critic%20Network/10.5%20Drive%20up%20the%20Mountain%20Using%20A3C.ipynb)。 首先,让我们导入必要的库: @@ -460,5 +460,5 @@ tensorboard --logdir=logs --port=6007 --host=127.0.0.1 您还可以参考以下论文: -* **A3C 论文**: [https://arxiv.org/pdf/1602.01783.pdf](https://arxiv.org/pdf/1602.01783.pdf) -* **视觉增强型 A3C** : [http://cs231n.stanford.edu/reports/2017/pdfs/617.pdf](http://cs231n.stanford.edu/reports/2017/pdfs/617.pdf) \ No newline at end of file +* [**A3C 论文**](https://arxiv.org/pdf/1602.01783.pdf) +* [**视觉增强型 A3C**](http://cs231n.stanford.edu/reports/2017/pdfs/617.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/11.md b/new/handson-rl-py/11.md index ba003586278a8c38850ec0c85aa2e55444c425eb..03af599c461b9d4faabc76a810599166217f65f0 100644 --- a/new/handson-rl-py/11.md +++ b/new/handson-rl-py/11.md @@ -25,7 +25,7 @@ 假设我们的经纪人正在驾驶航天器,而我们的经纪人的目标是正确着陆在着陆垫上。 如果我们的特工(着陆器)从着陆点着陆,则它会失去奖励,并且如果特工崩溃或休息,情节将终止。 在环境中可用的四个离散动作是“不执行任何操作”,“向左射击引擎”,“向主机射击”和“向右引擎”。 -现在,我们将看到如何训练我们的代理商以策略梯度正确降落在降落区。 本节中使用的代码值得 Gabriel( [https://github.com/gabrielgarza/openai-gym-policy-gradient](https://github.com/gabrielgarza/openai-gym-policy-gradient) ): +现在,我们将看到如何训练我们的代理商以策略梯度正确降落在降落区。 本节中使用的代码属于 [Gabriel](https://github.com/gabrielgarza/openai-gym-policy-gradient): ![](img/00308.jpeg) @@ -40,7 +40,7 @@ import numpy as np import time ``` -然后,我们定义`PolicyGradient`类,该类实现了策略梯度算法。 让我们分解类并分别查看每个函数。 您可以将整个程序看作 Jupyter 笔记本( [https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/11.%20Policy%20Gradients%20and% 20Optimization / 11.2%20Lunar%20Lander%20Using%20Policy%20Gradients.ipynb](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/11.%20Policy%20Gradients%20and%20Optimization/11.2%20Lunar%20Lander%20Using%20Policy%20Gradients.ipynb) ): +然后,我们定义`PolicyGradient`类,该类实现了策略梯度算法。 让我们分解类并分别查看每个函数。 [您可以将整个程序看作 Jupyter 笔记本](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/11.%20Policy%20Gradients%20and%20Optimization/11.2%20Lunar%20Lander%20Using%20Policy%20Gradients.ipynb): ```py class PolicyGradient: @@ -251,7 +251,7 @@ class PolicyGradient: # 摆动钟摆 -我们有一个从随机位置开始的摆锤,我们的探员的目标是向上摆动摆锤使其保持直立。 我们将在这里看到如何使用 DDPG。 wshuail( [https://github.com/wangshuailong/reinforcement_learning_with_Tensorflow/tree/master/DDPG](https://github.com/wangshuailong/reinforcement_learning_with_Tensorflow/tree/master/DDPG) )提供了本节中使用的代码。 +我们有一个从随机位置开始的摆锤,我们的探员的目标是向上摆动摆锤使其保持直立。 我们将在这里看到如何使用 DDPG。 [wshuail](https://github.com/wangshuailong/reinforcement_learning_with_Tensorflow/tree/master/DDPG) 提供了本节中使用的代码。 首先,让我们导入必要的库: @@ -533,7 +533,7 @@ for i in range(no_of_episodes): 在 TRPO 中,我们迭代地改进了该策略,并施加了一个约束,以使旧策略和新策略之间的 **Kullback-Leibler** ( **KL** )差异要小于某个常数。 ![](img/00326.jpeg)。 该约束称为信任区域约束。 -那么什么是 KL 分歧? KL 散度告诉我们两个概率分布如何彼此不同。 由于我们的政策是针对行动的概率分布,因此 KL 差异告诉我们新政策与旧政策有多远。 为什么我们必须使旧策略和新策略之间的距离保持小于恒定值![](img/00327.jpeg)? 因为我们不希望我们的新政策与旧政策脱节。 因此,我们施加了约束以使新策略接近旧策略。 同样,为什么我们必须保持旧政策呢? 当新政策与旧政策相距甚远时,它将影响代理的学习绩效,并导致完全不同的学习行为。 简而言之,在 TRPO 中,我们朝着改善政策的方向迈出了一步,即使报酬最大化,但我们还应确保满足信任区域约束。 它使用共轭梯度下降( [http://www.idi.ntnu.no/~elster/tdt24/tdt24-f09/cg.pdf](http://www.idi.ntnu.no/~elster/tdt24/tdt24-f09/cg.pdf) )优化网络参数![](img/00328.jpeg),同时满足约束条件。 该算法保证了单调策略的改进,并且在各种连续环境中也取得了出色的效果。 +那么什么是 KL 分歧? KL 散度告诉我们两个概率分布如何彼此不同。 由于我们的政策是针对行动的概率分布,因此 KL 差异告诉我们新政策与旧政策有多远。 为什么我们必须使旧策略和新策略之间的距离保持小于恒定值![](img/00327.jpeg)? 因为我们不希望我们的新政策与旧政策脱节。 因此,我们施加了约束以使新策略接近旧策略。 同样,为什么我们必须保持旧政策呢? 当新政策与旧政策相距甚远时,它将影响代理的学习绩效,并导致完全不同的学习行为。 简而言之,在 TRPO 中,我们朝着改善政策的方向迈出了一步,即使报酬最大化,但我们还应确保满足信任区域约束。 [它使用共轭梯度下降](http://www.idi.ntnu.no/~elster/tdt24/tdt24-f09/cg.pdf)优化网络参数![](img/00328.jpeg),同时满足约束条件。 该算法保证了单调策略的改进,并且在各种连续环境中也取得了出色的效果。 现在,我们将了解 TRPO 的数学原理。 如果您对数学不感兴趣,可以跳过本节。 @@ -683,6 +683,6 @@ Kakade 和 Langford 从(1)得出以下方程式: 您可以进一步参考以下论文: -* **DDPG 论文**: [https://arxiv.org/pdf/1509.02971.pdf](https://github.com/wangshuailong/reinforcement_learning_with_Tensorflow/tree/master/DDPG) -* **TRPO 纸**: [https://arxiv.org/pdf/1502.05477.pdf](https://arxiv.org/pdf/1502.05477.pdf) -* **PPO 论文**: [https://arxiv.org/pdf/1707.06347.pdf](https://arxiv.org/pdf/1707.06347.pdf) \ No newline at end of file +* [**DDPG 论文**](https://github.com/wangshuailong/reinforcement_learning_with_Tensorflow/tree/master/DDPG) +* [**TRPO 论文**](https://arxiv.org/pdf/1502.05477.pdf) +* [**PPO 论文**](https://arxiv.org/pdf/1707.06347.pdf) \ No newline at end of file diff --git a/new/handson-rl-py/12.md b/new/handson-rl-py/12.md index 81ed231cf47ebcb2f9baf7f10e6158f93f69a342..2a5072df242e3a9dc24b70e7c90716f819fc5fd1 100644 --- a/new/handson-rl-py/12.md +++ b/new/handson-rl-py/12.md @@ -12,7 +12,7 @@ # 环境包装器功能 -本章使用的代码归功于 Giacomo Spigler 的 GitHub 存储库( [https://github.com/spiglerg/DQN_DDQN_Dueling_and_DDPG_Tensorflow](https://github.com/spiglerg/DQN_DDQN_Dueling_and_DDPG_Tensorflow) )。 在本章中,每一行都对代码进行了说明。 有关完整的结构化代码,请查看上面的 GitHub 存储库。 +本章使用的代码归功于 Giacomo Spigler 的 [GitHub 存储库](https://github.com/spiglerg/DQN_DDQN_Dueling_and_DDPG_Tensorflow)。 在本章中,每一行都对代码进行了说明。 有关完整的结构化代码,请查看上面的 GitHub 存储库。 首先,我们导入所有必需的库: @@ -754,5 +754,5 @@ env.monitor.close() 以下链接将帮助您扩展知识: -* **使用 DQN 的飞扬的小鸟**: [https://github.com/yenchenlin/DeepLearningFlappyBird](https://github.com/yenchenlin/DeepLearningFlappyBird) -* **使用 DQN 的超级马里奥**: [https://github.com/JSDanielPark/tensorflow_dqn_supermario](https://github.com/JSDanielPark/tensorflow_dqn_supermario) \ No newline at end of file +* [**使用 DQN 的飞扬的小鸟**](https://github.com/yenchenlin/DeepLearningFlappyBird) +* [**使用 DQN 的超级马里奥**](https://github.com/JSDanielPark/tensorflow_dqn_supermario) \ No newline at end of file