提交 a396722f 编写于 作者: W wizardforcel

2020-09-06 17:35:36

上级 984e2670
# 深度学习的基础
欢迎使用*深度学习快速参考*! 在本书中,我将尝试使需要解决深度学习问题的数据科学家,机器学习工程师和软件工程师更容易使用,实用和使用深度学习技术。 如果您想训练自己的深度神经网络并且陷入困境,那么本指南很有可能会有所帮助。
欢迎使用《深度学习快速参考》! 在本书中,我将尝试使需要解决深度学习问题的数据科学家,机器学习工程师和软件工程师更容易使用,实用和使用深度学习技术。 如果您想训练自己的深度神经网络并且陷入困境,那么本指南很有可能会有所帮助。
本书动手了,旨在作为实用指南,可以帮助您快速解决问题。 它主要供需要使用深度学习解决问题的经验丰富的机器学习工程师和数据科学家使用。 除了本章(其中提供了一些我们将要开始使用的术语,框架和背景知识)之外,它并不意味着要按顺序阅读。 每章均包含一个实际示例,并附有代码,一些最佳实践和安全选择。 我们希望您能跳到所需的章节并开始使用。
......@@ -21,21 +21,21 @@
# 神经元
神经元是神经网络的原子单位。 有时这是受到生物学启发的。 但是,这是另一本书的主题。 神经元通常排列成层。 在本书中,如果我指的是特定的神经元,则将使用符号![](img/c1765cf8-ce94-4e0a-87ce-d73b19bf41e5.png),其中 *l* 是神经元所在的层, *k* 是神经元编号 。 由于我们将使用遵循第 0 个表示法的编程语言,因此我的表示法也将基于第 0 个表示法。
神经元是神经网络的原子单位。 有时这是受到生物学启发的。 但是,这是另一本书的主题。 神经元通常排列成层。 在本书中,如果我指的是特定的神经元,则将使用符号![](img/c1765cf8-ce94-4e0a-87ce-d73b19bf41e5.png),其中`l`是神经元所在的层, `k`是神经元编号 。 由于我们将使用遵循第 0 个表示法的编程语言,因此我的表示法也将基于第 0 个表示法。
大多数神经元的核心是两个共同起作用的功能:线性功能和激活功能。 让我们从较高的角度看一下这两个组成部分。
# 神经元线性函数
神经元的第一部分是线性函数,其输出是输入的总和,每个输入乘以一个系数。 这个函数实际上或多或少是线性回归。 这些系数通常在神经网络中称为权重。 例如,给定某些神经元,其输入特征为 *x1**x2**x3* ,输出 *z* ,则此线性分量或 神经元线性函数将简单地为:
神经元的第一部分是线性函数,其输出是输入的总和,每个输入乘以一个系数。 这个函数实际上或多或少是线性回归。 这些系数通常在神经网络中称为权重。 例如,给定某些神经元,其输入特征为`x1``x2``x3`,输出`z`,则此线性分量或 神经元线性函数将简单地为:
![](img/4e5e3493-b790-47cc-84f3-a0be62d76138.png)
在给定数据的情况下,![](img/2df1b0c3-91f5-4a39-80c2-ca92b5c36e15.png)是权重或系数, *b* 是偏差项。
在给定数据的情况下,![](img/2df1b0c3-91f5-4a39-80c2-ca92b5c36e15.png)是权重或系数,`b`是偏差项。
# 神经元激活功能
神经元的第二个功能是激活函数,其任务是在神经元之间引入非线性。 乙状结肠激活是一种常用的激活,您可能会通过逻辑回归来熟悉它。 它将神经元的输出压缩到输出空间,其中 *z* 的非常大的值被驱动为 1,而 *z* 的非常小的值被驱动为 0。
神经元的第二个功能是激活函数,其任务是在神经元之间引入非线性。 乙状结肠激活是一种常用的激活,您可能会通过逻辑回归来熟悉它。 它将神经元的输出压缩到输出空间,其中`z`的非常大的值被驱动为 1,而`z`的非常小的值被驱动为 0。
sigmoid 函数如下所示:
......@@ -43,7 +43,7 @@ sigmoid 函数如下所示:
![](img/51caabd9-ef17-4057-a27d-71fa15ccb5d9.png)
事实证明,激活功能对于中间神经元非常重要。 没有它,可以证明一堆具有线性激活的神经元(实际上不是激活,或更正式地说是 *z = z* 的激活函数)实际上只是一个线性函数。
事实证明,激活功能对于中间神经元非常重要。 没有它,可以证明一堆具有线性激活的神经元(实际上不是激活,或更正式地说是`z = z`的激活函数)实际上只是一个线性函数。
在这种情况下,单个线性函数是不理想的,因为在许多情况下,我们的网络可能未针对当前问题指定。 也就是说,由于输入要素和目标变量之间的非线性关系(我们正在预测),网络无法很好地对数据建模。
......@@ -77,7 +77,7 @@ ReLu,或直线激活,简单定义为:
![](img/39a93548-a5c8-42d4-8696-f1cac167f5b9.png)
在这种情况下,损失函数为![](img/ab17a57d-6a09-47de-a96d-d80d9e5b2636.png),这实际上是平方误差。 因此,我们的`cost`函数 *J* 实际上只是均方误差,或整个数据集的均方误差的平均值。 按照惯例,添加了术语 1/2 以使某些微积分更干净。
在这种情况下,损失函数为![](img/ab17a57d-6a09-47de-a96d-d80d9e5b2636.png),这实际上是平方误差。 因此,我们的`cost`函数`J`实际上只是均方误差,或整个数据集的均方误差的平均值。 按照惯例,添加了术语 1/2 以使某些微积分更干净。
# 正向传播过程
......@@ -101,7 +101,7 @@ ReLu,或直线激活,简单定义为:
![](img/1e890c56-85ae-4f6c-82e5-4ae9de2f0fc8.png)
梯度下降算法将梯度乘以称为 **alpha** 的学习率,然后从每个权重的当前值中减去该值。 学习率是一个超参数。
梯度下降算法将梯度乘以称为`alpha`的学习率,然后从每个权重的当前值中减去该值。 学习率是一个超参数。
# 随机和小批量梯度下降
......@@ -380,7 +380,7 @@ pip install keras
您可能熟悉典型预测模型中的所谓偏差/方差折衷。 如果您不在,我们将在此处提供快速提醒。 在传统的预测模型中,当我们尝试从偏差中发现误差并从方差中发现误差时,通常会有一些折衷。 因此,让我们看看这两个错误是什么:
* **偏差误差**:偏差误差是模型引入的误差。 例如,如果您尝试使用线性模型对非线性函数建模,则模型将在指定的下为*,并且偏差误差会很高。*
* **偏差误差**:偏差误差是模型引入的误差。 例如,如果您尝试使用线性模型对非线性函数建模,则模型将在指定的下为*并且偏差误差会很高*
* **方差误差**:方差误差是由训练数据中的随机性引起的误差。 当我们很好地拟合训练分布以至于我们的模型不再泛化时,我们就过度拟合或引入了方差误差。
在大多数机器学习应用程序中,我们寻求找到一些折衷方案,以最小化偏差误差,同时引入尽可能小的方差误差。 我之所以这么说是因为深度神经网络的一大优点是,在很大程度上,偏差和方差可以彼此独立地进行操纵。 但是,这样做时,我们将需要非常谨慎地构造训练数据。
......@@ -393,7 +393,7 @@ pip install keras
火车数据集将按预期用于训练网络。
val 数据集或验证数据集将用于查找理想的超参数并测量过度拟合。 *时期结束时*,即网络有机会观察训练集中的每个数据点时,我们将对 val 集进行预测。 该预测将用于监视过度拟合,并将帮助我们知道网络何时完成训练。 像这样在每个时期末尾使用 val 设置与典型用法有些不同。 有关保留验证的更多信息,请参考 Hastie 和 Tibshirani 撰写的[《统计学习的要素》](https://web.stanford.edu/~hastie/ElemStatLearn)
val 数据集或验证数据集将用于查找理想的超参数并测量过度拟合。 *在时期结束时*,即网络有机会观察训练集中的每个数据点时,我们将对 val 集进行预测。 该预测将用于监视过度拟合,并将帮助我们知道网络何时完成训练。 像这样在每个时期末尾使用 val 设置与典型用法有些不同。 有关保留验证的更多信息,请参考 Hastie 和 Tibshirani 撰写的[《统计学习的要素》](https://web.stanford.edu/~hastie/ElemStatLearn)
一旦完成所有训练,就将使用测试数据集,以根据网络未看到的一组数据准确地测量模型性能。
......
# 使用深度学习解决回归问题
在本章中,我们将构建一个简单的**多层感知器** **MLP** ),它是具有单个隐藏层的神经网络的奇特名称,用于解决回归问题。 然后,我们将深入研究具有多个隐藏层的深度神经网络。 在此过程中,我们将探索模型的性能和过度拟合。 所以,让我们开始吧!
在本章中,我们将构建一个简单的**多层感知器****MLP**),它是具有单个隐藏层的神经网络的奇特名称,用于解决回归问题。 然后,我们将深入研究具有多个隐藏层的深度神经网络。 在此过程中,我们将探索模型的性能和过度拟合。 所以,让我们开始吧!
我们将在本章介绍以下主题:
......@@ -114,7 +114,7 @@ def load_data():
# 定义成本函数
对于回归任务,最常见的成本函数是**均方根误差** **RMSE** )和**平均绝对误差****MAE** )。 我将在这里使用 MAE。 定义如下:
对于回归任务,最常见的成本函数是**均方根误差****RMSE**)和**平均绝对误差****MAE**)。 我将在这里使用 MAE。 定义如下:
![](img/15697b3b-001e-4120-a0d1-c4447a4dc47f.png)
......
# 使用深度学习解决二进制分类问题
在本章中,我们将使用 Keras 和 TensorFlow 解决棘手的二进制分类问题。 我们将首先讨论深度学习对此类问题的利弊,然后我们将继续使用与第 2 章和*中使用的相同框架建立解决方案。 学习解决回归问题*。 最后,我们将更深入地介绍 Keras 回调,甚至使用自定义回调来实现曲线下[ETG5] / **区域的每个时期**接收器操作特征** / **区域( **ROC AUC** )指标。****
在本章中,我们将使用 Keras 和 TensorFlow 解决棘手的二进制分类问题。 我们将首先讨论深度学习对此类问题的利弊,然后我们将继续使用与第 2 章和*中使用的相同框架建立解决方案。 学习解决回归问题*。 最后,我们将更深入地介绍 Keras 回调,甚至使用自定义回调来实现曲线下[ETG5] / **区域的每个时期**接收器操作特征** / **区域( **ROC AUC**)指标。****
我们将在本章介绍以下主题:
......@@ -19,7 +19,7 @@
与更传统的分类器(例如逻辑回归模型)或什至基于树的模型(例如**随机森林****梯度提升机**)相比,深度神经网络有一些不错的选择 优点。
与回归一样,我们在第 2 章和*中使用深度学习解决了回归问题*,我们不需要选择或筛选特征。 在本章选择的问题中,有 178 个输入变量。 每个输入变量都是来自标记为 **x1..x178** 的 E **脑电图** **EEG** )的特定输入。 即使您是医生,也很难理解这么多功能与目标变量之间的关系。 这些功能中的某些功能很可能是不相关的,而这些变量和目标之间可能存在一些更高级别的交互,这是一个更好的机会。 如果使用传统模型,则经过功能选择步骤后,我们将获得最佳模型性能。 使用深度神经网络时不需要这样做。
与回归一样,我们在第 2 章和*中使用深度学习解决了回归问题*,我们不需要选择或筛选特征。 在本章选择的问题中,有 178 个输入变量。 每个输入变量都是来自标记为 **x1..x178** 的 E **脑电图****EEG**)的特定输入。 即使您是医生,也很难理解这么多功能与目标变量之间的关系。 这些功能中的某些功能很可能是不相关的,而这些变量和目标之间可能存在一些更高级别的交互,这是一个更好的机会。 如果使用传统模型,则经过功能选择步骤后,我们将获得最佳模型性能。 使用深度神经网络时不需要这样做。
# 深度神经网络的缺点
......
# 从头开始训练 RNN
**递归神经网络** **RNN** )是为建模顺序数据而构建的一组神经网络。 在最后几章中,我们研究了使用卷积层从图像中学习特征。 当我们想从所有相关的值中学习特征时,递归层同样有用: *x <sub>t</sub>**x <sub>t-1</sub>**x <sub>t-2</sub>**x* <sub>*t-3*</sub>
**递归神经网络****RNN**)是为建模顺序数据而构建的一组神经网络。 在最后几章中,我们研究了使用卷积层从图像中学习特征。 当我们想从所有相关的值中学习特征时,递归层同样有用: *x <sub>t</sub>**x <sub>t-1</sub>**x <sub>t-2</sub>**x* <sub>*t-3*</sub>
在本章中,我们将讨论如何将 RNN 用于时间序列问题,这无疑是涉及按时间或时间顺序排列的一系列数据点的问题。
......@@ -55,7 +55,7 @@
# 长期短期记忆网络
每当需要循环网络时,**长期短期记忆网络** **LSTM** )都能很好地工作。 您可能已经猜到了,LSTM 在学习长期交互方面很出色。 实际上,这就是他们的设计意图。
每当需要循环网络时,**长期短期记忆网络****LSTM**)都能很好地工作。 您可能已经猜到了,LSTM 在学习长期交互方面很出色。 实际上,这就是他们的设计意图。
LSTM 既可以积累先前时间步骤中的信息,又可以选择何时忘记一些不相关的信息,而选择一些新的更相关的信息。
......@@ -99,7 +99,7 @@ LSTM 的另一个关键特性是内部自循环,使设备可以长期积累信
# 通过时间反向传播
训练 RNN 要求**反向传播**的实现略有不同,即在整个时间( **BPTT** )中称为**反向传播。**
训练 RNN 要求**反向传播**的实现略有不同,即在整个时间( **BPTT**)中称为**反向传播。**
与正常反向传播一样,BPTT 的目标是使用整体网络误差,通过梯度来调整每个神经元/单元对它们对整体误差的贡献的权重。 总体目标是相同的。
......@@ -139,11 +139,11 @@ LSTM 的另一个关键特性是内部自循环,使设备可以长期积累信
例如,如果我们在三月份拥有价值 80 美元的股票,而在四月份突然价值 100 美元,则该股票的流率将为 20 美元。
一阶微分不能保证平稳的时间序列。 我们可能还需要删除季节或趋势。 趋势消除是专业预测员日常生活的重要组成部分。 如果我们使用传统的统计模型进行预测,则需要做更多的工作。 虽然我们没有涵盖这些内容的页面,但我们可能还需要执行二阶差分,季节性趋势下降或更多操作。 **增强 Dickey-Fuller****ADF** )测试是一种统计测试,通常用于确定我们的时间序列是否实际上是静止的。 如果您想知道时间序列是否稳定,[可以使用增强的 Dickey-Fuller 检验来检查](https://en.wikipedia.org/wiki/Augmented_Dickey%E2%80%93Fuller_test)。 但是,对于 LSTM,一阶微分通常可能就足够了。 只需了解网络最肯定会学习您数据集中剩余的季节和时期。
一阶微分不能保证平稳的时间序列。 我们可能还需要删除季节或趋势。 趋势消除是专业预测员日常生活的重要组成部分。 如果我们使用传统的统计模型进行预测,则需要做更多的工作。 虽然我们没有涵盖这些内容的页面,但我们可能还需要执行二阶差分,季节性趋势下降或更多操作。 **增强 Dickey-Fuller****ADF**)测试是一种统计测试,通常用于确定我们的时间序列是否实际上是静止的。 如果您想知道时间序列是否稳定,[可以使用增强的 Dickey-Fuller 检验来检查](https://en.wikipedia.org/wiki/Augmented_Dickey%E2%80%93Fuller_test)。 但是,对于 LSTM,一阶微分通常可能就足够了。 只需了解网络最肯定会学习您数据集中剩余的季节和时期。
# ARIMA 和 ARIMAX 预测
值得一提的是**自回归综合移动平均值** **ARIMA** )模型,因为它们传统上用于时间序列预测。 虽然我显然是深度神经网络的忠实拥护者(事实上,我写过关于它们的书),但我建议从 ARIMA 开始并逐步进行深度学习。 在许多情况下,ARIMA 的性能将优于 LSTM。 当数据稀疏时尤其如此。
值得一提的是**自回归综合移动平均值****ARIMA**)模型,因为它们传统上用于时间序列预测。 虽然我显然是深度神经网络的忠实拥护者(事实上,我写过关于它们的书),但我建议从 ARIMA 开始并逐步进行深度学习。 在许多情况下,ARIMA 的性能将优于 LSTM。 当数据稀疏时尤其如此。
从可能可行的最简单模型开始。 有时这将是一个深层的神经网络,但通常情况会更简单一些,例如线性回归或 ARIMA 模型。 该模型的复杂性应通过其提供的提升来证明,通常越简单越好。 尽管整本书中多次重申,但在时间序列预测中,这一说法比其他任何话题都更为真实。
......
# 从头开始使用词嵌入训练 LSTM
到目前为止,我们已经看到了深度学习在结构化数据,图像数据甚至时间序列数据中的应用示例。 似乎唯一正确的方法是继续进行**自然语言处理** **NLP** )作为下一步。 机器学习和人类语言之间的联系非常有趣。 深度学习已像计算机视觉一样,以指数方式加快了该领域的发展速度。 让我们从 NLP 的简要概述开始,并在本章中将要完成的一些任务开始。
到目前为止,我们已经看到了深度学习在结构化数据,图像数据甚至时间序列数据中的应用示例。 似乎唯一正确的方法是继续进行**自然语言处理****NLP**)作为下一步。 机器学习和人类语言之间的联系非常有趣。 深度学习已像计算机视觉一样,以指数方式加快了该领域的发展速度。 让我们从 NLP 的简要概述开始,并在本章中将要完成的一些任务开始。
我们还将在本章中介绍以下主题:
......@@ -62,7 +62,7 @@ NLP 领域广阔而复杂。 从技术上讲,人类语言与计算机科学之
# Word 模型袋
**词袋** **BoW** )模型是 NLP 模型,实际上忽略了句子结构和单词放置。 在“单词袋”模型中,我们将每个文档视为单词袋。 很容易想到这一点。 每个文档都是一个包含大量单词的容器。 我们忽略句子,结构以及哪个词排在前或后。 我们对文档中包含“非常”,“很好”和“不好”这两个词的事实感到关注,但是我们并不真正在意“好”而不是“坏”。
**词袋****BoW**)模型是 NLP 模型,实际上忽略了句子结构和单词放置。 在“单词袋”模型中,我们将每个文档视为单词袋。 很容易想到这一点。 每个文档都是一个包含大量单词的容器。 我们忽略句子,结构以及哪个词排在前或后。 我们对文档中包含“非常”,“很好”和“不好”这两个词的事实感到关注,但是我们并不真正在意“好”而不是“坏”。
Word 袋模型很简单,需要相对较少的数据,并且考虑到该模型的天真性,其运行效果非常好。
......@@ -86,7 +86,7 @@ Word 袋模型很简单,需要相对较少的数据,并且考虑到该模型
# 计数和 TF-IDF 矢量化
计数向量化和**词频逆文档频率** **T** **TF-IDF** )是两种将词袋转换成适合输入的特征向量的策略 机器学习算法。
计数向量化和**词频逆文档频率****T** **TF-IDF**)是两种将词袋转换成适合输入的特征向量的策略 机器学习算法。
计数向量化采用我们的一组单词,并创建一个矢量,其中每个元素代表语料库词汇中的一个单词。 自然,一组文档中唯一单词的数量可能会很大,并且许多文档可能不包含语料库中存在的单词的任何实例。 在这种情况下,使用稀疏矩阵表示这些类型的字向量通常是非常明智的。 当一个单词出现一次或多次时,计数矢量化器将简单地对该单词出现在文档中的次数进行计数,然后将该计数放置在代表该单词的位置。
......@@ -257,7 +257,7 @@ Embedding(input_dim=10000, output_dim=128, input_length=10)
本章的第一个案例研究将演示情绪分析。 在此示例中,我们将应用本章中学到的大多数内容。
我们将使用从 **Internet 电影数据库** **IMDB** )内置于 Keras 中的数据集。 该数据集包含 25,000 条电影评论,每条评论均按情感标记。 正面评论标记为 1,负面评论标记为 0。此数据集中的每个单词均已替换为标识该单词的整数。 每个评论都被编码为单词索引序列。
我们将使用从 **Internet 电影数据库****IMDB**)内置于 Keras 中的数据集。 该数据集包含 25,000 条电影评论,每条评论均按情感标记。 正面评论标记为 1,负面评论标记为 0。此数据集中的每个单词均已替换为标识该单词的整数。 每个评论都被编码为单词索引序列。
我们的目标是仅使用评论中的文字将电影评论分为正面评论或负面评论。
......
......@@ -50,7 +50,7 @@
然后,编码器和解码器如下图所示一起工作,获取输入序列并生成输出序列。 如您所见,我们使用特殊字符表示序列的开始和结束。
我们知道,一旦序列字符的结尾(我称之为 **< EOS >** )结束,就停止生成输出:
我们知道,一旦序列字符的结尾(我称之为 **< EOS >**)结束,就停止生成输出:
![](img/2a32ed66-4641-4bbf-9f24-77083ee3e768.png)
......@@ -84,7 +84,7 @@
# 翻译指标
知道翻译是否良好很难。 机器翻译质量的通用度量标准称为**双语评估研究** **BLEU** ),它最初是由 Papineni 等人在[《BLEU:一种自动评估机器翻译的方法》](http://aclweb.org/anthology/P/P02/P02-1040.pdf)中创建的。 BLEU 是基于 ngram 的分类精度的改进应用程序。 如果您想使用 BLEU 来衡量翻译质量,TensorFlow 团队已经发布了一个脚本,该脚本可以根据给定的地面真实翻译和机器预测翻译的语料来计算 BLEU 分数。 您可以在[这里](https://github.com/tensorflow/nmt/blob/master/nmt/scripts/bleu.py)找到该脚本。
知道翻译是否良好很难。 机器翻译质量的通用度量标准称为**双语评估研究****BLEU**),它最初是由 Papineni 等人在[《BLEU:一种自动评估机器翻译的方法》](http://aclweb.org/anthology/P/P02/P02-1040.pdf)中创建的。 BLEU 是基于 ngram 的分类精度的改进应用程序。 如果您想使用 BLEU 来衡量翻译质量,TensorFlow 团队已经发布了一个脚本,该脚本可以根据给定的地面真实翻译和机器预测翻译的语料来计算 BLEU 分数。 您可以在[这里](https://github.com/tensorflow/nmt/blob/master/nmt/scripts/bleu.py)找到该脚本。
# 机器翻译
......
......@@ -36,7 +36,7 @@
# 马尔可夫决策过程
我们构筑的这个世界恰好是**马尔可夫决策过程** **MDP** ),它具有以下属性:
我们构筑的这个世界恰好是**马尔可夫决策过程****MDP**),它具有以下属性:
* 它具有一组有限的状态, *S*
* 它具有一组有限的动作 *A*
......@@ -74,7 +74,7 @@
# 深度 Q 网络
**深层 Q 网络** **DQN** )是近似 *Q* 函数的神经网络。 他们将状态映射到动作,并学会估计每个动作的 *Q* 值,如下图所示:
**深层 Q 网络****DQN**)是近似 *Q* 函数的神经网络。 他们将状态映射到动作,并学会估计每个动作的 *Q* 值,如下图所示:
![](img/33ff32cb-b608-417d-afd0-60e35ff0f6d4.png)
......
# 生成对抗网络
尽管我在本书中花了很多时间谈论分类或估计的网络,但在本章中,我将向您展示一些具有创建能力的深度神经网络。 **生成对抗网络** **GAN** )通过两个内部深层网络之间的内部竞争来学习如何做到这一点,我们将在下面讨论。 在**深度卷积通用对抗网络****DCGAN** )的情况下,这是我将在本章中重点介绍的 GAN 类型,该网络将学习创建类似于 训练数据集中的图像。
尽管我在本书中花了很多时间谈论分类或估计的网络,但在本章中,我将向您展示一些具有创建能力的深度神经网络。 **生成对抗网络****GAN**)通过两个内部深层网络之间的内部竞争来学习如何做到这一点,我们将在下面讨论。 在**深度卷积通用对抗网络****DCGAN**)的情况下,这是我将在本章中重点介绍的 GAN 类型,该网络将学习创建类似于 训练数据集中的图像。
我们将在本章介绍以下主题:
......@@ -25,7 +25,7 @@
# 深度卷积 GAN 架构
关于 GAN 的论文很多,每篇都提出了新的新颖架构和调整。 但是,它们中的大多数至少在某种程度上基于**深卷积 GAN****DCGAN** )。 在本章的其余部分中,我们将重点介绍这种模型,因为当您采用此处未介绍的新的令人兴奋的 GAN 架构(例如**有条件 GAN****cGAN** ),Stack GAN,InfoGAN 或 Wasserstein GAN,或者可能还有一些其他的新变种,您可能会选择接下来看看。
关于 GAN 的论文很多,每篇都提出了新的新颖架构和调整。 但是,它们中的大多数至少在某种程度上基于**深卷积 GAN****DCGAN**)。 在本章的其余部分中,我们将重点介绍这种模型,因为当您采用此处未介绍的新的令人兴奋的 GAN 架构(例如**有条件 GAN****cGAN**),Stack GAN,InfoGAN 或 Wasserstein GAN,或者可能还有一些其他的新变种,您可能会选择接下来看看。
DCGAN 由 Alex Radford,Luke Metz 和 Soumith Chintala 在论文[《深度卷积生成对抗网络》](https://arxiv.org/pdf/1511.06434.pdf)中提出。
......@@ -296,7 +296,7 @@ for epoch in range(epochs + 1):
fake_labels = np.zeros((half_batch, 1))
```
这段代码生成了一个噪声向量矩阵(我们之前将其称为 **z** )并将其发送到生成器。 它返回了一组生成的图像,我称之为伪图像。 我们将使用它们来训练鉴别器,因此我们要使用的标签为 0,表示这些实际上是生成的图像。
这段代码生成了一个噪声向量矩阵(我们之前将其称为 **z**)并将其发送到生成器。 它返回了一组生成的图像,我称之为伪图像。 我们将使用它们来训练鉴别器,因此我们要使用的标签为 0,表示这些实际上是生成的图像。
注意,这里的形状是`half_batch` *x 28 x 28 x 1*`half_batch`正是您所想的。 我们将创建一半的生成图像,因为另一半将是真实数据,我们将在下一步进行组装。 要获取真实图像,我们将在`X_train`上生成一组随机索引,并将`X_train`的切片用作真实图像,如以下代码所示:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册