提交 fc3175ee 编写于 作者: W wizardforcel

2021-01-05 23:10:40

上级 7c151a46
......@@ -6,7 +6,7 @@
正如我们在前几章中讨论的那样,众所周知,GAN 很难训练,并且易于崩溃。 模式损耗是一种情况,即使损失函数已经被优化,但发生器仍会产生看起来相同的输出。 在 MNIST 数字的情况下,模式折叠时,生成器可能只产生数字 4 和 9,因为看起来很相似。 **Wasserstein GAN****WGAN**)[2]解决了这些问题,认为只需替换基于 **Wasserstein** 的 GAN 损失函数就可以稳定的训练和避免模式崩溃,也称为**陆地移动距离****EMD**)。
但是,稳定性问题并不是 GAN 的唯一问题。 也越来越需要来提高所生成图像的感知质量。 **最小二乘 GAN****LSGAN**)[3]建议同时解决这两个问题。 基本前提是,在训练过程中,Sigmoid 交叉熵损失会导致梯度消失。 这导致较差的图像质量。 最小二乘损失不会导致梯度消失。 与香草 GAN 生成的图像相比,生成的生成图像具有更高的感知质量。
但是,稳定性问题并不是 GAN 的唯一问题。 也越来越需要来提高所生成图像的感知质量。 **最小二乘 GAN****LSGAN**)[3]建议同时解决这两个问题。 基本前提是,在训练过程中,Sigmoid 交叉熵损失会导致梯度消失。 这导致较差的图像质量。 最小二乘损失不会导致梯度消失。 与原始 GAN 生成的图像相比,生成的生成图像具有更高的感知质量。
在上一章中,CGAN 介绍了一种调节发电机输出的方法。 例如,如果要获取数字 8,则可以在生成器的输入中包含条件标签。 受 CGAN 的启发,**辅助分类器 GAN****ACGAN**)[4]提出了一种改进的条件算法,可产生更好的感知质量和输出多样性。
......
......@@ -44,7 +44,7 @@ StackedGAN 使用预训练的编码器或分类器,以帮助解开潜在代码
图 6.1.1:带有纠缠码的 GAN 及其随纠缠码和解缠码的变化。 此示例在名人脸生成的背景下显示
查看上图中的,似乎可以以与香草 GAN 相同的方式优化具有解缠表示的 GAN。 这是因为生成器的输出可以表示为:
查看上图中的,似乎可以以与原始 GAN 相同的方式优化具有解缠表示的 GAN。 这是因为生成器的输出可以表示为:
![](img/B14853_06_001.png) (Equation 6.1.1)
......
......@@ -140,7 +140,7 @@ CycleGAN 的总损失为:
CycleGAN 建议使用以下权重值![](img/B14853_07_023.png)和![](img/B14853_07_024.png),以更加重视循环一致性检查。
训练策略类似于香草 GAN。 “算法 7.1.1”总结了 CycleGAN 训练过程。
训练策略类似于原始 GAN。 “算法 7.1.1”总结了 CycleGAN 训练过程。
“算法 7.1.1”:CycleGAN 训练
......@@ -353,9 +353,9 @@ def build_generator(input_shape,
return generator
```
CycleGAN 的判别器类似于香草 GAN 判别器。 输入图像被下采样数次(在此示例中为 3 次)。 最后一层是`Dense`(1)层,它预测输入为实数的可能性。 除了不使用 IN 之外,每个层都类似于生成器的编码器层。 然而,在大图像中,用一个数字将图像计算为真实图像或伪图像会导致参数效率低下,并导致生成器的图像质量较差。
CycleGAN 的判别器类似于原始 GAN 判别器。 输入图像被下采样数次(在此示例中为 3 次)。 最后一层是`Dense`(1)层,它预测输入为实数的可能性。 除了不使用 IN 之外,每个层都类似于生成器的编码器层。 然而,在大图像中,用一个数字将图像计算为真实图像或伪图像会导致参数效率低下,并导致生成器的图像质量较差。
解决方案是使用 PatchGAN [6],该方法将图像划分为补丁网格,并使用标量值网格来预测补丁是真实概率。“图 7.1.11”显示了香草 GAN 判别器和`2 x 2` PatchGAN 判别器之间的比较:
解决方案是使用 PatchGAN [6],该方法将图像划分为补丁网格,并使用标量值网格来预测补丁是真实概率。“图 7.1.11”显示了原始 GAN 判别器和`2 x 2` PatchGAN 判别器之间的比较:
![](img/B14853_07_11.png)
......@@ -607,7 +607,7 @@ def build_cyclegan(shapes,
return g_source, g_target, d_source, d_target, adv
```
我们遵循训练过程,我们可以从上一节中的“算法 7.1.1”中调用。“列表 7.1.5”显示了 CycleGAN 训练。 此训练与香草 GAN 之间的次要区别是有两个要优化的判别器。 但是,只有一种对抗模型需要优化。 对于每 2,000 步,生成器将保存预测的源图像和目标图像。 我们将的批量大小设为 32。我们也尝试了 1 的批量大小,但是输出质量几乎相同,并且需要花费更长的时间进行训练(批量为每个图像 43 ms,在 NVIDIA GTX 1060 上批量大小为 32 时,最大大小为每个图像 1 vs 3.6 ms)
我们遵循训练过程,我们可以从上一节中的“算法 7.1.1”中调用。“列表 7.1.5”显示了 CycleGAN 训练。 此训练与原始 GAN 之间的次要区别是有两个要优化的判别器。 但是,只有一种对抗模型需要优化。 对于每 2,000 步,生成器将保存预测的源图像和目标图像。 我们将的批量大小设为 32。我们也尝试了 1 的批量大小,但是输出质量几乎相同,并且需要花费更长的时间进行训练(批量为每个图像 43 ms,在 NVIDIA GTX 1060 上批量大小为 32 时,最大大小为每个图像 1 vs 3.6 ms)
“列表 7.1.5”:`cyclegan-7.1.1.py`
......@@ -740,7 +740,7 @@ def train_cyclegan(models,
最后,在使用 CycleGAN 构建和训练功能之前,我们必须执行一些数据准备。 模块`cifar10_utils.py``other_ utils.py`加载`CIFAR10`训练和测试数据。 有关这两个文件的详细信息,请参考源代码。 加载后,将训练图像和测试图像转换为灰度,以生成源数据和测试源数据。
“列表 7.1.6”显示了 CycleGAN 如何用于构建和训练用于灰度图像着色的生成器网络(`g_target`)。 由于 CycleGAN 是对称的,因此我们还构建并训练了第二个生成器网络(`g_source`),该网络可以将颜色转换为灰度。 训练了两个 CycleGAN 着色网络。 第一种使用标量输出类似于香草 GAN 的判别器,第二种使用`2 x 2` PatchGAN。
“列表 7.1.6”显示了 CycleGAN 如何用于构建和训练用于灰度图像着色的生成器网络(`g_target`)。 由于 CycleGAN 是对称的,因此我们还构建并训练了第二个生成器网络(`g_source`),该网络可以将颜色转换为灰度。 训练了两个 CycleGAN 着色网络。 第一种使用标量输出类似于原始 GAN 的判别器,第二种使用`2 x 2` PatchGAN。
“列表 7.1.6”:`cyclegan-7.1.1.py`
......@@ -816,7 +816,7 @@ def graycifar10_cross_colorcifar10(g_models=None):
![](img/B14853_07_13.png)
图 7.1.13:使用不同技术进行着色。 显示的是基本事实,使用自编码器的着色(第 3 章,自编码器),使用带有香草 GAN 判别器的 CycleGAN 进行着色,以及使用带有 PatchGAN 判别器的 CycleGAN 进行着色。 彩色效果最佳。 原始彩色照片可以在该书的 [GitHub 存储库](https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras/blob/master/chapter7-cross-domain-gan/README.md)中找到。
图 7.1.13:使用不同技术进行着色。 显示的是基本事实,使用自编码器的着色(第 3 章,自编码器),使用带有原始 GAN 判别器的 CycleGAN 进行着色,以及使用带有 PatchGAN 判别器的 CycleGAN 进行着色。 彩色效果最佳。 原始彩色照片可以在该书的 [GitHub 存储库](https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras/blob/master/chapter7-cross-domain-gan/README.md)中找到。
为了进行比较,我们使用第 3 章,“自编码器”中描述的普通自编码器显示了地面真实情况和着色结果。 通常,所有彩色图像在感觉上都是可接受的。 总体而言,似乎每种着色技术都有自己的优点和缺点。 所有着色方法与天空和车辆的正确颜色不一致。
......
......@@ -22,9 +22,9 @@
“第 5 章”,“移动神经网络和 CNN”讨论了用于在实时应用中进行 CNN 工作的移动神经网络的需求。 我们还将讨论 Google 推出的两种基准 MobileNet 架构-MobileNet 和 MobileNetV2。 稍后,我们将讨论 MobileNet 与对象检测网络(例如 SSD)的成功组合,以在移动设备上实现对象检测。
“第 6 章”,“循环神经网络”解释了最重要的深度学习模型之一,循环神经网络(RNN),其架构以及 RNN 的进化路径。 稍后,我们将讨论按递归层分类的各种架构,包括香草 RNN,LSTM,GRU 和双向 RNN,并应用香草架构来编写我们自己的《战争与和平》(毫无意义)。 我们还将介绍双向架构,该架构允许模型保留序列的过去和将来上下文中的信息。
“第 6 章”,“循环神经网络”解释了最重要的深度学习模型之一,循环神经网络(RNN),其架构以及 RNN 的进化路径。 稍后,我们将讨论按递归层分类的各种架构,包括原始 RNN,LSTM,GRU 和双向 RNN,并应用原始架构来编写我们自己的《战争与和平》(毫无意义)。 我们还将介绍双向架构,该架构允许模型保留序列的过去和将来上下文中的信息。
“第 7 章”,“生成对抗网络”解释了最有趣的深度学习模型之一,生成对抗网络(GANs)及其演化路径。 我们还将以图像生成为例来说明各种 GAN 架构。 我们还将探索四种 GAN 架构,包括香草 GAN,深度卷积 GAN,条件 GAN 和信息最大化 GAN。
“第 7 章”,“生成对抗网络”解释了最有趣的深度学习模型之一,生成对抗网络(GANs)及其演化路径。 我们还将以图像生成为例来说明各种 GAN 架构。 我们还将探索四种 GAN 架构,包括原始 GAN,深度卷积 GAN,条件 GAN 和信息最大化 GAN。
“第 8 章”,“深度学习的新趋势”讨论了一些我们已经发现今年有影响力并且在未来会更加突出的深度学习思想。 我们还将学习贝叶斯深度学习结合了贝叶斯学习和深度学习的优点。
......
......@@ -97,7 +97,7 @@ DFN 中存在的权重值负责进行预测。 任何深度网络都具有如此
梯度或斜率是`y`轴值相对于`x`轴的变化率。 在函数的任何一点上,通过计算该函数相对于`x`的导数即可获得梯度。
这个想法是在初始点计算成本函数的梯度,然后以减小梯度直到其变为零(这将是最小值)的方式更新权重。 这就是为什么将该方法称为**梯度下降**的原因。 那么,权重如何更新? 梯度下降的不同变化使用不同的策略来更新权重。 梯度下降主要有三种类型:批量梯度下降(香草梯度下降),随机梯度下降和小批量梯度下降。
这个想法是在初始点计算成本函数的梯度,然后以减小梯度直到其变为零(这将是最小值)的方式更新权重。 这就是为什么将该方法称为**梯度下降**的原因。 那么,权重如何更新? 梯度下降的不同变化使用不同的策略来更新权重。 梯度下降主要有三种类型:批量梯度下降(原始梯度下降),随机梯度下降和小批量梯度下降。
# 梯度下降的类型
......
......@@ -15,7 +15,7 @@ RBM 通过尝试重建输入数据来找到输入的潜在表示。 在本章中
* DBN 用于图像分类
* 什么是自编码器?
* 自编码器的发展路径
* 香草自编码器
* 原始自编码器
* 深度自编码器
* 稀疏的汽车编码器
* 去噪自编码器
......@@ -759,11 +759,11 @@ I.Goodfellow 等开发了**稀疏自编码器**,它通过引入稀疏约束来
# 自编码器架构和应用
我们将从基本的香草 AE 开始,然后是深度版本,然后是稀疏自编码器,去噪自编码器,然后使用收缩自编码器结束。
我们将从基本的原始 AE 开始,然后是深度版本,然后是稀疏自编码器,去噪自编码器,然后使用收缩自编码器结束。
在整个部分中,我们将以信用卡欺诈数据集为例,演示如何应用各种架构的自编码器。
# 香草自编码器
# 原始自编码器
这是最基本的三层架构,非常适合于开始实施自编码器。 让我们准备数据集。 我们正在使用的数据集来自 Kaggle 竞赛,可以从[这个页面](https://www.kaggle.com/mlg-ulb/creditcardfraud)中的`Data`页面下载。 每行包含 31 个字段,如下所示:
......@@ -825,7 +825,7 @@ Number of normal samples: 284315
>>> Y_test = data_test['Class']
```
现在可以使用这些数据了。 现在是时候在 Keras 中构建香草自编码器了。 现在,让我们开始导入必要的模块,如下所示:
现在可以使用这些数据了。 现在是时候在 Keras 中构建原始自编码器了。 现在,让我们开始导入必要的模块,如下所示:
```py
>>> from keras.models import Model
......@@ -1076,7 +1076,7 @@ Epoch 50/50
Epoch 00050: loss did not improve from 0.00003
```
同样,我们通过精确调用曲线下的面积来测量性能,这次完成了`0.83`,这比香草版本略好:
同样,我们通过精确调用曲线下的面积来测量性能,这次完成了`0.83`,这比原始版本略好:
```py
>>> print('Area under precision-recall curve:', area)
......@@ -1198,7 +1198,7 @@ DAE 通常用于神经网络预训练,其中提取的鲁棒表示形式用作
![](img/3819616b-4468-43f3-b392-72d7523ae417.png)
我们在上一节中定义的香草自编码器的顶部添加压缩项,如下所示:
我们在上一节中定义的原始自编码器的顶部添加压缩项,如下所示:
```py
>>> hidden_size = 40
......@@ -1252,14 +1252,14 @@ Epoch 30/30
Epoch 00030: loss did not improve from 0.00037
```
该模型以`0.83`的精确召回曲线下的面积胜过香草模型:
该模型以`0.83`的精确召回曲线下的面积胜过原始模型:
```py
>>> print('Area under precision-recall curve:', area)
Area under precision-recall curve: 0.8311662962345293
```
到目前为止,我们已经研究了五种不同类型的自编码器,包括基本的香草编码,深度编码,稀疏编码,去噪编码和收缩编码。 每种类型的自编码器的特长来自某些架构或不同形式的强制约束。 尽管架构或处罚有所不同,但它们具有相同的目标,即学习更强大的表示形式。
到目前为止,我们已经研究了五种不同类型的自编码器,包括基本的原始编码,深度编码,稀疏编码,去噪编码和收缩编码。 每种类型的自编码器的特长来自某些架构或不同形式的强制约束。 尽管架构或处罚有所不同,但它们具有相同的目标,即学习更强大的表示形式。
# 概要
......
......@@ -2,15 +2,15 @@
在本章中,我们将解释最重要的深度学习模型之一,即**循环神经网络****RNNs**)。 我们将首先回顾什么是 RNN,以及为什么它们非常适合处理顺序数据。 在简要介绍了 RNN 模型的发展路径之后,我们将说明根据不同形式的输入和输出数据以及工业示例进行分类的各种 RNN 架构。 我们将找出问题的答案,例如“我们如何仅生成一个输出?”,“输出可以是序列吗?”,和“仅对一个输入有效吗 元件?”。
接下来,我们将讨论按递归层分类的几种架构。 首先,我们将应用基本的 RNN 架构来编写我们自己的《战争与和平》。 具有香草架构的 RNN 不能很好地保存长期依赖的信息。 为了解决这个问题,我们将学习*内存增强型*架构,包括长短期内存和门控循环单元。 我们还将在股票价格预测中采用门控架构。 最后,由于对捕获过去的信息不满意,我们将引入一种双向架构,该架构允许该模型从序列的过去和将来上下文中保留信息。 具有 LSTM 的双向模型将用于对电影评论的情感进行分类。
接下来,我们将讨论按递归层分类的几种架构。 首先,我们将应用基本的 RNN 架构来编写我们自己的《战争与和平》。 具有原始架构的 RNN 不能很好地保存长期依赖的信息。 为了解决这个问题,我们将学习*内存增强型*架构,包括长短期内存和门控循环单元。 我们还将在股票价格预测中采用门控架构。 最后,由于对捕获过去的信息不满意,我们将引入一种双向架构,该架构允许该模型从序列的过去和将来上下文中保留信息。 具有 LSTM 的双向模型将用于对电影评论的情感进行分类。
在本章中,我们将介绍以下主题:
* 什么是 RNN?
* RNN 的演进路径
* RNN 架构按输入和输出(一对多,多对一,同步和不同步的多对多)
* 香草 RNN 架构
* 用于文本生成的 Vanilla RNN
* 原始 RNN 架构
* 用于文本生成的原始 RNN
* 长期记忆
* 用于文本生成的 LSTM RNN
* 门控循环单元
......@@ -26,7 +26,7 @@
如上图所示,来自先前时间点的数据进入了当前时间点的训练。 循环架构使模型可以很好地与时间序列(例如产品销售,股票价格)或顺序输入(例如文章中的单词-DNA 序列)配合使用。
假设我们在传统的神经网络中有一些输入![](img/89abe3fc-669d-415f-b6be-dc388be531b0.png)(其中 t 代表时间步长或顺序顺序),如下图所示。 假设不同 t 处的输入彼此独立。 可以将任何时间的网络输出写为![](img/ab8c4ddc-5802-427a-b1ba-688f8c0f8fa0.png),如下所示:
假设我们在传统的神经网络中有一些输入![](img/89abe3fc-669d-415f-b6be-dc388be531b0.png)(其中`t`代表时间步长或顺序顺序),如下图所示。 假设不同`t`处的输入彼此独立。 可以将任何时间的网络输出写为![](img/ab8c4ddc-5802-427a-b1ba-688f8c0f8fa0.png),如下所示:
![](img/b84d3a24-c102-4c42-ad72-7ad5a000340f.png)
......@@ -54,7 +54,7 @@ RNN 实际上具有悠久的历史,最早是在 1980 年代开发的。 霍普
# RNN 架构和应用
RNN 可以分为*多对一**一对多**多对多*(同步)和*多对多*(基于它们的输入和输出)。 从隐藏层的角度来看,最常用的 RNN 架构包括基本的香草 RNN 和双向的 LSTM 和 GRU。 我们将专注于 RNN 的这四种架构,并将首先通过输入和输出简要提及这四个类别。
RNN 可以分为*多对一**一对多**多对多*(同步)和*多对多*(基于它们的输入和输出)。 从隐藏层的角度来看,最常用的 RNN 架构包括基本的原始 RNN 和双向的 LSTM 和 GRU。 我们将专注于 RNN 的这四种架构,并将首先通过输入和输出简要提及这四个类别。
# 按输入和输出的架构
......@@ -84,9 +84,9 @@ RNN 可以分为*多对一*,*一对多*,*多对多*(同步)和*多对多
到目前为止,我们已经通过模型输入和输出了解了四种 RNN 架构,我们将在本章的其余部分的实际示例中结合其中的一些,我们将主要讨论隐藏层中的架构,更具体地说,是 循环层。
让我们从香草 RNN 开始,这是循环架构的最基本形式。
让我们从原始 RNN 开始,这是循环架构的最基本形式。
# 香草神经网络
# 原始神经网络
标注了权重且展开后的版本的基本 RNN 模型如下所示:
......@@ -105,7 +105,7 @@ RNN 可以分为*多对一*,*一对多*,*多对多*(同步)和*多对多
与传统的神经网络类似,所有的权重`U``V``W`均使用反向传播算法进行训练。 但是不同之处在于,在当前时间`t`上,我们需要计算除当前时间之外的所有先前`t`-1 个时间步的损耗。 这是因为权重由所有时间步共享,并且一个时间步的输出间接依赖于所有先前的时间步,例如权重的梯度。 例如,如果要计算时间步`t = 5`的梯度,则需要向后传播前四个时间步,并对五个时间步的梯度求和。 这种特殊的反向传播算法称为**时间上的反向传播(BPTT)**
从理论上讲,RNN 可以从输入序列的开头捕获信息,从而增强了时间序列或序列建模的预测能力。 但是,由于梯度梯度消失,香草 RNN 并非如此。 我们将在后面对此进行详细说明,并将了解专门设计用于解决此问题的其他架构,例如 LSTM 和 GRU。 但是现在,让我们假设香草 RNN 在许多情况下都能正常工作,并且获得了一些实践经验,因为它们是任何 RNN 的基本组成部分。
从理论上讲,RNN 可以从输入序列的开头捕获信息,从而增强了时间序列或序列建模的预测能力。 但是,由于梯度梯度消失,原始 RNN 并非如此。 我们将在后面对此进行详细说明,并将了解专门设计用于解决此问题的其他架构,例如 LSTM 和 GRU。 但是现在,让我们假设原始 RNN 在许多情况下都能正常工作,并且获得了一些实践经验,因为它们是任何 RNN 的基本组成部分。
# 用于文本生成的 Vanilla RNN
......@@ -216,7 +216,7 @@ Total vocabulary (unique characters): 57
(31962, 100, 57)
```
同样,每个样本都由一键编码字符的`100`元素组成。 我们终于准备好了训练数据集,现在是时候构建我们​​的香草 RNN 模型了。 让我们训练一个具有两个循环层的模型,如下所示:
同样,每个样本都由一键编码字符的`100`元素组成。 我们终于准备好了训练数据集,现在是时候构建我们​​的原始 RNN 模型了。 让我们训练一个具有两个循环层的模型,如下所示:
![](img/c2e8a6c3-2717-45e3-80e3-8cf434b83e6a.png)
......@@ -420,11 +420,11 @@ which was a strange and serious expression of his face and shouting and said tha
```
我们的《战争与和平》读起来不错,尽管有点荒谬。 通过调整此香草 RNN 模型的超参数,我们可以做得更好吗? 绝对可以,但这是不值得的。 正如我们前面提到的,训练一个普通的 RNN 模型来解决需要学习长期依赖关系的问题非常困难-距离较远的步骤之间的依赖关系通常对于预测至关重要。 但是,由于梯度消失的问题,香草 RNN 仅能够捕获序列中几个早期步骤之间的时间依赖性。 LSTM 和 GRU 之类的架构是专门为解决此问题而设计的。 我们将在以下两个部分中说明它们如何随着时间的推移在内存中维护信息。
我们的《战争与和平》读起来不错,尽管有点荒谬。 通过调整此原始 RNN 模型的超参数,我们可以做得更好吗? 绝对可以,但这是不值得的。 正如我们前面提到的,训练一个普通的 RNN 模型来解决需要学习长期依赖关系的问题非常困难-距离较远的步骤之间的依赖关系通常对于预测至关重要。 但是,由于梯度消失的问题,原始 RNN 仅能够捕获序列中几个早期步骤之间的时间依赖性。 LSTM 和 GRU 之类的架构是专门为解决此问题而设计的。 我们将在以下两个部分中说明它们如何随着时间的推移在内存中维护信息。
# LSTM RNN
LSTM 的架构的神奇之处在于:在普通循环单元的顶部,增加了一个存储单元和三个信息门以处理长期依赖关系。 LSTM 的递归细胞如下所示(我们还提出了一种香草用于比较):
LSTM 的架构的神奇之处在于:在普通循环单元的顶部,增加了一个存储单元和三个信息门以处理长期依赖关系。 LSTM 的递归细胞如下所示(我们还提出了一种原始用于比较):
![](img/15d95e65-9990-4206-ba91-a6f18891d73f.png)
......@@ -433,7 +433,7 @@ LSTM 的架构的神奇之处在于:在普通循环单元的顶部,增加了
* ![](img/d2eddb1c-c3ef-49c6-810f-28dc26e845eb.png)**存储单元**,它从输入序列的最开始就存储上下文。
* `f`表示**遗忘门**,它控制来自前一存储状态![](img/ae610622-83d8-4566-a185-a21c8466adb2.png)的多少信息可以向前传递。 与遗忘门相关的权重包括`W[f]`,它与先前的隐藏状态`S[t-1]`连接,和`u[f]`,它与当前输入`x[t]`连接。
* `i`代表**输入门**,它确定当前输入可以通过多少信息。 权重![](img/8cd433d7-2c2f-4642-a2e8-7ddf1183a5dc.png)和![](img/148eead3-586f-48da-aa64-d1a420cf60a2.png)分别将其与先前的隐藏状态和当前输入相连。
* **tanh** 只是隐藏状态的激活函数,并且基于当前输入![](img/a1163f30-f030-4a68-bef6-f1dc1e0af040.png)和先前的隐藏状态![](img/c3fdb075-55bf-414d-87a6-7ab49d707585.png)及其相应的权重![](img/385579ed-f3c0-4acd-9235-470929e0ad56.png)和![](img/55810aa2-f8f7-4e8f-a33a-ed7b829e01c1.png)进行计算。 它与香草 RNN 中的“ a”完全相同。
* **tanh** 只是隐藏状态的激活函数,并且基于当前输入![](img/a1163f30-f030-4a68-bef6-f1dc1e0af040.png)和先前的隐藏状态![](img/c3fdb075-55bf-414d-87a6-7ab49d707585.png)及其相应的权重![](img/385579ed-f3c0-4acd-9235-470929e0ad56.png)和![](img/55810aa2-f8f7-4e8f-a33a-ed7b829e01c1.png)进行计算。 它与原始 RNN 中的“ a”完全相同。
* `o`用作**输出门**,它定义了将内部存储器中的多少信息用作整个循环单元的输出。 同样,![](img/6f080896-cb2d-48a6-8b99-1f850b583c7f.png)和![](img/9c6a729e-ea1c-44e8-b39d-4a42a525aa43.png)是关联的权重。
因此,这些组件之间的关系可以概括如下:
......@@ -445,13 +445,13 @@ LSTM 的架构的神奇之处在于:在普通循环单元的顶部,增加了
* 在时间步`t`处的存储单元![](img/1fb2797f-7135-4aba-beb0-9fcea0fe85fb.png)由![](img/01cf9cf7-8de2-40fc-960e-ce2e0d9d4936.png)更新,其中`.*`表示逐元素乘法。 值得注意的是,`f``i`中的 Sigmoid函数将其输出转换为从`0``1`的范围,从而控制比例 分别通过的先前存储器![](img/ad6a46d8-ac93-42e3-96bf-e6fe22a527b2.png)和当前存储器输入![](img/4cdd81a2-72c9-43c4-b602-f9c112dc22b9.png)的数据。
* 最后,在时间步`t`的隐藏状态![](img/c4c7aecc-d631-4158-82cd-b718759d5e5d.png)被更新为![](img/4f00cc4c-ed31-48a5-932b-9590c070e0dd.png)。 同样,`o`确定用作整个单元输出的更新存储单元![](img/8a8220aa-1249-47c5-a5a9-481a95a274e2.png)的比例。
使用随时间的反向传播训练所有四组权重`U``W`,这与香草 RNN 相同。 通过学习三个信息门的权重,网络显式地对长期依赖关系进行建模。 接下来,我们将利用 LSTM 架构并发明更强大的文本生成器。
使用随时间的反向传播训练所有四组权重`U``W`,这与原始 RNN 相同。 通过学习三个信息门的权重,网络显式地对长期依赖关系进行建模。 接下来,我们将利用 LSTM 架构并发明更强大的文本生成器。
# 用于文本生成的 LSTM RNN
在基于 LSTM 的文本生成器中,我们将序列长度增加到 160 个字符,因为它可以更好地处理长序列。 记住要用新的`seq_length` = 160 重新生成训练集`X``Y`
为了轻松地将该模型的性能与以前的香草模型进行比较,我们将保留一个相似的结构-两个循环层,两个循环层均包含`800`单元,`0.4`的丢弃率和 *tanh* (默认情况下)作为激活功能:
为了轻松地将该模型的性能与以前的原始模型进行比较,我们将保留一个相似的结构-两个循环层,两个循环层均包含`800`单元,`0.4`的丢弃率和 *tanh* (默认情况下)作为激活功能:
```py
>>> from keras.layers.recurrent import LSTM
......@@ -501,7 +501,7 @@ LSTM 的架构的神奇之处在于:在普通循环单元的顶部,增加了
_________________________________________________________________
```
有 800 万个参数需要训练,几乎是香草模型中训练参数的四倍。 让我们开始训练他们:
有 800 万个参数需要训练,几乎是原始模型中训练参数的四倍。 让我们开始训练他们:
```py
>>> model.fit(X, Y, batch_size=batch_size, verbose=1, epochs=n_epoch,
......@@ -932,6 +932,6 @@ Epoch 00018: early stopping
我们刚刚完成了关于 DL 架构-RNN 的学习旅程的重要部分! 在本章中,我们更加熟悉了 RNN 及其变体。 我们从 RNN 是什么,RNN 的发展路径以及它们如何成为顺序建模的最新解决方案入手。 我们还研究了四种 RNN 架构,并按输入和输出数据的形式进行了分类,并提供了一些工业示例。
接下来,我们讨论按递归层分类的各种架构,包括原始 RNN,LSTM,GRU 和双向 RNN。 首先,我们应用了香草架构来编写我们自己的《战争与和平》 ,尽管有点荒谬。 我们通过使用 LSTM 架构 RNN 生成了更好的版本。 股票价格预测中采用了另一种内存增强型架构 GRU。
接下来,我们讨论按递归层分类的各种架构,包括原始 RNN,LSTM,GRU 和双向 RNN。 首先,我们应用了原始架构来编写我们自己的《战争与和平》 ,尽管有点荒谬。 我们通过使用 LSTM 架构 RNN 生成了更好的版本。 股票价格预测中采用了另一种内存增强型架构 GRU。
最后,除了过去的信息外,我们还引入了双向架构,该模型允许模型保留序列的过去和将来上下文中的信息。 我们还使用双向 RNN 和 LSTM 进行电影评论情感分类。 在下一章中,我们将探讨 DL 模型的另一项伟大发明:生成对抗网络。
\ No newline at end of file
......@@ -12,8 +12,8 @@ GAN 在合成图像,声波,视频和任何其他信号方面几乎具有相
* 生成模型
* 对抗训练
* GAN 的演进路径
* 香草 GAN 建筑
* 实施香草 GAN
* 原始 GAN 建筑
* 实施原始 GAN
* 产生影像
* 深度卷积 GAN 架构
* 实施深度卷积 GAN
......@@ -73,19 +73,19 @@ GAN 采取的步骤如下:
Li 等人(提出动物行为推断的同一作者)在《图灵学习:一种无度量的行为推断方法及其在群体中的应用》中于 2016 年提出了**图灵学习** 一词。 图灵学习与图灵测试相关,并且是 GAN 的概括,如《概括 GAN:图灵的视角》中所总结。 在图灵学习中,模型不仅限于 GAN 或神经网络; 判别器会影响发生器的输入,在图灵测试中充当询问器。
提出的第一个 GAN 由用于发生器和判别器的全连接层组成。 自从香草架构以来,已经开发了许多新的创新方法,例如,深度卷积 GAN,条件 GAN 和信息最大化的 GAN。 在下一节中,我们将详细研究这些架构,并从头开始实现每个架构。
提出的第一个 GAN 由用于发生器和判别器的全连接层组成。 自从原始架构以来,已经开发了许多新的创新方法,例如,深度卷积 GAN,条件 GAN 和信息最大化的 GAN。 在下一节中,我们将详细研究这些架构,并从头开始实现每个架构。
# GAN 架构和实现
如所承诺的,我们将仔细研究我们在前几节中详细提到的 GAN 的变体,并将其应用于实际问题。 最常用的 GAN 包括深度卷积 GAN,条件 GAN 和信息最大化 GAN。 让我们从最基本的架构开始。
# 香草甘氨酸
# 原始甘氨酸
在最基本的 GAN 模型中,生成器和判别器都是全连接神经网络。 香草 GAN 的架构可以描述如下:
在最基本的 GAN 模型中,生成器和判别器都是全连接神经网络。 原始 GAN 的架构可以描述如下:
![](img/df219698-e593-49cf-94e6-07bc0d8639e4.png)
生成器的输入是来自特定分布的随机样本,我们通常将其称为**噪声****潜在变量**。 第二层和后面的几层是隐藏层,在这种情况下,它们是全连接层。 隐藏层通常比其先前的隐藏层具有更多的单元。 输出层的大小与预期的生成大小相同,与实际数据的大小相同。 对于判别器,其输入是真实或生成的数据,其后是一个或多个隐藏层,以及一个单元的输出层。 每个隐藏层通常比其先前的隐藏层具有更少的单元。 通常,生成器和判别器具有相同数量的隐藏层。 而且,两组隐藏层通常是对称的。 例如,香草 GAN 的生成器和判别器如下所示:
生成器的输入是来自特定分布的随机样本,我们通常将其称为**噪声****潜在变量**。 第二层和后面的几层是隐藏层,在这种情况下,它们是全连接层。 隐藏层通常比其先前的隐藏层具有更多的单元。 输出层的大小与预期的生成大小相同,与实际数据的大小相同。 对于判别器,其输入是真实或生成的数据,其后是一个或多个隐藏层,以及一个单元的输出层。 每个隐藏层通常比其先前的隐藏层具有更少的单元。 通常,生成器和判别器具有相同数量的隐藏层。 而且,两组隐藏层通常是对称的。 例如,原始 GAN 的生成器和判别器如下所示:
![](img/90f1c978-7819-4873-954b-7fae6c1d984f.png)
......@@ -106,7 +106,7 @@ Li 等人(提出动物行为推断的同一作者)在《图灵学习:一
... return train_data
```
该功能读取并合并原始训练和测试集(不包括标签),因为在香草模型中不需要它们。 它还将数据从[0,255]到[-1,1]的范围重新缩放,这是神经网络模型预处理的非常重要的一部分,并且还将单个样本重塑为一维样本。
该功能读取并合并原始训练和测试集(不包括标签),因为在原始模型中不需要它们。 它还将数据从[0,255]到[-1,1]的范围重新缩放,这是神经网络模型预处理的非常重要的一部分,并且还将单个样本重塑为一维样本。
调用此函数并检查已加载数据的大小:
......@@ -144,7 +144,7 @@ Training dataset shape: (70000, 784)
在评估我们生成的图像的真实性时,您将需要稍后返回这些图像。
现在,让我们开始构建 GAN 模型。 首先,我们为全连接层定义包装函数,因为它在香草 GAN 中最常使用:
现在,让我们开始构建 GAN 模型。 首先,我们为全连接层定义包装函数,因为它在原始 GAN 中最常使用:
```py
>>> def dense(x, n_outputs, activation=None):
......@@ -342,7 +342,7 @@ tensorboard --logdir=logdir/
![](img/1950104d-2ab2-45f4-af38-9b70e8fd86ba.png)
您可能会注意到,有些数字看起来很奇怪。 在全连接香草模型的基础上,我们可以做哪些改进? 对于计算机视觉,使用卷积层可能是最直观的方法。
您可能会注意到,有些数字看起来很奇怪。 在全连接原始模型的基础上,我们可以做哪些改进? 对于计算机视觉,使用卷积层可能是最直观的方法。
# 深度卷积 GAN
......@@ -527,7 +527,7 @@ TensorBoard 中显示的学习图如下所示:
![](img/bcd453db-4e4f-44d0-9ec4-dc73084e1e71.png)
到目前为止,就我们无法控制要产生的 0 到 9 而言,我们生成的数字是相当随机的。 这是因为香草 GAN 和 DCGAN 中的生成器仅吸收随机噪声,只要结果看起来是真实的,就不再限制生成什么。 我们将看到条件 GAN 和 infoGAN 如何启用此功能。
到目前为止,就我们无法控制要产生的 0 到 9 而言,我们生成的数字是相当随机的。 这是因为原始 GAN 和 DCGAN 中的生成器仅吸收随机噪声,只要结果看起来是真实的,就不再限制生成什么。 我们将看到条件 GAN 和 infoGAN 如何启用此功能。
# 条件 GAN
......@@ -657,7 +657,7 @@ TensorBoard 中显示的学习图如下所示:
... sample_y[i, j] = 1
```
训练部分之前的其余代码与香草 GAN 模型中的代码相同。
训练部分之前的其余代码与原始 GAN 模型中的代码相同。
准备好所有组件之后,我们就可以开始训练 CGAN 模型了:
......@@ -935,6 +935,6 @@ CGAN 认为条件变量是已知的。 因此,在训练期间将条件变量
# 概要
我们刚刚完成了有关深度学习架构 GAN 的学习旅程的重要部分! 在本章中,我们更加熟悉 GAN 及其变体。 我们从 GAN 入手。 GAN 的演进路径; 以及它们如何在数据合成(例如图像生成,音频和视频生成)中如此流行。 我们还研究了四种 GAN 架构,即香草 GAN,深度卷积 GAN,条件 GAN 和信息最大化的 GAN。 我们从头开始实现了每个 GAN 模型,并使用它们来生成看起来是真实的数字图像。
我们刚刚完成了有关深度学习架构 GAN 的学习旅程的重要部分! 在本章中,我们更加熟悉 GAN 及其变体。 我们从 GAN 入手。 GAN 的演进路径; 以及它们如何在数据合成(例如图像生成,音频和视频生成)中如此流行。 我们还研究了四种 GAN 架构,即原始 GAN,深度卷积 GAN,条件 GAN 和信息最大化的 GAN。 我们从头开始实现了每个 GAN 模型,并使用它们来生成看起来是真实的数字图像。
GAN 是近几年来深度学习的一项伟大发明。 在下一章中,我们将讨论深度学习的其他最新进展,包括**贝叶斯神经网络****胶囊网络****元学习**
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册