提交 bc23e566 编写于 作者: W wizardforcel

2021-01-09 23:00:08

上级 7c6ffd13
# 前言
# 零、前言
近年来,深度学习在视觉,语音,自然语言处理和理解以及所有其他领域的大量数据难题中取得了前所未有的成功案例。 公司,大学,政府和研究组织对该领域的兴趣加速了该领域的发展。 本书通过三个新的章节介绍了深度学习中的重要主题:“对象检测”,“语义分割”和“使用互信息的无监督学习”。 通过提供原理的背景知识,挖掘概念背后的直觉,使用 Keras 实现方程式和算法以及检查结果来解释高级理论。
......@@ -40,11 +40,11 @@
“第 12 章”,“语义分割”讨论了计算机视觉,语义分割或识别图像中每个像素的对象类别的另一种常见应用。 讨论了分割原理。 然后,将更详细地介绍语义分割。 使用`tf.keras`构建并评估了称为 FCN 的语义分割算法的示例实现。 使用上一章中收集的相同数据集,但重新标记了语义分割。
“第 13 章”,“使用互信息的无监督学习”研究了如果 DL 严重依赖人类标签,它将不会继续发展。 无监督学习侧重于不需要人工标签的算法。 一种实现无监督学习的有效技术是利用**互信息****MI**)的概念。 通过最大化 MI,可以使用`tf.keras`和评估无监督的聚类/分类。
“第 13 章”,“使用互信息的无监督学习”研究了如果 DL 严重依赖人类标签,它将不会继续发展。 无监督学习侧重于不需要人工标签的算法。 一种实现无监督学习的有效技术是利用**互信息****MI**)的概念。 通过最大化 MI,可以使用`tf.keras`和评估无监督的聚类/分类。
# 充分利用这本书
* **深度学习和 Python**:读者应该具有深度学习及其在 Python 中的实现的基础知识。 尽管以前使用 Keras 实深度学习算法的经验很重要,但这不是必需的。“第 1 章”, “Keras 高级深度学习入门”概述了深度学习的概念及其在`tf.keras`中的实现。
* **深度学习和 Python**:读者应该具有深度学习及其在 Python 中的实现的基础知识。 尽管以前使用 Keras 实深度学习算法的经验很重要,但这不是必需的。“第 1 章”, “Keras 高级深度学习入门”概述了深度学习的概念及其在`tf.keras`中的实现。
* **数学**:本书中的讨论假定读者熟悉大学级别的微积分,线性代数,统计和概率。
* **GPU**:本书中的大多数`tf.keras`实现都需要 GPU。 如果没有 GPU,则由于涉及的时间(数小时至数天),因此无法执行许多代码示例。 本书中的示例尽可能多地使用合理数量的数据,以最大程度地减少高性能计算机的使用。 读者应该至少可以使用 NVIDIA GTX 1060。
* **编辑器**:本书的示例代码是在 Ubuntu Linux 18.04 LTS 和 MacOS Catalina 中使用 vim 编辑的。 任何支持 Python 的文本编辑器都是可以接受的。
......
# 1
# 使用 Keras 引入高级深度学习
# 一、使用 Keras 入门高级深度学习
在第一章中,我们将介绍在本书中将使用的三个深度学习人工神经网络。 这些网络是 MLP,CNN 和 RNN(在第 2 节中定义和描述),它们是本书涵盖的所选高级深度学习主题的构建基块,例如自回归网络(自编码器,GAN 和 VAE),深度强化学习 ,对象检测和分割以及使用互信息的无监督学习。
......@@ -23,13 +21,13 @@ Keras [1]是一个受欢迎的深度学习库,在撰写本文时有 370,000
`tf.keras`作为深度学习库是一种流行的选择,因为它已高度集成到 TensorFlow 中,TensorFlow 因其可靠性而在生产部署中广为人知。 TensorFlow 还提供了各种工具,用于生产部署和维护,调试和可视化以及在嵌入式设备和浏览器上运行模型。 在技​​术行业中,Google,Netflix,Uber 和 NVIDIA 使用 Keras。
我们选择`tf.keras`作为本书的首选工具,因为它是致力于加速深度学习模型实的库。 这使得 Keras 非常适合我们想要实用且动手的时候,例如,当我们探索本书中的高级深度学习概念时。 由于 Keras 旨在加速深度学习模型的开发,训练和验证,因此在有人可以最大限度地利用图书馆之前,必须学习该领域的关键概念。
我们选择`tf.keras`作为本书的首选工具,因为它是致力于加速深度学习模型实的库。 这使得 Keras 非常适合我们想要实用且动手的时候,例如,当我们探索本书中的高级深度学习概念时。 由于 Keras 旨在加速深度学习模型的开发,训练和验证,因此在有人可以最大限度地利用图书馆之前,必须学习该领域的关键概念。
[本书的所有示例都可以在 GitHub 的以下链接上找到](https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras)
`tf.keras`库中,各层之间就像乐高积木一样相互连接,从而形成了一个干净且易于理解的模型。 模型训练非常简单,只需要数据,大量训练和监控指标即可。
最终结果是,与其他深度学习库(例如 PyTorch)相比,大多数深度学习模型可以用更少的代码行来实现。 通过使用 Keras,我们将通过节省代码实时间来提高生产率,而这些时间可以用于执行更关键的任务,例如制定更好的深度学习算法。
最终结果是,与其他深度学习库(例如 PyTorch)相比,大多数深度学习模型可以用更少的代码行来实现。 通过使用 Keras,我们将通过节省代码实时间来提高生产率,而这些时间可以用于执行更关键的任务,例如制定更好的深度学习算法。
同样,Keras 是快速实现深度学习模型的理想选择,就像我们将在本书中使用的那样。 使用**顺序模型 API**,只需几行代码即可构建典型模型。 但是,不要被它的简单性所误导。
......@@ -117,7 +115,7 @@ MLP,CNN 和 RNN 并不完整整个深度网络。 需要识别**目标**或**
现在,让我们进入这三个网络–我们将从谈论 MLP 网络开始。
# 3.多层感知器(MLP)
# 3\. 多层感知器(MLP)
我们将要看的这三个网络中的第一个是 MLP 网络。 让我们假设目标是创建一个神经网络,用于基于手写数字识别数字。 例如,当网络的输入是手写数字 8 的图像时,相应的预测也必须是数字 8。这是分类器网络的经典工作,可以使用逻辑回归进行训练。 为了训练和验证分类器网络,必须有足够大的手写数字数据集。 *国家标准技术混合研究院*数据集,简称 MNIST [2],通常被视为 **Hello World 深度学习数据集**。 它是用于手写数字分类的合适数据集。
......@@ -407,7 +405,7 @@ model.add(Dense(hidden_units,
我们的模型几乎已经完成。 下一节将重点介绍输出层和损失函数。
## 输出激活和丢失功能
## 输出激活和损失函数
输出的层具有 10 个单元,其后是`softmax`激活层。 这 10 个单位对应于 10 个可能的标签,类或类别。 可以用数学方式表示`softmax`激活,如以下等式所示:
......@@ -506,7 +504,7 @@ model.fit(x_train, y_train, epochs=20, batch_size=batch_size)
训练模型后,我们现在可以评估其性能。
## 绩效评估
## 表现评估
至此,MNIST 数字分类器的模型现已完成。 性能评估将是的下一个关键步骤,以确定提议的训练模型是否已提出令人满意的解决方案。 将模型训练 20 个时间段就足以获得可比较的性能指标。
......@@ -543,7 +541,7 @@ model.fit(x_train, y_train, epochs=20, batch_size=batch_size)
示例指示需要改进网络架构。 在下一节讨论了 MLP 分类器模型摘要之后,我们将介绍另一个 MNIST 分类器。 下一个模型基于 CNN,并证明了测试准确率的显着提高。
## 型号汇总
## 模型摘要
使用 Keras 库为我们提供了一种快速的机制,可以通过调用以下方法来仔细检查模型描述:
......@@ -586,17 +584,17 @@ plot_model(model, to_file='mlp-mnist.png', show_shapes=True)
在总结了我们模型的之后,到此结束了我们对 MLP 的讨论。 在下一部分中,我们将基于 CNN 构建 MNIST 数字分类器模型。
# 4.卷积神经网络(CNN)
# 4\. 卷积神经网络(CNN)
现在,我们将进入第二个人工神经网络 CNN。 在本节中,我们将解决相同的 MNIST 数字分类问题,但这一次使用 CNN。
“图 1.4.1”显示了我们将用于 MNIST 数字分类的 CNN 模型,而其实现在“列表 1.4.1”中进行了说明。 实 CNN 模型将需要对先前模型进行一些更改。 现在,输入张量不再具有输入矢量,而具有新尺寸(`height``width``channels`)或(`image_size``image_size``1`)=(`28``28``1`)用于 MNIST 灰度图像。 需要调整训练和测试图像的大小以符合此输入形状要求。
“图 1.4.1”显示了我们将用于 MNIST 数字分类的 CNN 模型,而其实现在“列表 1.4.1”中进行了说明。 实 CNN 模型将需要对先前模型进行一些更改。 现在,输入张量不再具有输入矢量,而具有新尺寸(`height``width``channels`)或(`image_size``image_size``1`)=(`28``28``1`)用于 MNIST 灰度图像。 需要调整训练和测试图像的大小以符合此输入形状要求。
![](img/B14853_01_11.png)
图 1.4.1:用于 MNIST 数字分类的 CNN 模型
上图:
上图:
“列表 1.4.1”:`cnn-mnist-1.4.1.py`
......@@ -710,7 +708,7 @@ print("\nTest accuracy: %.1f%%" % (100.0 * acc))
为简单起见,显示了应用了`3×3`内核的`3×3`输入图像(或输入特征图)。 卷积后显示结果特征图。 要素地图中一个元素的值被加阴影。 您会注意到,结果特征图小于原始输入图像的,这是因为卷积仅在有效元素上执行。 内核不能超出映像的边界。 如果输入的尺寸应与输出要素图相同,则`Conv2D`接受选项`padding='same'`。 输入在其边界周围填充零,以在卷积后保持尺寸不变。
## 合并操作
## 池化操作
最后的更改是添加了`MaxPooling2D`层以及参数`pool_size=2``MaxPooling2D`压缩每个特征图。 每个大小为`pool_size × pool_size`的补丁都减少为 1 个特征图点。 该值等于补丁中的最大特征点值。 下图显示了`MaxPooling2D`的两个补丁:
......@@ -728,7 +726,7 @@ print("\nTest accuracy: %.1f%%" % (100.0 * acc))
在下一部分中,我们将评估经过训练的 MNIST CNN 分类器模型的性能。
## 绩效评估和模型总结
## 表现评估和模型摘要
如“列表 1.4.2”中所示,“列表 1.4.1”中的 CNN 模型在 80,226 处需要较少数量的参数,而使用 MLP 层时需要 269,322 个参数。 `conv2d_1`层具有 640 个参数,因为每个内核具有`3×3 = 9`个参数,并且 64 个特征图中的每一个都有一个内核,一个偏置参数。 其他卷积层的参数数量可以类似的方式计算。
......@@ -771,7 +769,7 @@ Non-trainable params: 0
看了 CNN 并评估了训练好的模型之后,让我们看一下我们将在本章中讨论的最终核心网络:RNN。
# 5.循环神经网络(RNN)
# 5\. 循环神经网络(RNN)
现在,我们来看一下三个人工神经网络中的最后一个,即 RNN。
......@@ -920,7 +918,7 @@ Non-trainable params: 0
对于所有类型的 RNN,增加单位数量也将增加容量。 但是,增加容量的另一种方法是堆叠 RNN 层。 尽管应注意,但作为一般经验法则,只有在需要时才应增加模型的容量。 容量过大可能会导致过拟合,结果可能导致训练时间延长和预测期间的性能降低。
# 六,结论
# 6\. 总结
本章概述了三种深度学习模型(MLP,RNN,CNN),并介绍了 TensorFlow 2 `tf.keras`,这是一个用于快速开发,训练和测试适合于生产环境的深度学习模型的库。 还讨论了 Keras 的顺序 API。 在下一章中,将介绍函数式 API,这将使我们能够构建更复杂的模型,专门用于高级深度神经网络。
......@@ -930,7 +928,7 @@ Non-trainable params: 0
了解了深度学习概念以及如何将 Keras 用作工具之后,我们现在可以分析高级深度学习模型。 在下一章讨论了函数式 API 之后,我们将继续执行流行的深度学习模型。 随后的章节将讨论选定的高级主题,例如自回归模型(自编码器,GAN,VAE),深度强化学习,对象检测和分段以及使用互信息的无监督学习。 随附的 Keras 代码实现将在理解这些主题方面发挥重要作用。
# 7.参考
# 7\. 参考
1. `Chollet, François. Keras (2015). https://github.com/keras-team/keras.`
2. `LeCun, Yann, Corinna Cortes, and C. J. Burges. MNIST handwritten digit database. AT&T Labs [Online]. Available: http://yann.lecun.com/exdb/mnist2 (2010).`
\ No newline at end of file
# 2
# 深度神经网络
# 二、深度神经网络
在本章中,我们将研究深度神经网络。 这些网络在更具挑战性的数据集,如 ImageNet,[CIFAR10](https://www.cs.toronto.edu/~kriz/learning-features-2009-TR.pdf) 和 CIFAR100。 为简洁起见,我们仅关注两个网络: **ResNet** [2] [4]和 **DenseNet** [5]。 尽管我们会更加详细,但重要的是花一点时间介绍这些网络。
......@@ -21,7 +19,7 @@ DenseNet 允许每个卷积直接访问输入和较低层的功能图,从而
让我们开始讨论功能 API。
# 1.函数式 API
# 1\. 函数式 API
在我们首先在“第 1 章”,“Keras 高级深度学习入门”的顺序模型 API 中,一层堆叠在另一层之上。 通常,将通过其输入和输出层访问模型。 我们还了解到,如果我们发现自己想要在网络中间添加辅助输入,或者甚至想在最后一层之前提取辅助输出,则没有简单的机制。
......@@ -300,7 +298,7 @@ print("\nTest accuracy: %.1f%%" % (100.0 * score[1]))
有关功能 API 的其他信息,请阅读[这里](https://keras.io/)
# 2.深度残差网络(ResNet)
# 2\. 深度残差网络(ResNet)
深度网络的一个主要优点是,它们具有从输入图和特征图学习不同级别表示的能力。 在分类,分割,检测和许多其他计算机视觉问题中,学习不同的特征图通常可以提高性能。
......@@ -732,7 +730,7 @@ ResNet v2 的准确率显示在下面的“表 2.3.1”中:
我们已经完成了对最常用的深度神经网络之一 ResNet v1 和 v2 的讨论。 在以下部分中,将介绍另一种流行的深度神经网络架构 DenseNet。
# 4.紧密连接的卷积网络(DenseNet)
# 4\. 紧密连接的卷积网络(DenseNet)
![](img/B14853_02_11.png)
......@@ -882,13 +880,13 @@ model.summary()
DenseNet 完成了我们对深度神经网络的讨论。 与 ResNet 一起,这两个网络已成为许多下游任务中不可或缺的要素提取器网络。
# 5.结论
# 5\. 总结
在本章中,我们介绍了函数式 API 作为使用`tf.keras`构建复杂的深度神经网络模型的高级方法。 我们还演示了如何使用函数式 API 来构建多输入单输出 Y 网络。 与单分支 CNN 网络相比,该网络具有更高的准确率。 在本书的其余部分中,我们将发现在构建更复杂和更高级的模型时必不可少的函数式 API。 例如,在下一章中,函数式 API 将使我们能够构建模块化编码器,解码器和自编码器。
我们还花费了大量时间探索两个重要的深度网络 ResNet 和 DenseNet。 这两个网络不仅用于分类,而且还用于其他领域,例如分段,检测,跟踪,生成和视觉语义理解。 在“第 11 章”,“对象检测”和“第 12 章”,“语义分割”中,我们将使用 ResNet 进行对象检测和分割。 我们需要记住,与仅仅遵循原始实现相比,更仔细地了解 ResNet 和 DenseNet 中的模型设计决策至关重要。 这样,我们就可以将 ResNet 和 DenseNet 的关键概念用于我们的目的。
# 6.参考
# 6\. 参考
1. `Kaiming He et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. Proceedings of the IEEE international conference on computer vision, 2015 (https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/He_Delving_Deep_into_ICCV_2015_paper.pdfspm=5176.100239.blogcont55892.28.pm8zm1&file=He_Delving_Deep_into_ICCV_2015_paper.pdf).`
1. `Kaiming He et al. Deep Residual Learning for Image Recognition. Proceedings of the IEEE conference on computer vision and pattern recognition, 2016a (http://openaccess.thecvf.com/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf).`
......
# 3
# 汽车编码器
# 三、自编码器
在上一章“第 2 章”,“深度神经网络”中,我们介绍了深度神经网络的概念。 现在,我们将继续研究自编码器,它是一种神经网络架构,试图找到给定输入数据的压缩表示形式。
......@@ -16,7 +14,7 @@
让我们从了解自编码器是什么以及自编码器的原理开始。
# 1.自编码器的原理
# 1\. 自编码器的原理
自编码器以最简单的形式通过尝试将输入复制到输出中来学习表示形式或代码。 但是,使用自编码器并不像将输入复制到输出那样简单。 否则,神经网络将无法发现输入分布中的隐藏结构。
......@@ -77,7 +75,7 @@
了解自编码器背后的原理将有助于我们执行代码。 在下一节中,我们将研究如何使用`tf.keras`功能 API 来构建编码器,解码器和自编码器。
# 2.使用 Keras 构建自编码器
# 2\. 使用 Keras 构建自编码器
现在,我们要使用进行一些令人兴奋的事情,使用`tf.keras`库构建一个自编码器。 为了简单起见,我们将使用 MNIST 数据集作为第一组示例。 然后,自编码器将根据输入数据生成潜矢量,并使用解码器恢复输入。 在该第一示例中,潜矢量是 16 维。
......@@ -388,7 +386,7 @@ def plot_results(models,
这样就完成了和自编码器的检查。 接下来的章节将重点介绍其实际应用。 我们将从去噪自编码器开始。
# 3.去噪自编码器(DAE)
# 3\. 去噪自编码器(DAE)
现在,我们将构建具有实际应用的自编码器。 首先,让我们画一幅画,然后想象 MNIST 的数字图像被噪声破坏了,从而使人类更难以阅读。 我们能够构建一个去噪自编码器(DAE),以消除这些图像中的噪声。“图 3.3.1”向我们展示了三组 MNIST 数字。 每组的顶部行(例如,MNIST 数字 7、2、1、9、0、6、3、4 和 9)是原始图像。 中间的行显示了 DAE 的输入,这些输入是被噪声破坏的原始图像。 作为人类,我们发现很难读取损坏的 MNIST 数字。 最后一行显示 DAE 的输出。
......@@ -602,7 +600,7 @@ plt.show()
我们已经完成去噪自编码器的讨论和实现。 尽管此概念已在 MNIST 数字上进行了演示,但该思想也适用于其他信号。 在下一节中,我们将介绍自编码器的另一种实际应用,称为着色自编码器。
# 4.自动着色自编码器
# 4\. 自动着色自编码器
现在,我们将致力于自编码器的另一个实际应用。 在这种情况下,我们将想象一下,我们有一张灰度照片,并且想要构建一个可以自动为其添加颜色的工具。 我们要复制人类的能力,以识别海洋和天空为蓝色,草地和树木为绿色,云层为白色,依此类推。
......@@ -878,7 +876,7 @@ plt.show()
这是关于自编码器的最后一部分。 在以下各章中,我们将重新讨论以一种或另一种形式进行编码和解码的概念。 表示学习的概念在深度学习中非常基础。
# 5.结论
# 5\. 总结
在本章中,我们已经介绍了自编码器,它们是将输入数据压缩为低维表示形式的神经网络,以便有效地执行结构转换,例如降噪和着色。 我们为 GAN 和 VAE 的更高级主题奠定了基础,我们将在后面的章节中介绍它们。 我们已经演示了如何从两个构建模块模型(编码器和解码器)实现自编码器。 我们还学习了如何提取输入分布的隐藏结构是 AI 的常见任务之一。
......@@ -888,6 +886,6 @@ plt.show()
在下一章中,我们将着手介绍 AI 最近最重要的突破之一,即 GAN。 在下一章中,我们将学习 GAN 的核心优势,即其综合看起来真实的数据的能力。
# 6.参考
# 6\. 参考
1. `Ian Goodfellow et al.: Deep Learning. Vol. 1. Cambridge: MIT press, 2016 (http://www.deeplearningbook.org/).`
\ No newline at end of file
# 4
# 生成对抗网络(GAN)
# 四、生成对抗网络(GAN)
在本章中,我们将研究**生成对抗网络****GAN**)[1]。 GAN 属于生成模型家族。 但是,与自编码器不同,生成模型能够在给定任意编码的情况下创建新的有意义的输出。
......@@ -77,7 +75,7 @@ GAN 的基本概念很简单。 但是,我们将发现的一件事是,最具
为了使的损失函数最小,将通过反向传播通过正确识别真实数据`D(x)`和合成数据`1 - D(g(z))`来更新判别器参数`θ^(D)`。 正确识别真实数据等同于`D(x) -> 1.0`,而正确分类伪造数据则与`D(g(z)) -> 0.0``1 - D(g(z)) -> 1.0`相同。 在此等式中,`z`是生成器用来合成新信号的任意编码或噪声矢量。 两者都有助于最小化损失函数。
为了训练发电机,GAN 将判别器和发电机损耗的总和视为零和博弈。 发电机损耗函数只是判别器损耗函数的负数:
为了训练生成器,GAN 将判别器和生成器损耗的总和视为零和博弈。 生成器损耗函数只是判别器损耗函数的负数:
![](img/B14853_04_012.png) (Equation 4.1.2)
......@@ -85,7 +83,7 @@ GAN 的基本概念很简单。 但是,我们将发现的一件事是,最具
![](img/B14853_04_013.png) (Equation 4.1.3)
从生成器的角度来看,应将“公式 4.1.3”最小化。 从判别器的角度来看,值函数应最大化。 因此,发电机训练准则可以写成极大极小问题:
从生成器的角度来看,应将“公式 4.1.3”最小化。 从判别器的角度来看,值函数应最大化。 因此,生成器训练准则可以写成极大极小问题:
![](img/B14853_04_014.png) (Equation 4.1.4)
......@@ -95,7 +93,7 @@ GAN 的基本概念很简单。 但是,我们将发现的一件事是,最具
图 4.1.4:训练发生器就像使用二进制交叉熵损失函数训练网络一样。 来自生成器的虚假数据显示为真实数据
解决方案是按以下形式重新构造发电机的损耗函数:
解决方案是按以下形式重新构造生成器的损耗函数:
![](img/B14853_04_017.png) (Equation 4.1.5)
......@@ -105,7 +103,7 @@ GAN 的基本概念很简单。 但是,我们将发现的一件事是,最具
在本节中,我们了解到 GAN 的原理很简单。 我们还了解了如何通过熟悉的网络层实现 GAN。 GAN 与其他网络的区别在于众所周知,它们很难训练。 只需稍作更改,就可以使网络变得不稳定。 在以下部分中,我们将研究使用深度 CNN 的 GAN 早期成功实现之一。 它称为 DCGAN [3]。
# 2.在 Keras 中实施 DCGAN
# 2\. 在 Keras 中实现 DCGAN
“图 4.2.1”显示 DCGAN,其中用于生成伪造的 MNIST 图像:
......@@ -113,11 +111,11 @@ GAN 的基本概念很简单。 但是,我们将发现的一件事是,最具
图 4.2.1:DCGAN 模型
DCGAN 实以下设计原则:
DCGAN 实以下设计原则:
* 使用`stride > 1`和卷积代替`MaxPooling2D``UpSampling2D`。 通过`stride > 1`,CNN 可以学习如何调整特征图的大小。
* 避免使用`Dense`层。 在所有层中使用 CNN。 `Dense`层仅用作生成器的第一层以接受`z`矢量。 调整`Dense`层的输出大小,并成为后续 C​​NN 层的输入。
* 使用**批量归一化****BN**),通过将每一层的输入归一化以使均值和单位方差为零,来稳定学习。 发电机输出层和判别器输入层中没有 BN。 在此处要介绍的实现示例中,没有在标识符中使用批量归一化。
* 使用**批量归一化****BN**),通过将每一层的输入归一化以使均值和单位方差为零,来稳定学习。 生成器输出层和判别器输入层中没有 BN。 在此处要介绍的实现示例中,没有在标识符中使用批量归一化。
* **整流线性单元****ReLU**)在发生器的所有层中均使用,但在输出层中则使用`tanh`激活。 在此处要介绍的实现示例中,在生成器的输出中使用`sigmoid`代替`tanh`,因为通常会导致对 MNIST 数字进行更稳定的训练。
* 在判别器的所有层中使用 **Leaky ReLU**。 与 ReLU 不同,Leaky ReLU 不会在输入小于零时将所有输出清零,而是生成一个等于`alpha x input`的小梯度。 在以下示例中,`alpha = 0.2`
......@@ -326,7 +324,7 @@ def build_and_train_models():
从“列表 4.2.1”和“列表 4.2.2”中可以看出,DCGAN 模型很简单。 使它们难以构建的原因是,网络中的较小更改设计很容易破坏训练收敛。 例如,如果在判别器中使用批量归一化,或者如果生成器中的`strides = 2`传输到后面的 C​​NN 层,则 DCGAN 将无法收敛。
“列表 4.2.4”显示了专用于训练判别器和对抗网络的功能。 由于自定义训练,将不使用常规的`fit()`功能。 取而代之的是,调用`train_on_batch()`对给定的数据批次运行单个梯度更新。 然后通过对抗网络训练发电机。 训练首先从数据集中随机选择一批真实图像。 这被标记为实数(1.0)。 然后,生成器将生成一批伪图像。 这被标记为假(0.0)。 这两个批次是串联在一起的,用于训练判别器。
“列表 4.2.4”显示了专用于训练判别器和对抗网络的功能。 由于自定义训练,将不使用常规的`fit()`功能。 取而代之的是,调用`train_on_batch()`对给定的数据批次运行单个梯度更新。 然后通过对抗网络训练生成器。 训练首先从数据集中随机选择一批真实图像。 这被标记为实数(1.0)。 然后,生成器将生成一批伪图像。 这被标记为假(0.0)。 这两个批次是串联在一起的,用于训练判别器。
完成此操作后,生成器将生成一批新的伪图像,并将其标记为真实(1.0)。 这批将用于训练对抗网络。 交替训练这两个网络约 40,000 步。 定期将基于特定噪声向量生成的 MNIST 数字保存在文件系统中。 在最后的训练步骤中,网络已收敛。 生成器模型也保存在文件中,因此我们可以轻松地将训练后的模型重新用于未来的 MNIST 数字生成。 但是,仅保存生成器模型,因为这是该 DCGAN 在生成新 MNIST 数字时的有用部分。 例如,我们可以通过执行以下操作来生成新的和随机的 MNIST 数字:
......@@ -484,7 +482,7 @@ CGAN 的基础仍然与原始 GAN 原理相同,区别在于判别器和生成
图 4.3.2:训练 CGAN 判别器类似于训练 GAN 判别器。 唯一的区别是,所生成的伪造品和数据集的真实图像均以其相应的“一键通”标签作为条件。
生成器的新损失功能可最大程度地减少对以指定的一幅热标签为条件的伪造图像进行鉴别的正确预测。 生成器学习如何在给定一个热向量的情况下生成特定的 MNIST 数字,该数字可能使判别器蒙蔽。“图 4.3.3”显示了如何训练发电机
生成器的新损失功能可最大程度地减少对以指定的一幅热标签为条件的伪造图像进行鉴别的正确预测。 生成器学习如何在给定一个热向量的情况下生成特定的 MNIST 数字,该数字可能使判别器蒙蔽。“图 4.3.3”显示了如何训练生成器
![](img/B14853_04_09.png)
......@@ -776,7 +774,7 @@ python3 cgan-mnist-4.3.1.py --generator=cgan_mnist.h5 --digit=8
在下一章中,将介绍 DCGAN 和 CGAN 的改进。 特别是,重点将放在如何稳定 DCGAN 的训练以及如何提高 CGAN 的感知质量上。 这将通过引入新的损失函数和稍有不同的模型架构来完成。
# 5.参考
# 5\. 参考
1. `Ian Goodfellow. NIPS 2016 Tutorial: Generative Adversarial Networks. arXiv preprint arXiv:1701.00160, 2016 (https://arxiv.org/pdf/1701.00160.pdf).`
1. `Alec Radford, Luke Metz, and Soumith Chintala. Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks. arXiv preprint arXiv:1511.06434, 2015 (https://arxiv.org/pdf/1511.06434.pdf).`
......
# 5
# 改进的 GAN
# 五、改进的 GAN
自 2014 年引入**生成对抗网络****GAN**)以来,其流行度迅速提高。 GAN 已被证明是有用的生成模型,可以合成看起来真实的新数据。 深度学习中的许多研究论文都遵循提出的措施来解决原始 GAN 的困难和局限性。
......@@ -8,7 +6,7 @@
但是,稳定性问题并不是 GAN 的唯一问题。 也越来越需要来提高所生成图像的感知质量。 **最小二乘 GAN****LSGAN**)[3]建议同时解决这两个问题。 基本前提是,在训练过程中,Sigmoid 交叉熵损失会导致梯度消失。 这导致较差的图像质量。 最小二乘损失不会导致梯度消失。 与原始 GAN 生成的图像相比,生成的生成图像具有更高的感知质量。
在上一章中,CGAN 介绍了一种调节发电机输出的方法。 例如,如果要获取数字 8,则可以在生成器的输入中包含条件标签。 受 CGAN 的启发,**辅助分类器 GAN****ACGAN**)[4]提出了一种改进的条件算法,可产生更好的感知质量和输出多样性。
在上一章中,CGAN 介绍了一种调节生成器输出的方法。 例如,如果要获取数字 8,则可以在生成器的输入中包含条件标签。 受 CGAN 的启发,**辅助分类器 GAN****ACGAN**)[4]提出了一种改进的条件算法,可产生更好的感知质量和输出多样性。
总之,本章的目的是介绍:
......@@ -27,11 +25,11 @@ WGAN 认为 GAN 固有的不稳定性是由于它的损失函数引起的,该
在以下部分中,我们将研究三个距离函数,并分析什么可以替代更适合 GAN 优化的 JS 距离函数。
## 距离功能
## 距离函数
可以通过检查其损失函数来了解训练 GAN 的稳定性。 为了更好地理解 GAN 损失函数,我们将回顾两个概率分布之间的公共距离或散度函数。
我们关注的是用于真实数据分配的`p_data`与用于发电机数据分配的`p_g`之间的距离。 GAN 的目标是制造`p_g -> p_data`。“表 5.1.1”显示了散度函数。
我们关注的是用于真实数据分配的`p_data`与用于生成器数据分配的`p_g`之间的距离。 GAN 的目标是制造`p_g -> p_data`。“表 5.1.1”显示了散度函数。
在大多数个最大似然任务中,我们将使用 **Kullback-Leibler****KL**)散度,或`D[KL]`损失函数可以衡量我们的神经网络模型预测与真实分布函数之间的距离。 如“公式 5.1.1”所示,由于`D[KL](p_data || p_g) ≠ D[KL](p_g || p_data)`,所以`D[KL]`不对称。
......@@ -156,7 +154,7 @@ EMD 背后的想法是,它是`d = ||x - y||`传输多少质量`γ(x, y)`,为
![](img/B14853_05_065.png) (Equation 5.1.22)
发电机损失函数中,第一项消失了,因为它没有针对实际数据进行直接优化。
生成器损失函数中,第一项消失了,因为它没有针对实际数据进行直接优化。
“表 5.1.2”显示了 GAN 和 WGAN 的损失函数之间的差异。 为简洁起见,我们简化了`L^(D)``L^(G)`的表示法:
......@@ -176,7 +174,7 @@ EMD 背后的想法是,它是`d = ||x - y||`传输多少质量`γ(x, y)`,为
要求:`α`,学习率。`c`是削波参数。`m`,批量大小。 `n_critic`,即每个生成器迭代的评论(鉴别)迭代次数。
要求:`w[D]`,初始注释器(discriminator)参数。 `θ[D]`,初始发电机参数:
要求:`w[D]`,初始注释器(discriminator)参数。 `θ[D]`,初始生成器参数:
1.`θ[D]`尚未收敛,执行:
2. 对于`t = 1, ..., n_critic`,执行:
......@@ -213,7 +211,7 @@ EMD 背后的想法是,它是`d = ||x - y||`传输多少质量`γ(x, y)`,为
最后,EM 距离优化中的 Lipschitz 约束是通过裁剪判别器参数(第 7 行)来施加的。 第 7 行是“公式 5.1.20”的实现。 在`n_critic`迭代判别器训练之后,判别器参数被冻结。 生成器训练通过对一批伪造数据进行采样开始(第 9 行)。 采样的数据被标记为实数(1.0),以致愚弄判别器网络。 在第 10 行中计算生成器梯度,并在第 11 行中使用 RMSProp 对其进行优化。第 10 行和第 11 行执行梯度更新以优化“公式 5.1.22”。
训练生成器后,将解冻判别器参数,并开始另一个`n_critic`判别器训练迭代。 我们应该注意,在判别器训练期间不需要冻结生成器参数,因为生成器仅涉及数据的制造。 类似于 GAN,可以将判别器训练为一个单独的网络。 但是,训练发电机始终需要鉴别者通过对抗网络参与,因为损失是根据发电机网络的输出计算得出的。
训练生成器后,将解冻判别器参数,并开始另一个`n_critic`判别器训练迭代。 我们应该注意,在判别器训练期间不需要冻结生成器参数,因为生成器仅涉及数据的制造。 类似于 GAN,可以将判别器训练为一个单独的网络。 但是,训练生成器始终需要鉴别者通过对抗网络参与,因为损失是根据生成器网络的输出计算得出的。
与 GAN 不同,在 WGAN 中,将实际数据标记为 1.0,而将伪数据标记为 -1.0,作为计算第 5 行中的梯度的一种解决方法。第 5-6 和 10-11 行执行梯度更新以优化“公式 5.1.21”和“5.1.22”。 第 5 行和第 10 行中的每一项均建模为:
......@@ -240,7 +238,7 @@ def wasserstein_loss(y_label, y_pred):
* `discriminator()`:判别器模型构建器
* `train()`:DCGAN 训练师
* `plot_images()`:通用发生器输出绘图仪
* `test_generator()`:通用的发电机测试实用程序
* `test_generator()`:通用的生成器测试实用程序
如“列表 5.1.1”所示,我们可以通过简单地调用以下命令来构建一个判别器:
......@@ -503,7 +501,7 @@ python3 wgan-mnist-5.1.2.py --generator=wgan_mnist.h5
WGAN 提出通过使用 EMD 或 Wasserstein 1 损失函数来解决该问题,该函数即使在两个分布之间很少或没有重叠时也具有平滑的微分函数。 但是,WGAN 与生成的图像质量无关。 除了稳定性问题之外,原始 GAN 生成的图像在感知质量方面还有很多改进的地方。 LSGAN 理论上可以同时解决两个问题。 在下一节中,我们将介绍 LSGAN。
# 2.最小二乘 GAN(LSGAN)
# 2\. 最小二乘 GAN(LSGAN)
LSGAN 提出最小二乘损失。“图 5.2.1”演示了为什么在 GAN 中使用 Sigmoid 交叉熵损失会导致生成的数据质量较差:
......@@ -626,7 +624,7 @@ python3 lsgan-mnist-5.2.1.py --generator=lsgan_mnist.h5
在本节中,我们讨论了损失函数的另一种改进。 通过使用 MSE 或 L2,我们解决了训练 GAN 的稳定性和感知质量的双重问题。 在下一节中,提出了相对于 CGAN 的另一项改进,这已在上一章中进行了讨论。
# 3\. Auxiliary Classifier GAN (ACGAN)
# 3\. 辅助分类器 GAN (ACGAN)
ACGAN 在原理上类似于我们在上一章中讨论的**条件 GAN****CGAN**)。 我们将比较 CGAN 和 ACGAN。 对于 CGAN 和 ACGAN,发生器输入均为噪声及其标签。 输出是属于输入类标签的伪图像。 对于 CGAN,判别器的输入是图像(假的或真实的)及其标签。 输出是图像真实的概率。 对于 ACGAN,判别器的输入是一幅图像,而输出是该图像是真实的且其类别是标签的概率。
......@@ -1124,13 +1122,13 @@ python3 acgan-mnist-5.3.1.py --generator=acgan_mnist.h5 --digit=3
与 WGAN 和 LSGAN 相似,ACGAN 通过微调的损失函数,对现有 GAN CGAN 进行了改进。 在接下来的章节中,我们将发现新的损失函数,这些函数将使 GAN 能够执行新的有用任务。
# 4。结论
# 4\. 总结
在本章中,我们介绍了对原始 GAN 算法的各种改进,这些改进在上一章中首次介绍。 WGAN 提出了一种通过使用 EMD 或 Wasserstein 1 损失来提高训练稳定性的算法。 LSGAN 认为,与最小二乘损失不同,GANs 的原始交叉熵函数倾向于消失梯度。 LSGAN 提出了一种实现稳定训练和高质量输出的算法。 ACGAN 通过要求判别器在确定输入图像是假的还是真实的基础上执行分类任务,来令人信服地提高了 MNIST 数字有条件生成的质量。
在下一章中,我们将研究如何控制发电机输出的属性。 尽管 CGAN 和 ACGAN 可以指示要生成的期望数字,但我们尚未分析可以指定输出属性的 GAN。 例如,我们可能想要控制 MNIST 数字的书写风格,例如圆度,倾斜角度和厚度。 因此,目标是引入具有纠缠表示的 GAN,以控制生成器输出的特定属性。
在下一章中,我们将研究如何控制生成器输出的属性。 尽管 CGAN 和 ACGAN 可以指示要生成的期望数字,但我们尚未分析可以指定输出属性的 GAN。 例如,我们可能想要控制 MNIST 数字的书写风格,例如圆度,倾斜角度和厚度。 因此,目标是引入具有纠缠表示的 GAN,以控制生成器输出的特定属性。
# 5.参考
# 5\. 参考
1. `Ian Goodfellow et al.: Generative Adversarial Nets. Advances in neural information processing systems, 2014 (http://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf).`
1. `Martin Arjovsky, Soumith Chintala, and Léon Bottou: Wasserstein GAN. arXiv preprint, 2017 (https://arxiv.org/pdf/1701.07875.pdf).`
......
# 6
# 纠缠表示 GAN
# 六、纠缠表示 GAN
正如我们已经探索的那样,GAN 可以通过学习数据分布来产生有意义的输出。 但是,无法控制所生成输出的属性。 GAN 的一些变体,例如**条件 GAN****CGAN**)和**辅助分类器 GAN****ACGAN**),如前两章所讨论的,都可以训练生成器,该生成器可以合成特定的输出。 例如,CGAN 和 ACGAN 都可以诱导生成器生成特定的 MNIST 数字。 这可以通过同时使用 100 维噪声代码和相应的一号热标签作为输入来实现。 但是,除了单热标签外,我们没有其他方法可以控制生成的输出的属性。
......@@ -22,7 +20,7 @@ StackedGAN 使用预训练的编码器或分类器,以帮助解开潜在代码
让我们从讨论纠缠的表示开始。
# 1.解开表示
# 1\. 纠缠表示
最初的 GAN 能够产生有意义的输出,但是缺点是它的属性无法控制。 例如,如果我们训练 GAN 来学习名人面孔的分布,则生成器将产生名人形象的新图像。 但是,没有任何方法可以影响生成器有关所需脸部的特定属性。 例如,我们无法向生成器询问女性名人的脸,该女性名人是黑发,白皙的肤色,棕色的眼睛,微笑着。 这样做的根本原因是因为我们使用的 100 维噪声代码纠缠了发生器输出的所有显着属性。 我们可以回想一下,在`tf.keras`中,`100-dim`代码是由均匀噪声分布的随机采样生成的:
......@@ -119,7 +117,7 @@ InfoGAN 的损失函数与 GAN 的区别是附加术语`-λI(c; g(z, c))`,其
在讨论了 InfoGAN 背后的一些概念之后,让我们看一下`tf.keras`中的 InfoGAN 实现。
## 在 Keras 中实 InfoGAN
## 在 Keras 中实 InfoGAN
为了在 MNIST 数据集上实现 InfoGAN,需要对 ACGAN 的基本代码进行一些更改。 如“列表 6.1.1”中突出显示的那样,生成器将纠缠的(`z`噪声代码)和解纠结的代码(单标签和连续代码)串联起来作为输入:
......@@ -681,7 +679,7 @@ def train(models, data, params):
StackedGAN 背后的想法是,如果我们想构建一个可生成假名人面孔的 GAN,则只需将*编码器*反转即可。 StackedGAN 由一堆更简单的 GAN 组成,`GAN[i]`,其中`i = 0 … n-1``n`个特征相对应。 每个`GAN[i]`学会反转其相应编码器`Encoder[i]`的过程。 例如,`GAN[0]`从假发型特征生成假名人脸,这是`Encoder[0]`处理的逆过程。
每个`GAN[i]`使用潜码`z[i]`,以调节其发电机输出。 例如,潜在代码`z[0]`可以将发型从卷曲更改为波浪形。 GAN 的堆栈也可以用作合成假名人面孔的对象,从而完成整个*编码器*的逆过程。 每个`GAN[i]``z[i]`的潜在代码都可以用来更改假名人面孔的特定属性。
每个`GAN[i]`使用潜码`z[i]`,以调节其生成器输出。 例如,潜在代码`z[0]`可以将发型从卷曲更改为波浪形。 GAN 的堆栈也可以用作合成假名人面孔的对象,从而完成整个*编码器*的逆过程。 每个`GAN[i]``z[i]`的潜在代码都可以用来更改假名人面孔的特定属性。
有了 StackedGAN 的工作原理的关键思想,让我们继续下一节,看看如何在`tf.keras`中实现它。
......@@ -786,7 +784,7 @@ def build_encoder(inputs, num_labels=10, feature1_dim=256):
表 6.2.1:GAN 和 StackedGAN 的损失函数之间的比较。 `~p_data`表示从相应的编码器数据(输入,特征或输出)采样
条件“公式 6.2.3”中的损失函数`L_i^(G_cond)`确保发生器不会忽略输入`f[i + 1]`, 当从输入噪声代码`z[i]`合成输出`f[i]`时。 编码器`Encoder[i]`必须能够通过反转发生器的过程`Generator[i]`来恢复发生器输入。 通过`L2`或欧几里德距离(**均方误差****MSE**))来测量发电机输入和使用编码器恢复的输入之间的差异。
条件“公式 6.2.3”中的损失函数`L_i^(G_cond)`确保发生器不会忽略输入`f[i + 1]`, 当从输入噪声代码`z[i]`合成输出`f[i]`时。 编码器`Encoder[i]`必须能够通过反转发生器的过程`Generator[i]`来恢复发生器输入。 通过`L2`或欧几里德距离(**均方误差****MSE**))来测量生成器输入和使用编码器恢复的输入之间的差异。
“图 6.2.4”显示了`L_0^(G_cond)`计算所涉及的网络元素:
......@@ -808,7 +806,7 @@ def build_encoder(inputs, num_labels=10, feature1_dim=256):
图 6.2.6:图 6.2.3 的简化版本,仅显示了`L_i^(D)``L_0^(G_adv)`计算中涉及的网络元素
在“公式 6.2.5”中,三个发电机损耗函数的加权和为最终发电机损耗函数。 在我们将要介绍的 Keras 代码中,除的熵损失设置为 10.0 之外,所有权重都设置为 1.0。 在“公式 6.2.1”至“公式 6.2.5”中,`i`是指编码器和 GAN 组 ID 或级别。 在原始论文中,首先对网络进行独立训练,然后进行联合训练。 在独立训练期间,编码器将首先进行训练。 在联合训练期间,将使用真实数据和虚假数据。
在“公式 6.2.5”中,三个生成器损耗函数的加权和为最终生成器损耗函数。 在我们将要介绍的 Keras 代码中,除的熵损失设置为 10.0 之外,所有权重都设置为 1.0。 在“公式 6.2.1”至“公式 6.2.5”中,`i`是指编码器和 GAN 组 ID 或级别。 在原始论文中,首先对网络进行独立训练,然后进行联合训练。 在独立训练期间,编码器将首先进行训练。 在联合训练期间,将使用真实数据和虚假数据。
`tf.keras`中 StackedGAN 生成器和判别器的实现只需进行少量更改即可提供辅助点来访问中间功能。“图 6.2.7”显示了生成器`tf.keras`模型。
......@@ -1309,7 +1307,7 @@ def train(models, data, params):
`tf.keras`中 StackedGAN 的代码实现现已完成。 训练后,可以评估生成器的输出以检查合成 MNIST 数字的某些属性是否可以以与我们在 InfoGAN 中所做的类似的方式进行控制。
## StackedGAN 的发电机输出
## StackedGAN 的生成器输出
在对 StackedGAN 进行 10,000 步训练之后,`Generator[0]``Generator[1]`模型被保存在文件中。 `Generator[0]``Generator[1]`堆叠在一起可以合成以标签和噪声代码`z[0]``z[1]`为条件的伪造图像。
......@@ -1351,7 +1349,7 @@ StackedGAN 生成器可以通过以下方式进行定性验证:
图 6.2.11:由 StackedGAN 生成的图像作为第二个噪声代码`z1`从 0 到 9 的恒定矢量 -1.0 到 1.0 变化。`z1`似乎控制着每个数字的旋转(倾斜)和笔划粗细
“图 6.2.9”至“图 6.2.11”证明 StackedGAN 提供了对发电机输出属性的附加控制。 控件和属性为(标签,哪个数字),(`z0`,数字粗细)和(`z1`,数字倾斜度)。 从此示例中,我们可以控制其他可能的实验,例如:
“图 6.2.9”至“图 6.2.11”证明 StackedGAN 提供了对生成器输出属性的附加控制。 控件和属性为(标签,哪个数字),(`z0`,数字粗细)和(`z1`,数字倾斜度)。 从此示例中,我们可以控制其他可能的实验,例如:
* 从当前数量 2 增加堆栈中的元素数量
* 像在 InfoGAN 中一样,减小代码`z[0]``z[1]`的尺寸
......@@ -1364,13 +1362,13 @@ StackedGAN 生成器可以通过以下方式进行定性验证:
解开代码的基本思想是对损失函数施加约束,以使仅特定属性受代码影响。 从结构上讲,与 StackedGAN 相比,InfoGAN 更易于实现。 InfoGAN 的训练速度也更快。
# 4。结论
# 4\. 总结
在本章中,我们讨论了如何解开 GAN 的潜在表示。 在本章的前面,我们讨论了 InfoGAN 如何最大化互信息以迫使生成器学习解纠缠的潜矢量。 在 MNIST 数据集示例中,InfoGAN 使用三种表示形式和一个噪声代码作为输入。 噪声以纠缠的形式表示其余的属性。 StackedGAN 以不同的方式处理该问题。 它使用一堆编码器 GAN 来学习如何合成伪造的特征和图像。 首先对编码器进行训练,以提供特征数据集。 然后,对编码器 GAN 进行联合训练,以学习如何使用噪声代码控制发电机输出的属性。
在本章中,我们讨论了如何解开 GAN 的潜在表示。 在本章的前面,我们讨论了 InfoGAN 如何最大化互信息以迫使生成器学习解纠缠的潜矢量。 在 MNIST 数据集示例中,InfoGAN 使用三种表示形式和一个噪声代码作为输入。 噪声以纠缠的形式表示其余的属性。 StackedGAN 以不同的方式处理该问题。 它使用一堆编码器 GAN 来学习如何合成伪造的特征和图像。 首先对编码器进行训练,以提供特征数据集。 然后,对编码器 GAN 进行联合训练,以学习如何使用噪声代码控制生成器输出的属性。
在下一章中,我们将着手一种新型的 GAN,它能够在另一个域中生成新数据。 例如,给定马的图像,GAN 可以将其自动转换为斑马的图像。 这种 GAN 的有趣特征是无需监督即可对其进行训练,并且不需要成对的样本数据。
# 5.参考
# 5\. 参考
1. `Xi Chen et al.: InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets. Advances in Neural Information Processing Systems, 2016 (http://papers.nips.cc/paper/6399-infogan-interpretable-representation-learning-by-information-maximizing-generative-adversarial-nets.pdf).`
1. `Xun Huang et al. Stacked Generative Adversarial Networks. IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Vol. 2, 2017 (http://openaccess.thecvf.com/content_cvpr_2017/papers/Huang_Stacked_Generative_Adversarial_CVPR_2017_paper.pdf).`
\ No newline at end of file
# 7
# 跨域 GAN
# 七、跨域 GAN
在计算机视觉,计算机图形学和图像处理中,许多任务涉及将图像从一种形式转换为另一种形式。 灰度图像的着色,将卫星图像转换为地图,将一位艺术家的艺术品风格更改为另一位艺术家,将夜间图像转换为白天,将夏季照片转换为冬天只是几个例子。 这些任务被称为**跨域传输**,将成为本章的重点。 源域中的图像将传输到目标域,从而生成新的转换图像。
......@@ -112,7 +110,7 @@ Backward Cycle GAN 生成器的目标是合成:
总而言之,CycleGAN 的最终目标是使生成器`G`学习如何合成伪造的目标数据`y'`,该伪造的目标数据`y'`会在正向循环中欺骗识别器`D[y]`。 由于网络是对称的,因此 CycleGAN 还希望生成器`F`学习如何合成伪造的源数据`x'`,该伪造的源数据可以使判别器`D[x]`在反向循环中蒙蔽。 考虑到这一点,我们现在可以将所有损失函数放在一起。
让我们从 GAN 部分开始。 受到*最小二乘 GAN(LSGAN)* [5]更好的感知质量的启发,如“第 5 章”,“改进的 GAN” 中所述,CycleGAN 还使用 MSE 作为判别器和发电机损耗。 回想一下,LSGAN 与原始 GAN 之间的差异需要使用 MSE 损失,而不是二进制交叉熵损失。
让我们从 GAN 部分开始。 受到*最小二乘 GAN(LSGAN)* [5]更好的感知质量的启发,如“第 5 章”,“改进的 GAN” 中所述,CycleGAN 还使用 MSE 作为判别器和生成器损耗。 回想一下,LSGAN 与原始 GAN 之间的差异需要使用 MSE 损失,而不是二进制交叉熵损失。
CycleGAN 将生成器-标识符损失函数表示为:
......@@ -165,7 +163,7 @@ CycleGAN 的总损耗变为:
![](img/B14853_07_034.png) (Equation 7.1.15)
其中`λ3 = 0.5`。 在对抗训练中,身份损失也得到了优化。“图 7.1.9”重点介绍了实身份正则器的 CycleGAN 辅助网络:
其中`λ3 = 0.5`。 在对抗训练中,身份损失也得到了优化。“图 7.1.9”重点介绍了实身份正则器的 CycleGAN 辅助网络:
![A screenshot of a cell phone Description automatically generated](img/B14853_07_09.png)
......@@ -173,7 +171,7 @@ CycleGAN 的总损耗变为:
在下一个部分,我们将在`tf.keras`中实现 CycleGAN。
## 使用 Hard 实施 CycleGAN
## 使用 Keras 实现 CycleGAN
我们来解决,这是 CycleGAN 可以解决的简单问题。 在“第 3 章”,“自编码器”中,我们使用了自编码器为 CIFAR10 数据集中的灰度图像着色。 我们可以记得,CIFAR10 数据集包含 50,000 个训练过的数据项和 10,000 个测试数据样本,这些样本属于 10 个类别的`32 x 32` RGB 图像。 我们可以使用`rgb2gray`(RGB)将所有彩色图像转换为灰度图像,如“第 3 章”,“自编码器”中所述。
......@@ -810,7 +808,7 @@ def graycifar10_cross_colorcifar10(g_models=None):
在的下一部分中,我们将检查 CycleGAN 的发生器输出以进行着色。
## CycleGAN 的发电机输出
## CycleGAN 的生成器输出
“图 7.1.13”显示 CycleGAN 的着色结果。 源图像来自测试数据集:
......@@ -845,7 +843,7 @@ python3 cyclegan-7.1.1.py --cifar10_g_source=cyclegan_cifar10-g_source.h5
在本节中,我们演示了 CycleGAN 在着色上的一种实际应用。 在下一部分中,我们将在更具挑战性的数据集上训练 CycleGAN。 源域 MNIST 与目标域 SVHN 数据集有很大的不同[1]。
## 关于 MNIST 和 SVHN 数据集的 CycleGAN
## MNIST 和 SVHN 数据集上的 CycleGAN
我们现在要解决一个更具挑战性的问题。 假设我们使用 MNIST 灰度数字作为源数据,并且我们想从 *SVHN* [1]中借鉴样式,这是我们的目标数据。 每个域中的样本数据显示在“图 7.1.15”中:
......@@ -974,13 +972,13 @@ python3 cyclegan-7.1.1.py --mnist_svhn_g_source=cyclegan_mnist_svhn-g_ source.h5
到目前为止,我们只看到了 CycleGAN 的两个实际应用。 两者都在小型数据集上进行了演示,以强调可重复性的概念。 如本章前面所述,CycleGAN 还有许多其他实际应用。 我们在这里介绍的 CycleGAN 可以作为分辨率更高的图像转换的基础。
# 2.结论
# 2\. 总结
在本章中,我们讨论了 CycleGAN 作为可用于图像翻译的算法。 在 CycleGAN 中,源数据和目标数据不一定要对齐。 我们展示了两个示例,*灰度 ↔ 颜色**MNIST ↔ SVHN* ,尽管 CycleGAN 可以执行许多其他可能的图像转换 。
在下一章中,我们将着手另一种生成模型,即**变分自编码器****VAE**)。 VAE 具有类似的学习目标–如何生成新图像(数据)。 他们专注于学习建模为高斯分布的潜在矢量。 我们将以有条件的 VAE 和解开 VAE 中的潜在表示形式来证明 GAN 解决的问题中的其他相似之处。
# 3.参考
# 3\. 参考
1. `Yuval Netzer et al.: Reading Digits in Natural Images with Unsupervised Feature Learning. NIPS workshop on deep learning and unsupervised feature learning. Vol. 2011. No. 2. 2011 (https://www-cs.stanford.edu/~twangcat/papers/nips2011_housenumbers.pdf).`
1. `Zhu-Jun-Yan et al.: Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks. 2017 IEEE International Conference on Computer Vision (ICCV). IEEE, 2017 (http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.pdf).`
......
# 8
# 变分自编码器(VAE)
# 八、变分自编码器(VAE)
与我们在之前的章节中讨论过的**生成对抗网络****GAN**)类似,**变分自编码器****VAE**)[1] 属于生成模型家族。 VAE 的生成器能够在导航其连续潜在空间的同时产生有意义的输出。 通过潜矢量探索解码器输出的可能属性。
......@@ -17,7 +15,7 @@
* VAE 的原理
* 了解重新参数化技巧,有助于在 VAE 优化中使用随机梯度下降
* 有条件的 VAE(CVAE)和 β-VAE 的原理
* 了解如何使用`tf.keras` VAE
* 了解如何使用`tf.keras` VAE
我们将从谈论 VAE 的基本原理开始。
......@@ -145,7 +143,7 @@
图 8.1.2:解码器测试设置
通过重新参数化技巧解决了 VAE 上的最后一个问题,我们现在可以在`tf.keras`中实和训练变分自编码器。
通过重新参数化技巧解决了 VAE 上的最后一个问题,我们现在可以在`tf.keras`中实和训练变分自编码器。
## ALAS 与 Keras
......@@ -315,7 +313,7 @@ if __name__ == '__main__':
浏览时,连续空格始终会产生与 MNIST 数字相似的输出。 例如,数字 9 的区域接近数字 7 的区域。从中心附近的 9 移动到左下角会将数字变形为 7。从中心向上移动会将生成的数字从 3 更改为 5,最后变为 0.数字的变形在“图 8.1.7”中更明显,这是解释“图 8.1.6”的另一种方式。
在“图 8.1.7”中,显示发电机输出。 显示了潜在空间中数字的分布。 可以观察到所有数字都被表示。 由于中心附近分布密集,因此变化在中间迅速,在平均值较高的区域则缓慢。 我们需要记住,“图 8.1.7”是“图 8.1.6”的反映。 例如,数字 0 在两个图的左上象限中,而数字 1 在右下象限中。
在“图 8.1.7”中,显示生成器输出。 显示了潜在空间中数字的分布。 可以观察到所有数字都被表示。 由于中心附近分布密集,因此变化在中间迅速,在平均值较高的区域则缓慢。 我们需要记住,“图 8.1.7”是“图 8.1.6”的反映。 例如,数字 0 在两个图的左上象限中,而数字 1 在右下象限中。
“图 8.1.7”中存在一些无法识别的数字,尤其是在右上象限中。 从“图 8.1.6”可以看出,该区域大部分是空的,并且远离中心:
......@@ -323,9 +321,9 @@ if __name__ == '__main__':
图 8.1.7:根据潜在矢量平均值(VAE MLP)生成的数字。 为了便于解释,均值的范围类似于图 8.1.6
在本节中,我们演示了如何在 MLP 中实现 VAE。 我们还解释了导航潜在空间的结果。 在的下一部分中,我们将使用 CNN 实相同的 VAE。
在本节中,我们演示了如何在 MLP 中实现 VAE。 我们还解释了导航潜在空间的结果。 在的下一部分中,我们将使用 CNN 实相同的 VAE。
## 使用 CNN 进行 AE
## 带有 CNN 的 AE
在原始论文《自编码变分贝叶斯》[1]中,使用 MLP 来实现 VAE 网络,这与我们在上一节中介绍的类似。 在本节中,我们将证明使用 CNN 将显着提高所产生数字的质量,并将参数数量显着减少至 134,165。
......@@ -463,7 +461,7 @@ vae = Model(inputs, outputs, name='vae')
前的两节讨论了使用 MLP 或 CNN 的 VAE 的实现。 我们分析了两种实现方式的结果,结果表明 CNN 可以减少参数数量并提高感知质量。 在下一节中,我们将演示如何在 VAE 中实现条件,以便我们可以控制要生成的数字。
# 2.有条件的 VAE(CVAE)
# 2\. 条件 VAE(CVAE)
有条件的 VAE [2]与 CGAN 相似。 在 MNIST 数据集的上下文中,如果随机采样潜在空间,则 VAE 无法控制将生成哪个数字。 CVAE 可以通过包含要产生的数字的条件(单标签)来解决此问题。 该条件同时施加在编码器和解码器输入上。
......@@ -476,7 +474,7 @@ vae = Model(inputs, outputs, name='vae')
* 给定潜在矢量和条件,解码器的重建损失。
* 给定潜在矢量和条件的编码器之间的 KL 损耗以及给定条件的先验分布。 与 VAE 相似,我们通常选择`P[θ](x | c) = P(x | c) = N(0, 1)`
施 CVAE 需要对 VAE 的代码进行一些修改。 对于 CVAE,使用 VAE CNN 实施是因为它可以形成一个较小的网络,并产生感知上更好的数字。
现 CVAE 需要对 VAE 的代码进行一些修改。 对于 CVAE,使用 VAE CNN 实现是因为它可以形成一个较小的网络,并产生感知上更好的数字。
“列表 8.2.1”突出显示了针对 MNIST 数字的 VAE 原始代码所做的更改。 编码器输入现在是原始输入图像及其单标签的串联。 解码器输入现在是潜在空间采样与其应生成的图像的一键热标签的组合。 参数总数为 174,437。 与 β-VAE 相关的代码将在本章下一节中讨论。
......@@ -632,7 +630,7 @@ python3 cvae-cnn-mnist-8.2.1.py –bce --weights=cvae_cnn_mnist.tf --digit=0
在下一节中,我们将发现 CVAE 实际上只是另一种称为 β-VAE 的 VAE 的特例。
# 3\. β-VAE –具有纠缠的潜在表示形式的 VAE
# 3\. β-VAE – 具有纠缠的潜在表示形式的 VAE
在“第 6 章”,“非纠缠表示 GAN”中,讨论了潜码非纠缠表示的概念和重要性。 我们可以回想起,一个纠缠的表示是单个潜伏单元对单个生成因子的变化敏感,而相对于其他因子的变化相对不变[3]。 更改潜在代码会导致生成的输出的一个属性发生更改,而其余属性保持不变。
......@@ -682,7 +680,7 @@ python3 cvae-cnn-mnist-8.2.1.py --beta=9 --bce --weights=beta-cvae_cnn_mnist.tf
总而言之,我们已经证明与 GAN 相比,在 β-VAE 上更容易实现解缠表示学习。 我们所需要做的就是调整单个超参数。
# 4。结论
# 4\. 总结
在本章中,我们介绍了 VAE 的原理。 正如我们从 VAE 原理中学到的那样,从两次尝试从潜在空间创建合成输出的角度来看,它们都与 GAN 相似。 但是,可以注意到,与 GAN 相比,VAE 网络更简单,更容易训练。 越来越清楚的是 CVAE 和 β-VAE 在概念上分别类似于条件 GAN 和解缠表示 GAN。
......@@ -690,7 +688,7 @@ VAE 具有消除潜在向量纠缠的内在机制。 因此,构建 β-VAE 很
在下一章中,我们将专注于强化学习。 在没有任何先验数据的情况下,代理通过与周围的世界进行交互来学习。 我们将讨论如何为代理人的正确行为提供奖励,并为错误的行为提供惩罚。
# 5.参考
# 5\. 参考
1. `Diederik P. Kingma and Max Welling. Auto-encoding Variational Bayes. arXiv preprint arXiv:1312.6114, 2013 (https://arxiv.org/pdf/1312.6114.pdf).`
1. `Kihyuk Sohn, Honglak Lee, and Xinchen Yan. Learning Structured Output Representation Using Deep Conditional Generative Models. Advances in Neural Information Processing Systems, 2015 (http://papers.nips.cc/paper/5775-learning-structured-output-representation-using-deep-conditional-generative-models.pdf).`
......
# 9
# 深度强化学习
# 九、深度强化学习
**强化学习****RL**)是代理程序用于决策的框架。 代理不一定是软件实体,例如您在视频游戏中可能看到的那样。 相反,它可以体现在诸如机器人或自动驾驶汽车之类的硬件中。 内在的代理可能是充分理解和利用 RL 的最佳方法,因为物理实体与现实世界进行交互并接收响应。
......@@ -23,7 +21,7 @@ RL 已经存在了几十年。 但是,除了简单的世界模型之外,RL
让我们从 RL 的基本原理开始。
# 1.强化学习原理(RL)
# 1\. 强化学习原理(RL)
“图 9.1.1”显示了用于描述 RL 的感知动作学习循环。 环境是苏打水可以坐在地板上。 代理是一个移动机器人,其目标是拾取苏打水。 它观察周围的环境,并通过车载摄像头跟踪汽水罐的位置。 观察结果以一种状态的形式进行了汇总,机器人将使用该状态来决定要采取的动作。 所采取的动作可能与低级控制有关,例如每个车轮的旋转角度/速度,手臂的每个关节的旋转角度/速度以及抓手是打开还是关闭。
......@@ -44,7 +42,7 @@ RL 已经存在了几十年。 但是,除了简单的世界模型之外,RL
* 将来的奖励折现为`γ^k`,其中`γ ∈ [0, 1]``k`是未来的时间步长。
* *地平线*`H`是完成从`s[0]``s[T]`的一集所需的时间步长`T`
该环境可以是完全或部分可观察的。 后者也称为**部分可观察的 MDP****POMDP**。 在大多数情况下,完全观察环境是不现实的。 为了提高的可观察性,当前的观测值也考虑了过去的观测值。 状态包括对环境的足够观察,以使政策决定采取哪种措施。 回忆“图 9.1.1”,这可能是汽水罐相对于机器人抓手的三维位置,如机器人摄像头所估计的那样。
该环境可以是完全或部分可观察的。 后者也称为**部分可观察的 MDP****POMDP**。 在大多数情况下,完全观察环境是不现实的。 为了提高的可观察性,当前的观测值也考虑了过去的观测值。 状态包括对环境的足够观察,以使策略决定采取哪种措施。 回忆“图 9.1.1”,这可能是汽水罐相对于机器人抓手的三维位置,如机器人摄像头所估计的那样。
每当环境转换到新状态时,代理都会收到标量奖励`r[t + 1]`。 在“图 9.1.1”中,每当机器人靠近汽水罐时,奖励可能为 +1;当机器人离汽水罐更远时,奖励为 -1;当机器人关闭夹具并成功捡起苏打时,奖励为 +100。 能够。 代理的目标是学习一种最佳策略`π*`,该策略可使所有状态的收益最大化:
......@@ -66,7 +64,7 @@ RL 已经存在了几十年。 但是,除了简单的世界模型之外,RL
如果 MDP 是偶发的,则当代理到达终端状态`s[T]`时,状态将重置为`s[0]`。 如果`T`是有限的,则我们的水平范围是有限的。 否则,视野是无限的。 在“图 9.1.1”中,如果 MDP 是情景*情节*,则在收集苏打罐后,机器人可能会寻找另一个苏打罐来拾取,并且 RL 问题重发。
因此,RL 的主要目标是找到一种使每个州的价值最大化的政策。 在下一部分中,我们将介绍可用于最大化价值函数的策略学习算法。
因此,RL 的主要目标是找到一种使每个州的价值最大化的策略。 在下一部分中,我们将介绍可用于最大化价值函数的策略学习算法。
# 2\. Q 值
......@@ -443,7 +441,7 @@ Q 表已收敛,并显示了代理可以在给定状态下采取的逻​​辑
这个简单的示例说明了在简单确定性世界中代理的 Q 学习的所有要素。 在下一节中,我们将介绍考虑随机性所需的轻微修改。
# 4.非确定性环境
# 4\. 非确定性环境
如果环境不确定,则奖励和行动都是概率性的。 新系统是随机的 MDP。 为了反映不确定性报酬,新的价值函数为:
......@@ -455,7 +453,7 @@ Q 表已收敛,并显示了代理可以在给定状态下采取的逻​​辑
但是,在本章中,我们将重点介绍确定性环境。 在下一节中,我们将提出一种更通用的 Q 学习算法,称为**时差****TD**)学习。
# 5.时差学习
# 5\. 时差学习
Q 学习是更广义的 TD 学习`TD(λ)`的特例。 更具体地说,这是单步 TD 学习的特殊情况,`TD(0)`
......@@ -491,7 +489,7 @@ sudo pip3 install gym
应用于`FrozenLake-v0`的操作将返回观察结果(等效于下一个状态),奖励,完成(无论情节是否完成)以及调试信息字典。 返回的观察对象捕获环境的可观察属性,称为观察空间。
通用 Q 学习可以应用于`FrozenLake-v0`环境。“表 9.5.1”显示了湿滑和非湿滑环境的性能改进。 衡量政策绩效的一种方法是执行的事件达到目标状态的百分比。 百分比越高,效果越好。 从大约 1.5% 的纯探查(随机操作)的基准来看,该策略可以在非光滑环境中达到约 76% 的目标状态,在光滑环境中可以达到约 71% 的目标状态。 不出所料,很难控制湿滑的环境。
通用 Q 学习可以应用于`FrozenLake-v0`环境。“表 9.5.1”显示了湿滑和非湿滑环境的性能改进。 衡量策略表现的一种方法是执行的事件达到目标状态的百分比。 百分比越高,效果越好。 从大约 1.5% 的纯探查(随机操作)的基准来看,该策略可以在非光滑环境中达到约 76% 的目标状态,在光滑环境中可以达到约 71% 的目标状态。 不出所料,很难控制湿滑的环境。
| **模式** | **运行** | **大约百分比的目标** |
| --- | --- | --- |
......@@ -695,7 +693,7 @@ python3 q-frozenlake-9.5.1.py -d -t=1
在本节中,我们在更具挑战性的环境中演示了 Q 学习。 我们还介绍了 OpenAI 体育馆。 但是,我们的环境仍然是玩具环境。 如果我们有大量的状态或动作怎么办? 在这种情况下,使用 Q 表不再可行。 在下一节中,我们将使用深度神经网络来学习 Q 表。
# 6.深度 Q 网络(DQN)
# 6\. 深度 Q 网络(DQN)
在小型离散环境中,使用 Q 表执行 Q 学习是很好的选择。 但是,在大多数情况下,当环境具有许多状态或连续时,Q 表是不可行或不实际的。 例如,如果我们观察由四个连续变量组成的状态,则表的大小是无限的。 即使我们尝试将这四个变量离散化为 1,000 个值,表中的总行数也达到了惊人的`1000^4 = 1e12`。 即使经过训练,该表仍是稀疏的–该表中的大多数单元都是零。
......@@ -757,9 +755,9 @@ python3 q-frozenlake-9.5.1.py -d -t=1
1. `end`
“算法 9.6.1”总结了在具有离散动作空间和连续状态空间的环境上实 Q 学习所需的所有技术。 在下一节中,我们将演示如何在更具挑战性的 OpenAI Gym 环境中使用 DQN。
“算法 9.6.1”总结了在具有离散动作空间和连续状态空间的环境上实 Q 学习所需的所有技术。 在下一节中,我们将演示如何在更具挑战性的 OpenAI Gym 环境中使用 DQN。
## DQN 很难
## Keras 中的 DQN
为了说明 DQN,使用了 OpenAI Gym 的`CartPole-v0`环境。 `CartPole-v0`是极点平衡问题。 目的是防止电杆跌落。 环境是二维的。 动作空间由两个离散的动作(左右移动)组成。 但是,状态空间是连续的,并且包含四个变量:
......@@ -1168,7 +1166,7 @@ python3 dqn-cartpole-9.6.1.py -d
DQN 和 DDQN 均表明,借助 DL,Q 学习能够扩展并解决具有连续状态空间和离散动作空间的问题。 在本章中,我们仅在具有连续状态空间和离散动作空间的最简单问题之一上演示了 DQN。 在原始论文中,DQN [2]证明了它可以在许多 Atari 游戏中达到超人的性能水平。
# 7.结论
# 7\. 总结
在本章中,我们已经介绍了 DRL,DRL 是一种强大的技术,许多研究人员认为它是 AI 的最有希望的领先者。 我们已经超越了 RL 的原则。 RL 能够解决许多玩具问题,但是 Q 表无法扩展到更复杂的现实问题。 解决方案是使用深度神经网络学习 Q 表。 但是,由于样本相关性和目标 Q 网络的非平稳性,在 RL 上训练深度神经网络非常不稳定。
......@@ -1176,9 +1174,9 @@ DQN 提出了一种使用经验重播并将目标网络与受训 Q 网络分离
取而代之的是,应更频繁地采样基于 TD 错误的更重要的经验,以完成更有效的训练。 文献[7]提出了一种对决网络架构来估计状态值函数和优势函数。 这两个函数均用于估计 Q 值,以加快学习速度。
本章介绍的方法是值迭代/拟合。 通过找到最佳值函数间接学习策略。 在下一章中,方法将是使用称为策略梯度方法的一系列算法直接学习最佳策略。 学习政策有很多好处。 特别地,策略梯度方法可以处理离散和连续的动作空间。
本章介绍的方法是值迭代/拟合。 通过找到最佳值函数间接学习策略。 在下一章中,方法将是使用称为策略梯度方法的一系列算法直接学习最佳策略。 学习策略有很多好处。 特别地,策略梯度方法可以处理离散和连续的动作空间。
# 8.参考
# 8\. 参考
1. `Sutton and Barto: Reinforcement Learning: An Introduction, 2017 (http://incompleteideas.net/book/bookdraft2017nov5.pdf).`
1. `Volodymyr Mnih et al.: Human-level Control through Deep Reinforcement Learning. Nature 518.7540, 2015: 529 (http://www.davidqiu.com:8888/research/nature14236.pdf).`
......
# 10
# 政策梯度法
# 十、策略梯度方法
在本章中,我们将介绍在强化学习中直接优化策略网络的算法。 这些算法统称为“策略梯度方法”。 由于策略网络是在训练期间直接优化的,因此策略梯度方法属于*基于策略*强化学习算法的族。 就像我们在“第 9 章”,“深度强化学习”中讨论的基于值的方法一样,策略梯度方法也可以实现为深度强化学习算法。
......@@ -12,11 +10,11 @@
* 策略梯度定理
* 四种策略梯度方法: **REINFORCE****带基线的 REINFORCE****演员评论家****优势演员评论家(A2C)**
* 在连续动作空间环境中如何在`tf.keras`中实策略梯度方法的指南
* 在连续动作空间环境中如何在`tf.keras`中实策略梯度方法的指南
让我们从定理开始。
# 1.政策梯度定理
# 1\. 策略梯度定理
如“第 9 章”,“深度强化学习”中所讨论的,代理位于环境中,处于状态`s[t]`中,它是状态空间`S`的一个元素。 状态空间`S`可以是离散的,也可以是连续的。 代理通过遵循策略`π(a[t], s[t])`从动作空间`A`采取动作`a[t]``A`可以是离散的或连续的。 作为执行动作`a[t]`的结果,代理会收到奖励`r[t + 1]`,并且环境转换为新状态`s[t + 1]`。 新状态仅取决于当前状态和操作。 代理的目标是学习一种最佳策略`π*`,该策略可最大化所有状态的回报:
......@@ -74,7 +72,7 @@
与策略梯度方法相关的细微优势。 例如,在某些基于纸牌的游戏中,与基于策略的方法不同,基于价值的方法在处理随机性方面没有直接的过程。 在基于策略的方法中,操作概率随参数而平滑变化。
同时,相对于参数的微小变化,基于价值的行为可能会发生剧烈变化。 最后,基于策略的方法对参数的依赖性使我们对如何执行绩效考核的梯度提升产生了不同的表述。 这些是在后续部分中介绍的四种策略梯度方法。
同时,相对于参数的微小变化,基于价值的行为可能会发生剧烈变化。 最后,基于策略的方法对参数的依赖性使我们对如何执行表现考核的梯度提升产生了不同的表述。 这些是在后续部分中介绍的四种策略梯度方法。
基于策略的方法也有其自身的缺点。 由于趋向于收敛于局部最优而非全局最优,所以它们通常更难训练。 在本章末尾提出的实验中,代理很容易适应并选择不一定提供最高价值的动作。 策略梯度的特征还在于高差异。
......@@ -82,7 +80,7 @@
在以下各节中,我们将讨论四种策略梯度方法。 虽然讨论的重点是连续的动作空间,但是该概念通常适用于离散的动作空间。
# 2.蒙特卡洛政策梯度(REINFORCE)方法
# 2\. 蒙特卡洛策略梯度(REINFORCE)方法
最简单的策略梯度方法是 REINFORCE [4],这是蒙特卡洛策略梯度方法:
......@@ -186,7 +184,7 @@ class REINFORCEAgent(PolicyAgent):
```py
# apply the discount factor as shown in Algorithms
# 10.2.1, 10.3.1 and 10.4.1
# 10\. 2.1, 10.3.1 and 10.4.1
discounted_delta = delta * discount_factor
discounted_delta = np.reshape(discounted_delta, [-1, 1])
verbose = 1 if done else 0
......@@ -205,7 +203,7 @@ class REINFORCEAgent(PolicyAgent):
以下部分提出了对 REINFORCE 方法的改进。
# 3.用基线方法加强
# 3\. 带基线方法的 REINFORCE
REINFORCE 算法可以通过从收益`δ = R[t] - B(s[t])`中减去基线来概括。 基线函数`B(s[t])`可以是任何函数,只要它不依赖`a[t]`即可。 基线不会改变性能梯度的期望:
......@@ -258,7 +256,7 @@ REINFORCE 算法可以通过从收益`δ = R[t] - B(s[t])`中减去基线来概
![](img/B14853_10_02.png)
图 10.3.1:政策和价值网络。 具有基线的 REINFORCE 具有一个计算基线的价值网络
图 10.3.1:策略和价值网络。 具有基线的 REINFORCE 具有一个计算基线的价值网络
“列表 10.3.1”显示了`REINFORCEBaselineAgent`类,该类在`tf.keras`中实现了“算法 10.3.1”。 它继承自`REINFORCEAgent`,因为这两种算法仅在和`train()`方法上有所不同。 “算法 10.3.1”的第 5 行由`delta = reward - self.value(state)[0]`计算。 然后,通过调用各自模型的`fit()`方法来优化第 7 行和第 9 行中用于目标和价值函数的网络`logp_model``value_model`
......@@ -302,7 +300,7 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
```py
# apply the discount factor as shown in Algorithms
# 10.2.1, 10.3.1 and 10.4.1
# 10\. 2.1, 10.3.1 and 10.4.1
discounted_delta = delta * discount_factor
discounted_delta = np.reshape(discounted_delta, [-1, 1])
verbose = 1 if done else 0
......@@ -330,9 +328,9 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
在的下一部分中,我们将介绍使用基准线方法对 REINFORCE 的改进。
# 4.演员评论家
# 4\. 演员评论家方
在带有基线的 REINFORCE 方法中,该值用作基线。 它不用于训练值功能。 在本节中,我们介绍 REINFORCE 与基线的变化,称为演员评论家方法。 政策和价值网络扮演着参与者和批评者网络的角色。 策略网络是参与者决定给定状态时要采取的操作。 同时,价值网络评估参与者或政策网络做出的决策。
在带有基线的 REINFORCE 方法中,该值用作基线。 它不用于训练值功能。 在本节中,我们介绍 REINFORCE 与基线的变化,称为演员评论家方法。 策略和价值网络扮演着参与者和批评者网络的角色。 策略网络是参与者决定给定状态时要采取的操作。 同时,价值网络评估参与者或策略网络做出的决策。
价值网络充当批评者的角色,可以量化参与者所选择的行动的好坏。 价值网络通过将状态值`V(s, θ[v]`与收到的奖励`r`和观察到的下一个状态`γV(s', θ[v])`的折现值之和来评估状态值。 差异`δ`表示为:
......@@ -342,7 +340,7 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
自举技术和“公式 10.4.1”中状态表示的依赖性通常会加速学习并减少差异。 从“公式 10.4.1”,我们注意到价值网络评估了当前状态`s = s[t]`,这是由于策略网络的上一个操作`a[t-1]`。 同时,策略梯度基于当前动作`a[t]`。 从某种意义上说,评估延迟了一步。
“算法 10.4.1”总结了演员评论家方法[1]。 除了评估用于训练政策和价值网络的国家价值评估外,还可以在线进行训练。 在每个步骤中,两个网络都经过训练。 这与 REINFORCE 和带有基线的 REINFORCE 不同,在基线之前,代理完成了一个情节。 首先,在当前状态的值估计期间向价值网络查询两次,其次,为下一个状态的值查询。 这两个值都用于梯度计算中。
“算法 10.4.1”总结了演员评论家方法[1]。 除了评估用于训练策略和价值网络的国家价值评估外,还可以在线进行训练。 在每个步骤中,两个网络都经过训练。 这与 REINFORCE 和带有基线的 REINFORCE 不同,在基线之前,代理完成了一个情节。 首先,在当前状态的值估计期间向价值网络查询两次,其次,为下一个状态的值查询。 这两个值都用于梯度计算中。
**算法 10.4.1 演员评论家**
......@@ -433,7 +431,7 @@ class ActorCriticAgent(PolicyAgent):
```py
# apply the discount factor as shown in Algortihms
# 10.2.1, 10.3.1 and 10.4.1
# 10\. 2.1, 10.3.1 and 10.4.1
discounted_delta = delta * discount_factor
discounted_delta = np.reshape(discounted_delta, [-1, 1])
verbose = 1 if done else 0
......@@ -452,7 +450,7 @@ class ActorCriticAgent(PolicyAgent):
最终的策略梯度方法是 A2C。
# 5.优势演员评论家(A2C)方法
# 5\. 优势演员评论家(A2C)方法
在上一节的演员评论家方法中,目标是使的值函数正确评估状态值。 还有其他用于训练价值网络的技术。 一种明显的方法是在值函数优化中使用**均方误差****MSE**),类似于 Q 学习中的算法。 新值梯度等于返回值`R[t]`与状态值之间的 MSE 偏导数:
......@@ -595,7 +593,7 @@ class A2CAgent(PolicyAgent):
在介绍的四种算法中,它们仅在目标函数和值(如果适用)优化方面有所不同。 在下一节中,我们将介绍四种算法的统一代码。
# 6.使用 Keras 的策略梯度方法
# 6\. 使用 Keras 的策略梯度方法
上一节中讨论的策略梯度方法(“算法 10.2.1”至“算法 10.5.1”)使用相同的策略和价值网络模型。“图 10.2.1”至“图 10.4.1”中的策略和价值网络具有相同的配置。 四种策略梯度方法的不同之处仅在于:
......@@ -797,7 +795,7 @@ import tensorflow_probability as tfp
pip3 install --upgrade tensorflow-probability
```
政策网络的作用是预测高斯分布的均值和标准差。“图 10.6.5”显示了为`π(a[t] | s[t], θ)`建模的策略网络。
策略网络的作用是预测高斯分布的均值和标准差。“图 10.6.5”显示了为`π(a[t] | s[t], θ)`建模的策略网络。
![A close up of text on a white background Description automatically generated](img/B14853_10_08.png)
......@@ -1103,11 +1101,11 @@ self.value_model = Model(inputs, value, name='value')
在训练期间,我们收集了数据以确定每个策略梯度算法的性能。 在下一部分中,我们总结了结果。
# 7.政策梯度方法的绩效评估
# 7\. 策略梯度方法的表现评估
通过训练代理人 1000 次情节,评估了 4 种策略梯度方法。 我们将 1 次训练定义为 1,000 次训练。 第一性能度量标准是通过累计汽车在 1,000 集内达到标志的次数来衡量的。
在此指标中,A2C 达到该标志的次数最多,其次是 REINFORCE(具有基线,演员评论家和 REINFORCE)。 使用基线或批判者可以加速学习。 请注意,这些是训练课程,代理会在其中不断提高其绩效。 在实验中,有些情况下代理的性能没有随时间改善。
在此指标中,A2C 达到该标志的次数最多,其次是 REINFORCE(具有基线,演员评论家和 REINFORCE)。 使用基线或批判者可以加速学习。 请注意,这些是训练课程,代理会在其中不断提高其表现。 在实验中,有些情况下代理的性能没有随时间改善。
第二个性能指标基于以下要求:如果每集的总奖励至少为 90.0,则认为`MountainCarContinuous-v0`已解决。 从每种方法的 5 个训练课程中,我们选择了最近 100 个情节(第 900 至 999 集)中最高总奖励的 1 个训练课程。
......@@ -1175,7 +1173,7 @@ python3 policygradient-car-10.1.1.py
最后一点,我们在`tf.keras`中对策略渐变方法的实现存在一些局限性。 例如,训练演员模型需要对动作进行重新采样。 首先对动作进行采样并将其应用于环境,以观察奖励和下一个状态。 然后,采取另一个样本来训练对数概率模型。 第二个样本不一定与第一个样本相同,但是用于训练的奖励来自第一个采样动作,这可能会在梯度计算中引入随机误差。
# 8.结论
# 8\. 总结
在本章中,我们介绍了策略梯度方法。 从策略梯度定理开始,我们制定了四种方法来训练策略网络。 详细讨论了四种方法:REINFORCE,带有基线的 REINFORCE,演员评论家和 A2C 算法。 我们探讨了如何在 Keras 中实现这四种方法。 然后,我们通过检查代理成功达到目标的次数以及每集获得的总奖励来验证算法。
......@@ -1183,7 +1181,7 @@ python3 policygradient-car-10.1.1.py
在接下来的两章中,我们将着手于另一个领域-对象检测和语义分割。 对象检测使代理能够识别和定位给定图像中的对象。 语义分割基于对象类别识别给定图像中的像素区域。
# 9.参考
# 9\. 参考
1. `Richard Sutton and Andrew Barto: Reinforcement Learning: An Introduction: http://incompleteideas.net/book/bookdraft2017nov5.pdf (2017)`
1. `Volodymyr Mnih et al.: Human-level control through deep reinforcement learning, Nature 518.7540 (2015): 529`
......
# 11
# 物体检测
# 十一、对象检测
目标检测是计算机视觉最重要的应用之一。 对象检测是同时定位和识别图像中存在的对象的任务。 为了使自动驾驶汽车安全地在街道上行驶,该算法必须检测到行人,道路,车辆,交通信号灯,标志和意外障碍物的存在。 在安全方面,入侵者的存在可以用来触发警报或通知适当的当局。
......@@ -17,7 +15,7 @@
我们将从介绍对象检测的概念开始。
# 1.物体检测
# 1\. 对象检测
在物体检测中,目标是在图像中定位和识别物体。“图 11.1.1”显示了目标**汽水罐**的目标物检测。 本地化意味着必须估计对象的边界框。 使用左上角像素坐标和右下角像素坐标是用于描述边界框的通用约定。 在“图 11.1.1”中,左上角像素具有坐标`(x_min, y_min)`,而右下角像素的坐标为`(x_max, y_max)`。像素坐标系的原点`(0, 0)`位于整个图像的左上角像素。
......@@ -52,7 +50,7 @@
通过解释了对象检测的基本概念,我们可以开始讨论对象检测的某些特定机制。 我们将从介绍锚框开始。
# 2.锚盒
# 2\. 锚框
从上一节的讨论中,我们了解到,对象检测必须预测边界框区域以及其中的对象类别。 假设与此同时,我们的重点是边界框坐标估计。
......@@ -274,7 +272,7 @@ def centroid2minmax(boxes):
我们已经介绍了锚框如何协助对象检测以及如何生成它们。 在下一节中,我们将介绍一种特殊的锚点框:真实情况锚点框。 给定图像中的对象,必须将其分配给多个锚点框之一。 这就是,称为真实情况锚定框。
# 3.真实情况锚箱
# 3\. 真实情况锚框
从“图 11.2.3”看来,给定一个对象边界框,有许多可以分配给对象的真实情况锚定框。 实际上,仅出于“图 11.2.3”中的说明,已经有 3 个锚定框。 如果考虑每个区域的所有锚框,则仅针对`(s[x4], s[y4]) = (1/3, 1/2)`就有`6 x 6 = 36`个地面真实框。 使用所有 9,648 个锚点框显然过多。 所有锚定框中只有一个应与地面真值边界框相关联。 所有其他锚点框都是背景锚点框。 选择哪个对象应被视为图像中对象的真实情况锚定框的标准是什么?
......@@ -552,7 +550,7 @@ gt_class[1] = [0.0, 0.0, 1.0, 0.0]
现在我们已经了解了地面真锚框的作用,我们将继续研究对象检测中的另一个关键组件:损失函数。
# 4.损失函数
# 4\. 损失函数
在 SSD 中,有数千个锚定框。 如本章前面所述,对象检测的目的是预测每个锚框的类别和偏移量。 我们可以对每个预测使用以下损失函数:
......@@ -700,11 +698,11 @@ def focal_loss_categorical(y_true, y_pred):
# 5\. SSD 模型架构
“图 11.5.1”显示了 SSD 的模型架构,该模型实现了多尺度单发目标检测的概念框架。 网络接受 RGB 图像,并输出几个预测级别。 基本或**骨干**网络提取用于分类和偏移量预测的下游任务的功能。 ResNet50 是骨干网络的一个很好的例子,它类似于“第 2 章”,“深度神经网络”中讨论,实和评估的内容。 在骨干网络之后,对象检测任务由执行其余的网络,我们将其称为 **SSD 头**。
“图 11.5.1”显示了 SSD 的模型架构,该模型实现了多尺度单发目标检测的概念框架。 网络接受 RGB 图像,并输出几个预测级别。 基本或**骨干**网络提取用于分类和偏移量预测的下游任务的功能。 ResNet50 是骨干网络的一个很好的例子,它类似于“第 2 章”,“深度神经网络”中讨论,实和评估的内容。 在骨干网络之后,对象检测任务由执行其余的网络,我们将其称为 **SSD 头**。
骨干网络可以是具有冻结权重的预训练网络(例如,以前为 ImageNet 分类而训练),也可以是与对象检测一起训练的网络。 如果使用预先训练的基础网络,则可以利用重用以前从大型数据集中学习的特征提取过滤器的优势。 此外,由于冻结了骨干网参数,因此可以加快学习速度。 仅训练对象检测中的顶层。 在这本书中,骨干网是与对象检测联合训练的,因为我们假设我们不一定需要访问预先训练的骨干网。
骨干网网络通常使用步幅 2 或通过最大池化实几轮下采样。 对于 ResNet50,这是 4 倍。 基本网络变为`(w/2^4, h/2^4) = (w/16, h/16)`之后,特征图的结果尺寸。 如果图像的宽度和高度均可以被 16 整除,则尺寸是精确的。
骨干网网络通常使用步幅 2 或通过最大池化实几轮下采样。 对于 ResNet50,这是 4 倍。 基本网络变为`(w/2^4, h/2^4) = (w/16, h/16)`之后,特征图的结果尺寸。 如果图像的宽度和高度均可以被 16 整除,则尺寸是精确的。
例如,对于`640 x 480`的图像,生成的特征图的尺寸为`40 x 30 = 1200`。 如前几节所述,这是基础网络之后长宽比等于 1 的锚点框的数量。 此数字乘以每个锚定框的大小数。 在前面的部分中,由于长宽比,有 6 种不同的尺寸,而长宽比为 1 时,还有一个其他尺寸。
......@@ -940,7 +938,7 @@ class SSD:
在下一部分中,我们将讨论 Keras 中 SSD 架构实现的其他详细信息。 特别是 SSD 模型和多线程数据生成器的实现。
# 8\. Keras 中的 SSD 型号
# 8\. Keras 中的 SSD 模型
“列表 11.8.1”显示了 SSD 模型创建功能`build_ssd()`。 该模型在“图 11.5.1”中进行了说明。 该函数通过调用`base_outputs = backbone(inputs)`从骨干网或基础网络检索输出特征的`n_layers`。
......@@ -1285,7 +1283,7 @@ from skimage.io import imread
现在我们有一个多线程生成器,我们可以用它来从文件系统加载图像。 在下一节中,我们将演示如何通过拍摄目标对象的图像并对其进行标记来构建自定义数据集。
# 10.示例数据集
# 10\. 示例数据集
使用便宜的 USB 相机(A4TECH PK-635G)收集了一个由 1,000 `640 X 480` RGB 训练图像和 50 `640 X 480` RGB 测试图像组成的小型数据集。 使用 **VGG 图像标注器**(**VIA**)[5]标记数据集图像,以检测三个对象:1)**汽水罐**,2)**果汁罐**和 3)**水瓶**。“图 11.10.1”显示了标记过程的示例 UI。
......@@ -1334,7 +1332,7 @@ python3 ssd-11.6.1.py --train
训练完 SSD 网络之后,我们需要解决另一个问题。 我们如何处理给定对象的多个预测? 在测试训练好的模型之前,我们将首先讨论**非最大抑制**(**NMS**)算法。
# 12.非最大抑制(NMS)算法
# 12\. 非最大抑制(NMS)算法
模型训练完成后,网络将预测边界框偏移量和相应的类别。 在某些情况下,两个或更多边界框引用同一对象,从而创建冗余预测。 图 11.12.1 中的**汽水罐**表示了这种情况。 为了删除多余的预测,将调用 NMS 算法。 本书涵盖了经典 NMS 和软 NMS [6],如“算法 11.12.1”中所示。 两种算法都假定边界框和相应的置信度得分或概率是已知的。
......@@ -1652,7 +1650,7 @@ python3 ssd-11.6.1.py --restore-weights=ResNet56v2-4layer-extra_anchors-drinks-2
本节中的结果验证了我们的 SSD 模型。 一个重要的经验教训是,只要我们理解了问题,无论问题多么复杂,我们都可以逐步构建一个可行的解决方案。 SSD 是迄今为止我们在本书中介绍过的最复杂的模型。 它需要许多实用程序,模块以及大量数据准备和管理才能工作。
# 14.结论
# 14\. 总结
在本章中,讨论了多尺度单发物体检测的概念。 使用以接收场斑块的质心为中心的锚框,可以计算地面真值边界框偏移量。 代替原始像素误差,归一化像素误差会鼓励更适合优化的有限范围。
......@@ -1662,7 +1660,7 @@ python3 ssd-11.6.1.py --restore-weights=ResNet56v2-4layer-extra_anchors-drinks-2
在“第 12 章”中,“语义分割”建立在本章中开发的概念的基础上。 特别是,我们重用 ResNet 骨干网络来构建分段网络和 IoU 指标进行验证。
# 15.参考
# 15\. 参考
1. `Krizhevsky Alex, Ilya Sutskever, and Geoffrey E. Hinton. "Imagenet classification with deep convolutional neural networks." Advances in neural information processing systems. 2012.`
1. `Liu Wei, et al. "SSD: Single Shot MultiBox Detector." European conference on computer vision. Springer, Cham, 2016.`
......
# 12
# 语义分割
# 十二、语义分割
在“第 11 章”,“对象检测”中,我们讨论了对象检测作为一种重要的计算机视觉算法,具有多种实际应用。 在本章中,我们将讨论另一种称为语义分割的相关算法。 如果对象检测的目的是对图像中的每个对象同时执行定位和标识,则在语义分割中,目的是根据每个像素的对象类别对它们进行分类。
......@@ -14,11 +12,11 @@
* 不同类型的细分算法
* **全卷积网络****FCN**)作为语义分割算法的实现
* `tf.keras`中 FCN 的实和评估
* `tf.keras`中 FCN 的实和评估
我们将从讨论不同的分割算法开始。
# 1.细分
# 1\. 分割
分割算法将图像划分为像素或区域集。 分区的目的是为了更好地理解图像表示的内容。 像素组可以表示图像中特定应用感兴趣的对象。 我们划分的方式区分了不同的分割算法。
......@@ -44,7 +42,7 @@
图 12.1.1:显示不同分割算法的四幅图像。 彩色效果最佳。 原始图像可以在[这个页面](https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras/tree/master/chapter12-segmentation)中找到。
# 2.语义分割网络
# 2\. 语义分割网络
从上一节中,我们了解到语义分割网络是一个像素级分类器。 网络框图显示在“图 12.2.1”中。 但是,与简单分类器不同(例如,“第 1 章”,“Keras 深度神经网络”和“第 2 章”,“MNIST 分类器简介”) 其中只有一个分类器生成`one-hot vector`作为输出,在语义分段中,我们有并行运行的并行分类器。 每个人都在生成自己的单热点矢量预测。 分类器的数量等于输入图像中的像素数量或图像宽度与高度的乘积。 每个`one-hot vector`预测的维数等于感兴趣的填充对象类别的数量。
......@@ -326,7 +324,7 @@ def build_fcn(input_shape,
在运行训练程序之前,我们需要训练和测试带有地面真实性标签的数据集。 在的下一部分中,我们将讨论将在本章中使用的语义分割数据集。
# 4.示例数据集
# 4\. 示例数据集
我们可以使用在“第 11 章”,“对象检测”中使用的数据集。 回想一下,我们使用了一个小型数据集,其中包含使用便宜的 USB 相机(A4TECH PK-635G)收集的 1,000 `640 x 480` RGB 训练图像和 50 `640 x 480` RGB 测试图像。 但是,我们没有使用边界框和类别进行标记,而是使用多边形形状跟踪了每个对象类别的边缘。 我们使用相同的数据集注释器 **VGG 图像标注器****VIA**)[4]手动跟踪边缘并分配以下标签:1)**水瓶**,2)**汽水罐**和 3)**果汁罐**
......@@ -358,7 +356,7 @@ segmentation_test.npy
现在,我们准备训练和验证语义分割网络。 在下一节中,我们将显示在本节中注释的数据集上语义分割的结果。
# 5.语义分割验证
# 5\. 语义分割验证
要训​​练语义分段网络,请运行以下命令:
......@@ -401,7 +399,7 @@ python3 fcn-12.3.1.py --evaluate
在下一章中,我们将介绍无监督的学习算法。 考虑到监督学习中所需的昂贵且费时的标签,强烈地开发了无监督学习技术。 例如,在本章的语义分割数据集中,一个人花了大约 4 天的手工标签。 如果深度学习始终需要人工标记,那么它就不会前进。
# 六,结论
# 6\. 总结
在本章中,讨论了分割的概念。 我们了解到细分有不同类别。 每个都有自己的目标应用程序。 本章重点介绍语义分段的网络设计,实现和验证。
......@@ -413,7 +411,7 @@ python3 fcn-12.3.1.py --evaluate
如本章最后一部分所述,由于所涉及的成本和时间,深度学习领域正在意识到监督学习的局限性。 下一章重点介绍无监督学习。 它利用了通信领域信息理论中使用的互信息概念。
# 7.参考
# 7\. 参考
1. `Kirillov, Alexander, et al.: Panoptic Segmentation. Proceedings of the IEEE conference on computer vision and pattern recognition. 2019.`
1. `Long, Jonathan, Evan Shelhamer, and Trevor Darrell: Fully Convolutional Networks for Semantic Segmentation. Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.`
......
# 13
# 使用互信息进行无监督学习
# 十三、使用互信息进行无监督学习
许多机器学习任务(例如分类,检测和分段)都依赖于标记的数据。 网络在这些任务上的性能直接受到标记质量和数据量的影响。 问题在于产生足够数量的高质量注释数据既昂贵又费时。
......@@ -21,7 +19,7 @@ MI 最近已成功地从未标记的数据中提取了有用的信息,可以
我们将从介绍互信息的概念开始。
# 1.相互信息
# 1\. 互信息
互信息是对两个随机变量`X``Y`之间依赖性的度量。 有时,MI 也定义为通过观察`Y`得出的有关`X`的信息量。 MI 也被称为信息获取或观察`Y``X`不确定性的降低。
......@@ -66,7 +64,7 @@ MI 最近已成功地从未标记的数据中提取了有用的信息,可以
在讨论用于计算互信息的技术之前,让我们首先解释一下 MI 与熵之间的关系。 熵在“第 6 章”,“纠缠表示 GAN”中非正式引入,并在 InfoGAN 中得到了应用。
# 2.相互信息和熵
# 2\. 互信息和熵
MI 也可以用熵来解释。 回想一下“第 6 章”,“纠缠表示 GAN” ,熵`H``X`)是对预期信息量的度量。 随机变量`X`的:
......@@ -146,7 +144,7 @@ MI 的另一种有趣解释是根据“公式 13.2.3”,可以将其重写为
鉴于我们已经对 MI 和熵有了很好的了解,我们现在可以将此概念用作无监督学习的一种方法。
# 3.通过最大化离散随机变量的互信息来进行无监督学习
# 3\. 通过最大化离散随机变量的互信息来进行无监督学习
深度学习中的经典问题是监督分类。 在“第 1 章”,“Keras 简介”和“第 2 章”,“深度神经网络”中,我们了解到,在监督分类下,我们需要标记输入图像。 我们对 MNIST 和 CIFAR10 数据集都进行了分类。 对于 MNIST,三层 CNN 和密集层可实现高达 99.3% 的精度。 对于使用 ResNet 或 DenseNet 的 CIFAR10,我们可以实现大约 93% 至 94% 的精度。 MNIST 和 CIFAR10 都被标记为数据集。
......@@ -202,15 +200,15 @@ Ji 等人的**不变信息聚类**(**IIC**)[1] 建议从联合和边际分
![](img/B14853_13_059.png) (Equation 13.3.7)
在实无监督聚类之前,让我们再次反思目标–最大化`I(Z; Z_bar)`。 由于`X``X_bar = G(X)`及其对应的潜在代码矢量`Z``Z_bar`共享相同的信息,因此神经网络编码器`E`应该学习映射`X``X_bar`成为潜在载体`Z``Z_bar`,它们具有几乎相同的值以最大化其 MI。 在 MNIST 的背景下,看起来相似的数字将具有潜在代码矢量,它们聚集在空间的同一区域中。
在实无监督聚类之前,让我们再次反思目标–最大化`I(Z; Z_bar)`。 由于`X``X_bar = G(X)`及其对应的潜在代码矢量`Z``Z_bar`共享相同的信息,因此神经网络编码器`E`应该学习映射`X``X_bar`成为潜在载体`Z``Z_bar`,它们具有几乎相同的值以最大化其 MI。 在 MNIST 的背景下,看起来相似的数字将具有潜在代码矢量,它们聚集在空间的同一区域中。
如果潜在代码向量是 *softmax* 的输出,则表明我们正在执行无监督聚类,可以使用线性分配算法将其转换为分类器。 在本章中,我们将介绍两种可能的线性分配算法,这些算法可用于将无监督的聚类转换为无监督的分类。
在下一节中,我们将讨论可用于实现无监督聚类的编码器网络模型。 特别是,我们将介绍可用于估计`P(Z)``P(Z_bar)`的编码器网络。
# 4.用于无监督群集的编码器网络
# 4\. 用于无监督聚类的编码器网络
图 13.4.1 中显示了用于无监督群集的编码器网络实现。 它是一种编码器,具有类似 VGG 的[2]主干和`Dense`层,并具有 *softmax* 输出。 最简单的 VGG-11 具有主干,如“图 13.4.2”所示。
图 13.4.1 中显示了用于无监督聚类的编码器网络实现。 它是一种编码器,具有类似 VGG 的[2]主干和`Dense`层,并具有 *softmax* 输出。 最简单的 VGG-11 具有主干,如“图 13.4.2”所示。
对于 MNIST,使用最简单的 VGG-11 骨干将特征图大小从`MaxPooling2D`操作的 5 倍减至零。 因此,当在 Keras 中实现时,将使用按比例缩小的 VGG-11 主干版本,如图“图 13.4.3”所示。 使用同一组过滤器。
......@@ -242,9 +240,9 @@ Ji 等人的**不变信息聚类**(**IIC**)[1] 建议从联合和边际分
在以下两个部分的中,我们将研究[II]网络模型是如何实现,训练和评估的。 我们还将研究线性分配问题,作为为每个聚类指定标签的工具。
# 5\. Keras 中无监督的集群实现
# 5\. Keras 中的无监督聚类实现
Keras 中用于无监督群集的网络模型实现在“列表 13.5.1”中显示。 仅显示初始化。 网络超参数存储在`args`中。 VGG 主干对象在初始化期间提供。 给定骨干,模型实际上只是具有 *softmax* 激活的`Dense`层,如`build_model()`方法所示。 有创建多个头的选项。
Keras 中用于无监督聚类的网络模型实现在“列表 13.5.1”中显示。 仅显示初始化。 网络超参数存储在`args`中。 VGG 主干对象在初始化期间提供。 给定骨干,模型实际上只是具有 *softmax* 激活的`Dense`层,如`build_model()`方法所示。 有创建多个头的选项。
与“第 11 章”,“对象检测”相似,我们实现了`DataGenerator`类以多线程方式有效地提供输入数据。 `DataGenerator`对象生成由输入图像`X`及其变换后的图像`X_bar`组成的所需配对训练输入数据(即,连体输入图像)。 `DataGenerator`类中最关键的方法`__data_generation()`显示在“列表 13.5.2”中。 输入图像`X`从原始输入图像中央裁切。 对于 MNIST,这是`24 x 24`像素中心裁剪。 变换后的输入图像`X_bar`可以随机旋转`±20`范围内的某个角度,也可以从图像的任何部分随机裁剪`16 x 16``18 x 18``20 x 20`像素,然后将其调整为`24 x 24`像素。 作物尺寸存储在`crop_sizes`列表中。
......@@ -653,7 +651,7 @@ python3 iic-13.5.1.py --heads=1 --train --save-weights=head1.h5
对于其他数量的打印头,应相应地修改选项`--heads``--save-weights`。 在下一部分中,我们将检查 IIC 作为 MNIST 分类器的性能。
# 6.使用 MNIST 进行验证
# 6\. 使用 MNIST 进行验证
在本节中,我们将研究使用 MNIST 测试数据集对 IIC 进行验证之后的结果。 在测试数据集上运行聚类预测后,线性分配问题为每个聚类分配标签,从本质上将聚类转换为分类。 我们计算了分类精度,如“表 13.6.1”所示。 IIC 的准确率高于论文中报告的 99.3%。 但是,应该注意的是,并非每次训练都会导致高精度分类。
......@@ -673,7 +671,7 @@ python3 iic-13.5.1.py --heads=1 --eval --restore-weights=head1-best.h5
总之,我们可以看到可以执行无监督分类。 结果实际上比我们在“第 2 章”,“深度神经网络”中检查的监督分类更好。 在以下各节中,我们将把注意力转向对连续随机变量的无监督学习。
# 7.通过最大化连续随机变量的互信息进行无监督学习
# 7\. 通过最大化连续随机变量的互信息进行无监督学习
在前面的章节中,我们了解到可以很好地估计离散随机变量的 MI。 我们还证明了借助线性分配算法,通过最大化 MI 来执行聚类的网络可以得出准确的分类器。
......@@ -720,7 +718,7 @@ MINE 在“公式 13.1.1”中提出了 KL 散度的另一种表示形式,以
在下一部分中,在双变量高斯分布的情况下,我们将使用 MINE 算法估算 MI。 我们将展示使用解析方法估算的 MI 和使用 MINE 估算 MI 的方法。
# 8.估计二元高斯的互信息
# 8\. 估计二元高斯的互信息
在本节中,我们将验证 MINE 的二元高斯分布。“图 13.8.1”显示具有均值和协方差的双变量高斯分布:
......@@ -990,7 +988,7 @@ Computed MI: 0.147247
到目前为止,我们已经针对二元高斯分布情况证明了 MINE。 在下一节中,我们将使用 MINE 来处理与 IIC 相同的 MNIST 无监督聚类问题。
# 9.在 Keras 中使用连续随机变量进行无监督聚类
# 9\. 在 Keras 中使用连续随机变量进行无监督聚类
在 MNIST 数字的无监督分类中,我们使用 IIC,因为可以使用离散的联合和边际分布来计算 MI 。 我们使用线性分配算法获得了良好的准确率。
......@@ -1228,13 +1226,13 @@ python3 mine-13.8.1.py --train --batch-size=1024 --latent-dim=64 --epochs=200
到此结束本章和书。 无监督学习的领域是新生的。 鉴于人工智能发展的当前障碍之一是人工标签,这是一个巨大的研究机会,这既昂贵又费时。 我们预计在未来几年中,无监督学习将取得突破。
# 10.结论
# 10\. 总结
在本章中,我们讨论了 MI 及其在解决无人监督任务中有用的方式。 各种在线资源提供了有关 MI 的其他背景信息[4]。 当用于聚类时,最大化 MI 会强制使用线性分配或线性分类器将潜在代码向量聚类在适合轻松标记的区域中。
我们介绍了 MI 的两种度量:IIC 和 MINE。 我们可以通过对离散随机变量使用 IIC 来近似逼近 MI,从而导致分类器以较高的精度执行。 IIC 适用于离散概率分布。 对于连续随机变量,MINE 使用 KL 散度的 Donsker-Varadhan 形式对估计 MI 的深度神经网络进行建模。 我们证明了 MINE 可以近似逼近双变量高斯分布的 MI。 作为一种无监督的方法,MINE 在对 MNIST 数字进行分类时显示出可接受的性能。
# 11.参考
# 11\. 参考
1. `Ji, Xu, João F. Henriques, and Andrea Vedaldi. Invariant Information Clustering for Unsupervised Image Classification and Segmentation. International Conference on Computer Vision, 2019.`
1. `Simonyan, Karen, and Andrew Zisserman. Very deep convolutional networks for large-scale image recognition. arXiv preprint arXiv:1409.1556 (2014).`
......
......@@ -8,7 +8,7 @@
# 这本书是给谁的
本书适用于计划使用 GCP 构建 AI 应用程序的软件开发人员,技术主管和架构师。 除此之外,学生和任何对 AI 应用程序有很好的主意并希望了解可用工具和技术来快速构建原型并最终用于生产级应用程序的人都将从本书中受益。 本书对业务分析师和从业务角度了解数据格局的任何人也很有用。 无需大量的动手经验,就可以按照本书来基于领域知识构建支持 AI 的应用程序。 我们试图逐步提供这些说明,以使读者发现它们易于遵循和实
本书适用于计划使用 GCP 构建 AI 应用程序的软件开发人员,技术主管和架构师。 除此之外,学生和任何对 AI 应用程序有很好的主意并希望了解可用工具和技术来快速构建原型并最终用于生产级应用程序的人都将从本书中受益。 本书对业务分析师和从业务角度了解数据格局的任何人也很有用。 无需大量的动手经验,就可以按照本书来基于领域知识构建支持 AI 的应用程序。 我们试图逐步提供这些说明,以使读者发现它们易于遵循和实
# 本书涵盖的内容
......
......@@ -18,7 +18,7 @@
一些高级分析工作负载利用机器学习算法,这些算法需要**图形处理器****GPU**)的集群,以便在合理的时间内提供结果。 也可以按需采购 GPU,然后在云环境中将其无缝释放回资源池。 为了达到最大的业务影响,某些实验需要迅速投入生产。 在敏捷性和快速部署方面,基于云的环境是理想的。 业界已经开始在云上进行部署。 企业不仅看到**基础架构即服务****IaaS**)的好处,而且还看到**高级分析即服务****AAaaS**)在云平台上。
自 2018 年初以来,已迅速转向 Cloud First 策略。刚开始实其数据策略的组织正在将云作为其第一个游乐场,而不是投资于内部部署。 但是,“云优先”并不意味着“数据最后”策略。 在完全由数据驱动的策略中,数据仍然扮演着核心角色。 让我们看一下与本地部署相比,云中数据管理的一些优势。
自 2018 年初以来,已迅速转向 Cloud First 策略。刚开始实其数据策略的组织正在将云作为其第一个游乐场,而不是投资于内部部署。 但是,“云优先”并不意味着“数据最后”策略。 在完全由数据驱动的策略中,数据仍然扮演着核心角色。 让我们看一下与本地部署相比,云中数据管理的一些优势。
# 云优先策略的优势
......@@ -41,9 +41,9 @@ Google 通过从头开始构建服务,从而为企业提供云服务时采取
* **停机时间**:云服务完全取决于可靠的互联网连接的可用性。 当关键业务应用程序部署在云上时,互联网停机的风险和影响会增加。 但是,停机风险在本地部署中同样普遍,并且需要仔细考虑架构模式以最大程度地减少这些风险。 借助云,应在设计服务时考虑到高可用性,冗余和灾难恢复。 云供应商为云基础架构提供了多个可用性区域。 应用程序应利用这些冗余区域来部署关键服务。 在下一部分中,我们将了解 Google 如何通过地理位置分散的数据中心来减轻停机风险。
* **安全性和私密性**:许多管理敏感数据资产的企业在采用云时都担心数据的安全性和私密性。 云是共享空间,因此,风险显而易见。 但是,以下策略可以轻松应对反模式:
* 在所有部署级别上实安全治理实践和流程。
*精心定义的访问控制级别,并为所有用户和进程提供最低级别的访问。 如有疑问,请提供比访问服务和基础结构的更广泛的网络访问更多的受限访问。
* 对所有用户帐户实多因素身份验证。
* 在所有部署级别上实安全治理实践和流程。
*精心定义的访问控制级别,并为所有用户和进程提供最低级别的访问。 如有疑问,请提供比访问服务和基础结构的更广泛的网络访问更多的受限访问。
* 对所有用户帐户实多因素身份验证。
* 在所有端点上部署异常检测程序并持续监视云基础架构(自动以及基于样本的手动监视)。
云服务提供商已在保护这些反模式方面进行了大量投资,并且云部署此时与本地部署一样可靠和安全。
......@@ -56,7 +56,7 @@ Google 通过从头开始构建服务,从而为企业提供云服务时采取
![](img/a106bea6-fe0c-4b6f-bc20-9ad012cf6013.png)
这些地区分为“美洲”(北美和南美),“欧洲”和“亚太地区”。 选择正确的区域和区域对于确保服务和数据的延迟,可用性以及持久性处于可接受的水平至关重要。 确保区域内位置之间的网络数据包的往返延迟为亚毫秒级的 95%。 部署在区域内单个区域上的服务将不会容错。 在这种情况下,区域故障将导致服务中断。 为了开发容错应用程序,需要跨区域部署。 对于关键任务应用程序,应实多区域部署策略。 根据应用程序和服务的关键级别,将资源分类如下:
这些地区分为“美洲”(北美和南美),“欧洲”和“亚太地区”。 选择正确的区域和区域对于确保服务和数据的延迟,可用性以及持久性处于可接受的水平至关重要。 确保区域内位置之间的网络数据包的往返延迟为亚毫秒级的 95%。 部署在区域内单个区域上的服务将不会容错。 在这种情况下,区域故障将导致服务中断。 为了开发容错应用程序,需要跨区域部署。 对于关键任务应用程序,应实多区域部署策略。 根据应用程序和服务的关键级别,将资源分类如下:
* **区域资源**:这些资源在区域内操作。 在这种情况下,如果该区域不可用,则该服务将变得不可访问。 计算引擎是区域资源,因为如果基础数据可用,则可以恢复计算。 如果包含计算引擎实例的区域出现故障,则一旦该区域可用,就需要重新启动计算。
* **区域资源**:这些资源部署在一个区域内,并且在各个区域之间具有冗余性。 这些资源提供的服务不会因为区域故障而中断。 结果,利用区域资源确保了更高的可用性。
......
......@@ -265,7 +265,7 @@ Cloud Memorystore 是基于 Redis 构建的完全托管的内存中数据存储
* Redis 是一个通用的数据库,可以用于很多用例。 通常,人们将 Redis 用作缓存服务,但是它具有各种不同的数据结构,可以为**物联网****IoT**),ML,流式传输等其他用例提供服务。
* 借助 Cloud Memorystore,Google 本质上提供了可伸缩且高度可用的 Redis 实例。
* Google 针对 Cloud Memorystore 的**服务级别协议****SLA**)对于标准层为 99.9%,并且受到 Google 的网络政策和基于角色的访问控制的完全保护。
* Google 针对 Cloud Memorystore 的**服务级别协议****SLA**)对于标准层为 99.9%,并且受到 Google 的网络策略和基于角色的访问控制的完全保护。
* Cloud Memorystore 分为两层:基本层和标准层:
* 基本实例非常适合用作缓存服务,并且不会附加任何 SLA。
* 标准实例提供了高可用性,并在另一个区域中部署了副本,因此它可以从区域故障中恢复。
......@@ -349,7 +349,7 @@ Cloud Dataflow 与其他 GCP 服务集成在一起,例如 Cloud Pub/Sub,Clou
# 云数据流和 AI 应用
Cloud Dataflow 可以与 Cloud Machine Learning 集成,服务于各种 AL 和 ML 用例。 欺诈检测是一个经典的用例,可以使用 Cloud Dataflow 和 Cloud Machine Learning 实流作业。
Cloud Dataflow 可以与 Cloud Machine Learning 集成,服务于各种 AL 和 ML 用例。 欺诈检测是一个经典的用例,可以使用 Cloud Dataflow 和 Cloud Machine Learning 实流作业。
到目前为止,我们已经了解了 GCP 的基本知识,这将有助于我们有效地使用平台,做出正确的选择并建立有效的渠道。 现在,您已了解 GCP 上所有可用的计算,存储和处理选项。 现在,让我们开始构建 ML 管道。
......
......@@ -38,11 +38,11 @@ Cloud Machine Learning Engine 是一项由 Google Cloud 管理的服务,可让
![](img/904061da-2223-483a-b6f2-8017c6bb1d90.png)
三个步骤使用 Cloud AI Platform。 如上图所示,您可以使用 Google AI Platform Notebooks,Google Cloud Machine Learning 模型训练以及 Google Cloud AI Platform Prediction 服务来构建项目。 在本章中,我们将介绍如何利用 Google AI Platform Notebooks。 我们在“第 8 章”,“使用 Cloud ML Engine 实 TensorFlow 模型”和“第 9 章”,“构建预测应用”中介绍了 Google Cloud Machine Learning 模型的训练和预测服务。
三个步骤使用 Cloud AI Platform。 如上图所示,您可以使用 Google AI Platform Notebooks,Google Cloud Machine Learning 模型训练以及 Google Cloud AI Platform Prediction 服务来构建项目。 在本章中,我们将介绍如何利用 Google AI Platform Notebooks。 我们在“第 8 章”,“使用 Cloud ML Engine 实 TensorFlow 模型”和“第 9 章”,“构建预测应用”中介绍了 Google Cloud Machine Learning 模型的训练和预测服务。
# Google Cloud AI Platform Notebooks
**AI 平台笔记本**是一项托管服务,可提供嵌入式 **JupyterLab** 环境,设计人员和信息研究人员只需单击一下最新信息研究和 ML 框架,即可构建 JupyterLab 案例。 BigQuery,Cloud Dataproc 和 Cloud Dataflow 集成在笔记本中。 这使得处理和预处理信息易于实现。 最终,这会导致建模,训练和实方面的信息获取更为简单。 一键部署新的 JupyterLab 案例,即可立即分析您的信息。 每个示例都预先配置了最常见的数据科学和 ML 库的优化变体。 JupyterLab 接口利用笔记本电脑,并预先安装了优化的库变体,例如 TensorFlow,PyTorch,sci-kit-learn,pandas, **SciPy****Matplotlib**。 通过添加 **CPU****RAM****GPU**,您可以从小处着手,然后进行扩展。 如果您的信息对于一台计算机而言太大,则可以无缝迁移到 BigQuery,Cloud Dataproc,Cloud Dataflow 和 AI Platform 预测训练等服务。
**AI 平台笔记本**是一项托管服务,可提供嵌入式 **JupyterLab** 环境,设计人员和信息研究人员只需单击一下最新信息研究和 ML 框架,即可构建 JupyterLab 案例。 BigQuery,Cloud Dataproc 和 Cloud Dataflow 集成在笔记本中。 这使得处理和预处理信息易于实现。 最终,这会导致建模,训练和实方面的信息获取更为简单。 一键部署新的 JupyterLab 案例,即可立即分析您的信息。 每个示例都预先配置了最常见的数据科学和 ML 库的优化变体。 JupyterLab 接口利用笔记本电脑,并预先安装了优化的库变体,例如 TensorFlow,PyTorch,sci-kit-learn,pandas, **SciPy****Matplotlib**。 通过添加 **CPU****RAM****GPU**,您可以从小处着手,然后进行扩展。 如果您的信息对于一台计算机而言太大,则可以无缝迁移到 BigQuery,Cloud Dataproc,Cloud Dataflow 和 AI Platform 预测训练等服务。
# Google AI Platform 深度学习图像
......
......@@ -9,7 +9,7 @@
* 使用 TPU 进行模型开发的最佳实践
* 使用`TPUEstimator`训练模型
* 设置 TensorBoard 以分析 TPU 性能
* 绩效指南
* 表现指南
* 了解可抢占的 TPU
# 介绍云 TPU 及其组织
......@@ -272,7 +272,7 @@ TensorBoard 提供以下功能:
* XLA 结构图和 TPU 兼容性图对于分析非常有用。
* 还有一些分析器选项,例如概述页面,输入管道分析器,XLA Op 配置文件,跟踪查看器(仅适用于 Chrome 浏览器),内存查看器,吊舱查看器和流跟踪查看器(仅适用于 Chrome 浏览器)。 这些对于分析性能和调整应用程序非常有用。
# 绩效指南
# 表现指南
在开发模型时,非常重要的是要对其进行调整以使其获得良好的性能。 在本节中,我们将介绍一些技巧,这些技巧将帮助您提高模型在 Cloud TPU 上的性能。 这样,Cloud TPU 可以提供良好的性能,但是我们可以通过为应用程序设置正确的配置来增强它。
......@@ -399,4 +399,4 @@ $gcloud compute tpus list
在本章中,我们获得了创建 TPU 并在其上编写模型的所有必需知识。 我们已经了解了 Cloud TPU 及其组织以及 Cloud TPU 软件和硬件架构的基础。 我们已经在 Google Cloud 上创建了 TPU 和可抢占的 TPU。 我们已经编写了模型并使用`TPUEstimator`对其进行了训练。 我们已经使用 TensorBoard 描述了 Cloud TPU。 除了学习所有这些,我们还通过了足够的技巧来编写优化的模型。
在下一章中,我们将基于在实际项目上的经验,介绍在 GCP 上实施 TensorFlow 模型的最佳和行之有效的实践。
\ No newline at end of file
在下一章中,我们将基于在实际项目上的经验,介绍在 GCP 上实现 TensorFlow 模型的最佳和行之有效的实践。
\ No newline at end of file
# 使用 Cloud ML Engine 实 TensorFlow 模型
# 使用 Cloud ML Engine 实 TensorFlow 模型
**Google Cloud Platform****GCP**)上的 Cloud ML Engine 是一种无服务器方式,可用于构建机器学习管道。 该引擎利用基础平台组件,消除了对基础架构的配置和维护的需求。 数据科学家可以专注于数据,模型和预测。 这是在生产环境中启动并运行模型的理想且快速的方法。 该平台固有地提供了存储和计算弹性,并且几乎无限制地扩展了模型的训练和使用已部署的模型进行实时预测的能力。
......
......@@ -72,7 +72,7 @@ AI 应用程序获得的用于训练基础模型的数据越多,性能就会
随着更多设备连接到互联网,我们正在生成更多数据。 这称为大数据,并导致数据量增长。 必须使用尽可能多的数据来构建 AI 应用程序,因为各种形式的数据都包含可以用来构建智能应用程序的智能。 通过处理非结构化数据的功能,大数据现在包括例如图像,视频,音频文件,文本和无线数据。 大数据处理还涉及计算机视觉,**自然语言处理****NLP**),社交网络,语音识别,**车联网****IoV**)数据分析,实时**物联网****IoT**)数据分析以及无线大数据处理。
近来,已集中实了以**人工智能****AI**)为动力的大规模异构数据处理技术,这些技术专注于模式识别,机器学习和深度学习。 然而,人工智能驱动的大数据处理的发展仍然充满挑战。 在计算机视觉和图像处理中,越来越多的数据库和数据流已经被分发和处理。 大规模分析图像/视频数据的最大挑战之一是建立节能高效的实时方法,以从每秒产生的大量数据中提取有用的信息。 得益于大数据和新的 AI 技术的帮助,语音处理也取得了很多进展。
近来,已集中实了以**人工智能****AI**)为动力的大规模异构数据处理技术,这些技术专注于模式识别,机器学习和深度学习。 然而,人工智能驱动的大数据处理的发展仍然充满挑战。 在计算机视觉和图像处理中,越来越多的数据库和数据流已经被分发和处理。 大规模分析图像/视频数据的最大挑战之一是建立节能高效的实时方法,以从每秒产生的大量数据中提取有用的信息。 得益于大数据和新的 AI 技术的帮助,语音处理也取得了很多进展。
# 问题建模
......@@ -609,12 +609,12 @@ sg.send(message)
当务之急是,随着新功能的增加,GCP 将会进一步发展。 以下是我们认为将来会添加到 GCP 中的新增功能的代表列表:
* GCP 将具有更好的跨平台产品集成和可用性。 例如,IBM Power Systems 现在可以在 GCP 上使用。 这样,通过将整个平台迁移到 GCP,即可利用企业已经在大型生产系统中进行的投资。 这将为企业节省实成本和基础设施成本。
* GCP 将具有更好的跨平台产品集成和可用性。 例如,IBM Power Systems 现在可以在 GCP 上使用。 这样,通过将整个平台迁移到 GCP,即可利用企业已经在大型生产系统中进行的投资。 这将为企业节省实成本和基础设施成本。
* 即用型 AI 和 ML 模型将启用 GCP。 随着市场的成熟,GCP 将托管越来越多的 AI 和 ML 模型。 这些模型可通过具有固有互操作性的预定义 API 来使用。 GCP 将不断对模型进行训练和调整,并随着时间的推移产生越来越好的结果。 市场将随着使用量的增加而成熟。 签署和定价将简化,以使所有经验级别(包括入门级)的开发人员都能够快速构建其企业应用程序。
* GCP 将提供一个拖放式用户界面,以构建从问题分类到模型部署的整个 AI 管道。 届时,人工智能的力量将完全掌握在业务团队手中,而对 IT 和开发团队的依赖将减少。 平台的简化和民主化将带来进一步的创新,我们将体验不仅使用而且每个人都构建的智能应用程序。
* GCP 将启用针对特定行业和企业的 AI 工具包,以提高各种规模企业的盈利能力和创新能力。 例如,谷歌已经在帮助零售商加速其数字和多渠道收入增长。 除此之外,Google 还帮助零售商变得完全由数据驱动,并提出建议(基于数据)以提高运营效率。 这可以通过利用 GCP,Chrome Enterprise 和 Android 上的 AI 工具以及整个连接的工具箱来实现。
* GCP 上的 AI 工具包还将促进需要大量数据和计算能力以及用于构建 AI 管道的过程和接口的研究项目。 例如,谷歌正在帮助 FDA MyStudies 利用现实世界的数据进行生物学研究。 Google Cloud 正在与 FDA 合作开发 MyStudies 应用程序,并提供了更好,适应性更强的保护和可配置的隐私权政策。 目的是为研究组织提供自动识别和保护个人身份信息的能力。 Google Cloud 将继续投资于各种研究和研究计划,以对该平台进行总体改进,扩大支持的评估数量,并允许与下游分析和可视化工具集成。
* GCP 上的 AI 工具包还将促进需要大量数据和计算能力以及用于构建 AI 管道的过程和接口的研究项目。 例如,谷歌正在帮助 FDA MyStudies 利用现实世界的数据进行生物学研究。 Google Cloud 正在与 FDA 合作开发 MyStudies 应用程序,并提供了更好,适应性更强的保护和可配置的隐私权策略。 目的是为研究组织提供自动识别和保护个人身份信息的能力。 Google Cloud 将继续投资于各种研究和研究计划,以对该平台进行总体改进,扩大支持的评估数量,并允许与下游分析和可视化工具集成。
* AutoML Tables 使您的整个数据科学家团队能够以极高的速度和规模在结构化数据上自动构建和部署 ML 模型。 它具有出色的功能工程模型训练功能。 训练开始时,AutoML 表将自动执行某些功能工程任务,例如对输入进行标准化。 数值功能被限制在范围内,以实现更好的模型可靠性,日期时间输入参数的规范化,基本文本处理清除和停止单词删除,并为因变量创建一键编码和嵌入。 AutoML 表在线性,前馈深度神经网络,梯度增强决策树,AdaNet 和各种模型架构的集合上执行并行测试,以确定适合您的数据集的最佳模型架构。 用户将能够使用 StackDriver 日志记录查看 AutoML 表结构,并能够导出测试数据。
* AI Hub 是即将加入 GCP 的另一个非常有用的功能。 AI Hub 是用于构建最复杂的 ML 管道的一站式设施。 可以使用预配置的笔记本使用一些预训练的模型来构建 AI 应用程序,以及轻松地训练新模型。 AI Hub 还确保以一致的方式访问相关事件数据集。 还可以在模型开发上进行协作,并利用基于通用框架(例如 TensorFlow)构建的模型。 这极大地促进了在 GCP 上训练和部署模型。
......
......@@ -5,5 +5,5 @@
本节包括以下章节:
* “第 7 章”,“了解云 TPU”
* “第 8 章”,“使用 Cloud ML Engine 实 TensorFlow 模型”
* “第 8 章”,“使用 Cloud ML Engine 实 TensorFlow 模型”
* “第 9 章”,“建筑预测应用程序”
\ No newline at end of file
......@@ -8,7 +8,7 @@ RBM 通过尝试重建输入数据来找到输入的潜在表示。 在本章中
* 什么是 RBM?
* 成果管理制的发展路径
* 在 TensorFlow 中实 RBM
* 在 TensorFlow 中实 RBM
* 电影推荐的 RBM
* 数据库
* TensorFlow 中 DBN 的实现
......@@ -17,7 +17,7 @@ RBM 通过尝试重建输入数据来找到输入的潜在表示。 在本章中
* 自编码器的发展路径
* 原始自编码器
* 深度自编码器
* 稀疏的汽车编码器
* 稀疏的编码器
* 去噪自编码器
* 压缩自编码器
* 自编码器用于信用卡欺诈检测
......@@ -96,7 +96,7 @@ DBN 也有许多有趣的应用程序,例如:
我们将首先介绍 RBM 及其实现,以及它们在推荐系统中的应用,然后再转到 DBN 并利用它们对图像进行分类。
# RBM 及其在 TensorFlow 中的实
# RBM 及其在 TensorFlow 中的实
让我们从初始化 RBM 模型的参数开始。 回想一下,RMB 模型由与可见层和隐藏层之间的连接关联的权重`W`,可见层的偏置`a`和偏置`b`组成。 用于隐藏层。 RBM 对象由权重`W`,偏差`a``b`,可见单元数和隐藏单元数,吉布斯步骤数构成。 常规神经网络超参数,包括批量大小,学习率和时期数:
......@@ -566,7 +566,7 @@ Training error at epoch 100: 0.038423490045326095
我们基于 RBM 的电影推荐器可实现`0.038`的 MSE。 如果您有兴趣,可以使用更大的数据集,例如位于[这里](https://grouplens.org/datasets/movielens/10m/),以及位于[这里](https://grouplens.org/datasets/movielens/latest/)的 1000 万个收视率数据集。
通过其实和应用,我们已经获得了更多有关 RBM 的知识。 按照承诺,在下一节中,我们将介绍 RBM 的堆叠架构-DBN。
通过其实和应用,我们已经获得了更多有关 RBM 的知识。 按照承诺,在下一节中,我们将介绍 RBM 的堆叠架构-DBN。
# DBN 及其在 TensorFlow 中的实现
......@@ -766,7 +766,7 @@ I.Goodfellow 等开发了**稀疏自编码器**,它通过引入稀疏约束来
# 原始自编码器
这是最基本的三层架构,非常适合于开始实自编码器。 让我们准备数据集。 我们正在使用的数据集来自 Kaggle 竞赛,可以从[这个页面](https://www.kaggle.com/mlg-ulb/creditcardfraud)中的`Data`页面下载。 每行包含 31 个字段,如下所示:
这是最基本的三层架构,非常适合于开始实自编码器。 让我们准备数据集。 我们正在使用的数据集来自 Kaggle 竞赛,可以从[这个页面](https://www.kaggle.com/mlg-ulb/creditcardfraud)中的`Data`页面下载。 每行包含 31 个字段,如下所示:
* `Time`:自数据集中第一行以来的秒数
* `V1, V2, ..., V28`:通过 PCA 获得的原始特征的主要成分
......@@ -1084,7 +1084,7 @@ Epoch 00050: loss did not improve from 0.00003
Area under precision-recall curve: 0.8279249913991501
```
# 稀疏的汽车编码器
# 稀疏的编码器
在训练神经网络时,我们通常会在损失目标函数中施加约束,以控制网络的容量并防止过拟合。 自编码器也不例外。 我们可以在自编码器的损失函数中添加 L1 范数正则化项,从而引入稀疏约束。 这种自编码器称为稀疏自编码器。
......
......@@ -4,7 +4,7 @@
* MobileNet 如何发展
* MobileNet 的架构
* 用 Keras 实 MobileNet
* 用 Keras 实 MobileNet
* MobileNetV2
* MobileNetV2 的动机
* MobileNetV2 的架构
......@@ -241,7 +241,7 @@ MobileNetV2 首先对图像执行标准卷积,以​​创建 32 个滤镜特
与 MobileNet 相似,我们也可以使用 Keras 来实现 MobileNetV2。
# 实 MobileNetV2
# 实 MobileNetV2
我们将遵循与 MobileNet 相似的过程。 您可以在 Keras 应用程序中找到 MobileNetV2。 我们将使用与 MobileNet 相同的代码,除了这次将使用 MobileNetV2。 供参考,代码如下:
......
......@@ -13,14 +13,14 @@ GAN 在合成图像,声波,视频和任何其他信号方面几乎具有相
* 对抗训练
* GAN 的演进路径
* 原始 GAN 建筑
*原始 GAN
*原始 GAN
* 产生影像
* 深度卷积 GAN 架构
*深度卷积 GAN
*深度卷积 GAN
* 条件 GAN 架构
*条件 GAN
*条件 GAN
* 信息最大化 GAN 架构
*信息最大化的 GAN
*信息最大化的 GAN
# 什么是 GAN?
......@@ -354,7 +354,7 @@ tensorboard --logdir=logdir/
卷积层共有三个,分别由 64 个,128 个和 256 个`5 x 5`滤镜组成。
如前所述,生成器通常与判别器对称。 DCGAN 中的判别器通过卷积层解释输入图像并生成数字输出。 因此,生成器需要使用**转置的卷积层**将数字噪声输入转换为图像,这与卷积层完全相反。 卷积层执行下采样,而转置卷积层执行上采样。 例如,我们可以为发电机使用以下架构:
如前所述,生成器通常与判别器对称。 DCGAN 中的判别器通过卷积层解释输入图像并生成数字输出。 因此,生成器需要使用**转置的卷积层**将数字噪声输入转换为图像,这与卷积层完全相反。 卷积层执行下采样,而转置卷积层执行上采样。 例如,我们可以为生成器使用以下架构:
![](img/a9c5016a-29c9-480f-8680-a55ca4d3d4cf.png)
......@@ -409,7 +409,7 @@ tensorboard --logdir=logdir/
这很容易。 三个卷积层分别包含 64、128 和 256 个`5 x 5`过滤器。
开发发电机有点棘手。 回想一下,我们需要首先将输入的一维噪声整形为三维图像,以启用转置卷积。 我们知道,由于两个网络的对称性,第三维是 256。 那么,前两个维度是什么? 它们是`2 x 2`,在第一个转置的卷积层之后变为`4 x 4`,第二个之后的为`8 x 8`,第三个之后的为`16 x 16`,如果它是`3 x 3`,则与我们的`28 x 28`的目标相去甚远。 同样,它在第三个转置的卷积层之后变为`24 x 24`,这又不够大。 如果它是`4 x 4`,则在第三个转置的卷积层之后变为`32 x 32`。 因此,将线性输入重塑为`4 x 4`图像就足够了。 请注意,现在生成的图像输出的大小为`32 x 32`,这与我们的真实图像的大小`4 x 4`不同。要确保对判别器的输入恒定,我们只需要在真实图像上填充零即可。 在`load_dataset`函数的顶部实现了实图像的零填充:
开发生成器有点棘手。 回想一下,我们需要首先将输入的一维噪声整形为三维图像,以启用转置卷积。 我们知道,由于两个网络的对称性,第三维是 256。 那么,前两个维度是什么? 它们是`2 x 2`,在第一个转置的卷积层之后变为`4 x 4`,第二个之后的为`8 x 8`,第三个之后的为`16 x 16`,如果它是`3 x 3`,则与我们的`28 x 28`的目标相去甚远。 同样,它在第三个转置的卷积层之后变为`24 x 24`,这又不够大。 如果它是`4 x 4`,则在第三个转置的卷积层之后变为`32 x 32`。 因此,将线性输入重塑为`4 x 4`图像就足够了。 请注意,现在生成的图像输出的大小为`32 x 32`,这与我们的真实图像的大小`4 x 4`不同。要确保对判别器的输入恒定,我们只需要在真实图像上填充零即可。 在`load_dataset`函数的顶部实现了实图像的零填充:
```py
>>> def load_dataset_pad():
......@@ -519,7 +519,7 @@ TensorBoard 中显示的学习图如下所示:
![](img/6c0103ec-9a04-4eaa-8db2-0c53fe05a805.png)
下图显示了发电机损耗:
下图显示了生成器损耗:
![](img/1dff13c3-702f-4b6d-b732-bf99065d0ddf.png)
......@@ -701,7 +701,7 @@ TensorBoard 中显示的学习图如下所示:
![](img/6c0bddb0-18e5-42b9-91f9-0d475ebc4609.png)
下图显示了发电机损耗:
下图显示了生成器损耗:
![](img/28dc5e10-92cb-4ac4-9be0-6de392a19d01.png)
......
# 前言
深度学习技术可用于开发智能 Web 应用程序。 在过去的几年中,已经发现在其产品和业务中采用深度学习技术的公司数量急剧增长。 提供人工智能和基于深度学习的解决方案的新兴企业数量激增。 本书介绍了用于使用 Python 在 Web 开发中实深度学习的众多工具和技术实践。
深度学习技术可用于开发智能 Web 应用程序。 在过去的几年中,已经发现在其产品和业务中采用深度学习技术的公司数量急剧增长。 提供人工智能和基于深度学习的解决方案的新兴企业数量激增。 本书介绍了用于使用 Python 在 Web 开发中实深度学习的众多工具和技术实践。
首先,您将学习机器学习的基础知识,重点是深度学习和神经网络的基础,以及它们的常见变体,例如卷积神经网络,以及如何将它们集成到网站中,其前端使用不同标准 Web 技术堆栈构建。 您将通过为自定义模型创建 REST API,使用 Django 和 Flask 等 Python 库来创建支持深度学习的 Web 应用程序。 您将为 Google Cloud 和 AWS 上基于深度学习的 Web 部署设置云环境,并获得有关如何使用经过实践检验的深度学习 API 的指导。 此外,您将使用 Microsoft 的 Intelligent Emotion API,该 API 可以从一张脸部图片中检测出人类的情感。 您还将掌握部署真实世界的网站的知识,并获得丰富的见解,可以使用 reCaptcha 和 Cloudflare 保护这些网站,从而获得可靠的体验。 最后,您将使用自然语言处理从用户评论中推荐餐馆,并通过 Dialogflow 将语音 UX 集成到您的网页上。
......
......@@ -401,7 +401,7 @@ ML 模型带有不同的*超参数*,这些超参数无法从模型训练中学
如果您想知道某些网页如何通过其网站上的聊天提供 24/7 全天候帮助,答案几乎总是聊天机器人正在从另一端回答您的查询。 1966 年,约瑟夫·魏岑鲍姆(Joseph Weizenbaum)的 ELIZA 聊天机器人击败图灵测试在全世界掀起了一波热潮时,我们从来没有想到过聊天机器人会在万维网上产生的影响(不过,其原因可能是 ARPANET 本身仅是由 ARPANET 创造的) 在 1969 年)。
如今,聊天机器人无处不在。 许多《财富》 500 强公司都在该领域进行研究,并提出了针对其产品和服务的聊天机器人的实方案。 在甲骨文最近进行的一项调查中,来自几家公司和初创公司的 800 位高管的回应表明,其中近 80% 的人表示,他们已经使用或计划在 2020 年之前在面向客户的产品中使用聊天机器人。
如今,聊天机器人无处不在。 许多《财富》 500 强公司都在该领域进行研究,并提出了针对其产品和服务的聊天机器人的实方案。 在甲骨文最近进行的一项调查中,来自几家公司和初创公司的 800 位高管的回应表明,其中近 80% 的人表示,他们已经使用或计划在 2020 年之前在面向客户的产品中使用聊天机器人。
在 AI 开始为聊天机器人提供动力之前,就像 ELIZA(及其后继产品 ALICE)一样,聊天机器人主要是关于一组固定响应的映射到几种输入模式的。 在用户输入的句子中碰到单词*母亲**父亲*时,几乎可以肯定会产生一个关于用户家庭或他们的幸福的回答。 如果用户写了“我不想谈论 XYZ 的家庭”之类的东西,显然这不是所需的响应。
......@@ -415,7 +415,7 @@ Facebook Messenger 的漫游器平台在向公众开放的前 17 个月内创建
在互联网的早期,许多网站都在其中嵌入了里程表式计数器。 这些是对网站或特定页面获得的点击次数的简单计数。 然后,它们以可用的格式增长-普通计数器,每天/每周/每月的计数器,甚至是基于地理位置的计数器。
数据收集,本质上是用户交互以及他们如何与基于 Web 的应用程序交互的日志,处理这些数据以生成绩效指标,然后最终确定公司可以采取的措施来改善他们的 Web 应用程序统称为 Web 分析。
数据收集,本质上是用户交互以及他们如何与基于 Web 的应用程序交互的日志,处理这些数据以生成表现指标,然后最终确定公司可以采取的措施来改善他们的 Web 应用程序统称为 Web 分析。
自从互联网发明以来,当今的 Web 应用程序每时每刻都会生成大量日志。 即使将鼠标指针闲置在网页上,也可能会报告给 Google Analytics(分析)仪表板,从该站点上,网站管理员可以查看用户正在查看哪些页面以及他们在页面上花费了多少时间。 同样,用户在页面之间采取的流量将是一个非常有趣的指标。
......
......@@ -57,7 +57,7 @@
让我们花一些时间进一步讨论问题陈述,以便弄清楚我们需要开发的基本模块。
我们的项目涉及根据用户的偏好向用户推荐产品。 因此,为了执行此建议,我们需要一个知道如何理解用户为其提供的偏好集的系统。 为了能够理解这些偏好,系统将需要某种我们将要实 DL 的训练。 但是偏好呢? 他们看起来如何? 在需要人员参与的现实世界项目情况中,您经常会遇到这些问题。
我们的项目涉及根据用户的偏好向用户推荐产品。 因此,为了执行此建议,我们需要一个知道如何理解用户为其提供的偏好集的系统。 为了能够理解这些偏好,系统将需要某种我们将要实 DL 的训练。 但是偏好呢? 他们看起来如何? 在需要人员参与的现实世界项目情况中,您经常会遇到这些问题。
现在,请三思而后行,并尝试思考在选择要购买的产品时通常要寻找的方面。 让我们在这里列出它们:
......@@ -125,7 +125,7 @@
假设您正在从亚马逊在美国的销售网点抓取产品数据,而最终在印度版本的亚马逊上搜索产品。 刮板可能会为您提供来自印度网点的数据,可能不适合推荐给美国居民。
此外,由于亚马逊以及类似的服务(例如 Flipkart)利用推荐系统为他们的客户定位最适合的*产品*,因此在数据收集期间,抓取工具不应成为此类建议的牺牲品。 重要的是,抓取工具应时不时地清除其上下文,并避免由于亚马逊实的 AI 而产生偏见。
此外,由于亚马逊以及类似的服务(例如 Flipkart)利用推荐系统为他们的客户定位最适合的*产品*,因此在数据收集期间,抓取工具不应成为此类建议的牺牲品。 重要的是,抓取工具应时不时地清除其上下文,并避免由于亚马逊实的 AI 而产生偏见。
让我们以 Amazon Fine Food Reviews 数据集为例。 尽管乍看之下数据集看起来很平衡,但我们可以发现数据集中存在很多偏差。 考虑客户为评论产品而撰写的文字长度。 让我们根据它们的得分在图表中绘制它们。 下图显示了等级为 1 和 2 星的产品的图:
......
......@@ -2,7 +2,7 @@
一般而言,安全性对于任何网站以及所有软件而言都是至关重要的。 如今,安全威胁随着可用计算能力的提高和技术领域的发展而不断发展。 因此,重要的是网站必须采取最佳的安全措施以确保其数据和用户信息的安全。 从事在线商业活动的网站始终处于高风险之中,它们面对从未见过的安全攻击非常普遍。 对于基于规则的安全系统而言,新的攻击尤其难以识别和阻止。 因此,您可以查看由深度学习驱动的安全系统提供的选项,这些选项可以有效替代基于规则的系统,并且还能够正确识别和阻止新威胁。
本章讨论了一些技巧和技术,您可以使用这些技巧和技术通过使用 Python 进行深度学习来保护网站的安全。 我们将介绍 reCAPTCHA 和 Cloudflare,并讨论如何使用它们来增强网站的安全性。 我们还将向您展示如何使用基于深度学习的技术和 Python 后端,实安全机制来检测网站上的恶意用户。 本章将涵盖以下主题:
本章讨论了一些技巧和技术,您可以使用这些技巧和技术通过使用 Python 进行深度学习来保护网站的安全。 我们将介绍 reCAPTCHA 和 Cloudflare,并讨论如何使用它们来增强网站的安全性。 我们还将向您展示如何使用基于深度学习的技术和 Python 后端,实安全机制来检测网站上的恶意用户。 本章将涵盖以下主题:
* reCAPTCHA 的故事
* DIY –在 Django 上进行恶意用户检测
......
......@@ -4,13 +4,13 @@
您需要确定的解决方案来更新生产中的模型。 另外,由于摄取的数据可能不是采用训练的格式,因此您需要定义数据流,以便以无缝方式将其变形以供使用。
在本章中,我们将讨论更新生产模型的方法以及选择每种方法的思路。 我们将从简要概述开始,然后演示一些用于创建 DL 数据流的著名工具。 最后,我们将实自己的在线学习或增量学习演示,以建立更新生产模型的方法。
在本章中,我们将讨论更新生产模型的方法以及选择每种方法的思路。 我们将从简要概述开始,然后演示一些用于创建 DL 数据流的著名工具。 最后,我们将实自己的在线学习或增量学习演示,以建立更新生产模型的方法。
我们将在本章介绍以下主题:
* 生产方法中的 DL 概述
* 在生产中部署 ML 的流行工具
*演示 DL Web 生产环境
*演示 DL Web 生产环境
* 将项目部署到 Heroku
* 安全性,监视和性能优化
......@@ -275,7 +275,7 @@ pip install -f http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html h2o
`H2O.AutoML`的语法与其他流行的 ML 库相似,因此非常易于理解。
# 实演示 DL Web 环境
# 实演示 DL Web 环境
现在,我们将深入研究构建示例生产应用程序,该应用程序在后端使用在线学习。 我们将基于 Cleveland 数据集创建一个可以预测心脏病的应用程序。 然后,我们将将此模型部署到基于云容器的服务 Heroku。 最后,我们将演示该应用程序的在线学习功能。
......@@ -441,7 +441,7 @@ clf.predict(X_test[0].reshape(-1, 1).T)
现在,我们将开始将此 Jupyter 笔记本转换为可以按需执行增量学习的脚本。 但是,我们将首先构建该项目的前端,以便我们可以从后端了解需求。
# 实前端
# 实前端
我们将在这里采用一种自下而上的方法,并首先设计示例应用程序的前端。 这样做只是为了理解为什么我们在后端脚本中编写一些方法与前面几章中的方法有所不同。 很明显,在开发实际应用程序时,首先要创建后端脚本。
......@@ -493,7 +493,7 @@ $("#reset-btn").click(function() {
现在,我们知道了需要在后端构建的 API。 让我们在下一部分中构建它们!
# 实后端
# 实后端
在本节中,我们将创建所需的 API 以及用于演示的服务器脚本。 编辑项目根文件夹中的`app.py`文件:
......
......@@ -69,7 +69,7 @@ NLP 是机器学习和深度学习应用程序中最受欢迎的也是最令人
计算机不可能直接处理和使用文本。 因此,在将所有文本输入机器学习模型之前,必须将其转换为数字。 将文本更改为数字数组的过程,以便可以在任何时间点从转换后的文本中检索最重要的原始文本,这称为特征提取或编码。 **词袋****BoW**)是一种流行的简单技术,用于对文本执行特征提取。
与 BoW 实相关的步骤如下:
与 BoW 实相关的步骤如下:
1. 从文档中提取所有唯一的单词。
2. 用文档中所有唯一的单词创建一个向量。
......
......@@ -15,7 +15,7 @@
# Quora
在 Quora 之前,已经有很多问答网站和论坛。 在互联网历史上的某个时刻,在线论坛被视为无法再改进的东西; 但是,Quora 提出了一些使用深度学习进行的调整,以帮助他们快速胜过其他论坛。 以下是他们实的调整:
在 Quora 之前,已经有很多问答网站和论坛。 在互联网历史上的某个时刻,在线论坛被视为无法再改进的东西; 但是,Quora 提出了一些使用深度学习进行的调整,以帮助他们快速胜过其他论坛。 以下是他们实的调整:
* 他们使贡献者能够使用“问与答”功能在发布任何问题后立即请求答案。 这使问题更容易到达相关主题专家,他们迅速给出了答案,并使该平台响应更快,更准确。
* 他们使用**自然语言处理****NLP**)屏蔽了写得不好的问题和答案。 这引入了具有高质量内容的自动审核论坛的概念。
......
......@@ -106,11 +106,11 @@ MobileNet 是一种有效的神经网络模型,可用于手机和边缘设备
判别器将生成真实图像的概率信息馈送到生成器,生成器使用该信息来改进其预测,以创建人造图像`G(z)`。 随着训练的进行,生成器会更好地创建可以欺骗判别器的人工图像,并且判别器将发现很难将真实图像与人工图像区分开。 这两个模型相互对立,因此命名为对抗网络。 当判别器不再能够将真实图像与人工图像分离时,模型收敛。
GAN 训练遵循针对几个时期的判别器和生成器训练的替代模式,然后重复进行直到收敛为止。 在每个训练期间,其他组件保持固定,这意味着在训练发电机时,判别器保持固定,而在训练判别器时,发电机保持固定,以最大程度地减少发电机和判别器相互追逐的机会 。
GAN 训练遵循针对几个时期的判别器和生成器训练的替代模式,然后重复进行直到收敛为止。 在每个训练期间,其他组件保持固定,这意味着在训练生成器时,判别器保持固定,而在训练判别器时,生成器保持固定,以最大程度地减少生成器和判别器相互追逐的机会 。
前面的描述应该已经为您提供了 GAN 的高级理解。 但是,为了编码 GAN,我们需要更多地了解模型架构。 让我们开始吧。
# 发电机
# 生成器
下图显示了 DCGAN 的生成器网络的架构:
......@@ -120,7 +120,7 @@ GAN 训练遵循针对几个时期的判别器和生成器训练的替代模式
* 所有具有跨步但没有最大池化的卷积网络都允许该网络在生成器中学习自己的上采样。 注意,最大池化被跨步卷积代替。
* 第一层从判别器获得概率`P(z)`,通过矩阵乘法连接到下一个卷积层。 这意味着不使用正式的全连接层。 但是,网络可以达到其目的。
* 我们将批量归一化到所有层以重新调整输入,发电机生成器层除外,以提高学习的稳定性。
* 我们将批量归一化到所有层以重新调整输入,生成器生成器层除外,以提高学习的稳定性。
# 判别器
......@@ -148,7 +148,7 @@ GAN 训练遵循针对几个时期的判别器和生成器训练的替代模式
![](img/9758b0a7-7568-41b5-9db6-4714b6a25c86.png)
发电机接收到随机输入并且发电机损耗定义为其产生假输出的能力时,训练便开始了。 判别器损失定义为其将实际输出与伪输出分离的能力。 渐变用于更新生成器和判别器。 在训练过程中,同时对生成器和判别器进行训练。 训练过程通常只要我们需要同时训练两个模型即可。 请记住,两个模型是相互同步的。
生成器接收到随机输入并且生成器损耗定义为其产生假输出的能力时,训练便开始了。 判别器损失定义为其将实际输出与伪输出分离的能力。 渐变用于更新生成器和判别器。 在训练过程中,同时对生成器和判别器进行训练。 训练过程通常只要我们需要同时训练两个模型即可。 请记住,两个模型是相互同步的。
# 使用 DCGAN 修复图像
......
......@@ -448,7 +448,7 @@ PoseNet 基于 Google 的两篇论文。 一种使用自上而下的方法,而
预测关键点在两种方法之间或多或少是相同的,但是自上而下的方法从绘制边界框开始,而自下而上的方法执行语义分割。
# PoseNet 实
# PoseNet 实
到目前为止,我们已经讨论了 PoseNet 自上而下和自下而上方法背后的理论。 在本节中,我们将使用 PoseNet 识别这些操作。 有关如何实现 PoseNet 模型的详细信息,请参见[这里](https://github.com/tensorflow/tfjs-models/tree/master/posenet)。 查看此链接以了解 PoseNet 的文档。
......
# 第 4 节:在边缘和云端实 TensorFlow
# 第 4 节:在边缘和云端实 TensorFlow
在本部分中,您将使用到目前为止获得的所有计算机视觉和 CNN 知识,在边缘设备中打包,优化和部署模型,以解决现实生活中的计算机视觉问题。 在本地计算机上训练大型数据集需要花费时间,因此您将学习如何打包数据并上传到云中的容器,然后开始训练。 您还将看到如何克服一些常见的错误以完成训练并成功生成模型。
......
......@@ -12,7 +12,7 @@
* 了解 Dialogflow 控制台
* 在 Google 上创建您的第一个动作
* 在 Google 项目上创建操作
* Webhook
* Webhook
* 将 Webhook 部署到 Firebase 的云功能
* 在 Google 版本上创建动作
* 为会话应用程序创建 UI
......@@ -222,7 +222,7 @@ Google 平台上的操作为有兴趣构建聊天机器人的开发人员提供
现在,我们准备创建我们的业务逻辑,以便为用户生成幸运数字。 首先,我们将为`luckyNum`意图创建一个 Webhook,然后将其部署到 Firebase 的 Cloud Functions 中。
# 实 Webhook
# 实 Webhook
在本节中,我们将为`luckyNum`意图启用 webhook,并为`luckyNum`意图的逻辑准备 webhook 代码。 请按照以下步骤操作:
......@@ -306,7 +306,7 @@ exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
现在我们知道我们的聊天机器人可以正常工作,并且可以与 Google 上的 Action 集成在一起,让我们为其创建一个发行版:
1. 在 Google 控制台上的操作中单击“概述”,您将看到准备部署的提示。
2. Actions 测试控制台要求您输入一些 Action 所需的信息。 这些通常是简短和长格式的说明,开发人员的详细信息,隐私政策,操作条款和条件以及徽标。 成功填写所有内容后,单击“保存”。
2. Actions 测试控制台要求您输入一些 Action 所需的信息。 这些通常是简短和长格式的说明,开发人员的详细信息,隐私策略,操作条款和条件以及徽标。 成功填写所有内容后,单击“保存”。
3. 在“部署”类别下的左侧导航栏中单击“发布”,以打开“发布”页面。 在这里,选择`Alpha`发布选项,然后单击`Submit`发布。
部署将需要几个小时才能完成。 部署完成后,您将能够在已登录到内置 Action 的 Google 帐户的任何设备上测试您的操作。成功创建并部署 Dialogflow 代理后,我们现在将使用以下方法开发 Flutter 应用程序: 与代理进行交互的能力。 单屏应用程序将具有与任何基本的移动聊天应用程序非常相似的用户界面,带有一个用于输入消息的文本框,这些消息是 Dialogflow 代理的查询,还有一个将每个查询发送到代理的发送按钮。 该屏幕还将包含一个列表视图,以显示来自用户的所有查询和来自代理的响应。 另外,在“发送”按钮旁边将有一个麦克风选项,以便用户可以利用语音到文本功能将查询发送到代理。
......
......@@ -8,7 +8,7 @@
* 添加 Firebase 身份验证
* 了解用于身份验证的异常检测
* 用于验证用户的自定义模型
* ReCaptcha 以保护垃圾邮件
* ReCaptcha 以保护垃圾邮件
* 在 Flutter 中部署模型
# 技术要求
......@@ -828,7 +828,7 @@ python main.py
在下一节中,我们将看到如何将 ReCaptcha 集成到迄今为止在该项目中构建的应用程序中。 之后,我们将把本节中构建的 API 集成到应用程序中。
# 实 ReCaptcha 以保护垃圾邮件
# 实 ReCaptcha 以保护垃圾邮件
为了为 Firebase 身份验证增加另一层安全性,我们将使用 ReCaptcha。 这是 Google 所支持的一项测试,可帮助我们保护数据免受垃圾邮件和滥用行为的自动 bot 攻击。 该测试很简单,很容易被人类解决,但是却阻碍了漫游器和恶意用户的使用。
......
......@@ -508,7 +508,7 @@ python run.py train selfplay.txt model.h5 newmodel.h5 --epoch 3 --progress
最后,我们需要创建一个神经网络实现。
# 实神经网络
# 实神经网络
在最后一节中,我们将了解为代理进行训练而创建的神经网络。 我们将探索`util/nn.py`文件,该文件提供`NN`类以及以下重要方法:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册