diff --git a/new/adv-dl-tf2-keras/00.md b/new/adv-dl-tf2-keras/00.md index def2525aebcef2faae3d05bc2dbd99f94d564fe7..431f5ac336d4bed7383366619a2f11d220b0c14f 100644 --- a/new/adv-dl-tf2-keras/00.md +++ b/new/adv-dl-tf2-keras/00.md @@ -130,7 +130,7 @@ python3 dcgan-mnist-4.2.1.py python3 name-of-the-file-in-listing ``` -该代码示例的文件名包含在*列表*标题中。 本书使用*列表*标识文本中的代码示例。 +该代码示例的文件名包含在“列表”标题中。 本书使用“列表”标识文本中的代码示例。 **粗体**:表示新的术语,重要的单词或您在屏幕上看到的单词,例如在菜单或对话框中,也显示在这样的文本中。 例如:StackedGAN 具有两个附加损失函数,即**条件**和**熵**。 diff --git a/new/adv-dl-tf2-keras/02.md b/new/adv-dl-tf2-keras/02.md index 58ddfc421b4578481caae9e3b9488537eec8a9f4..18e7e261e1ab657d4ac87a9cfd8b9dab8da5cd96 100644 --- a/new/adv-dl-tf2-keras/02.md +++ b/new/adv-dl-tf2-keras/02.md @@ -742,7 +742,7 @@ DenseNet 使用另一种方法攻击梯度消失的问题。 代替使用快捷 `x[l] = H(x[0], x[1], x[2], x[l-1])`(公式 2.4.1) -`Conv2D`使用大小为 3 的内核。每层生成的特征图的数量称为增长率`k`。 通常,在 Huang 等人的论文“密集连接卷积网络”中,也使用`k = 12`,但是`k = 24`。 (2017)[5]。 因此,如果特征图`x[0]`的数量为`k[0]`,则特征图总数在末尾 *中的 4 层`Dense`块图 2.4.1* 为 4 x`k`+`k[0]`。 +`Conv2D`使用大小为 3 的内核。每层生成的特征图的数量称为增长率`k`。 通常,在 Huang 等人的论文“密集连接卷积网络”中,也使用`k = 12`,但是`k = 24`。 (2017)[5]。 因此,如果特征图`x[0]`的数量为`k[0]`,则“图 2.4.1”中,4 层`Dense`块的末尾的特征图总数为`4 x k + k[0]`。 DenseNet 建议在`Dense`块之前加上`BN-ReLU-Conv2D`,以及许多是增长率两倍的特征图`k[0]`= 2 x`k`。 在`Dense`块的末尾,特征图的总数将为 4 x 12 + 2 x 12 = 72。 diff --git a/new/adv-dl-tf2-keras/03.md b/new/adv-dl-tf2-keras/03.md index de1283baabeac8f034d5e6e1bf0fa005679a081b..4af20d90d2722689a849e21ab09f564617a5007d 100644 --- a/new/adv-dl-tf2-keras/03.md +++ b/new/adv-dl-tf2-keras/03.md @@ -6,7 +6,7 @@ 与前面的章节相似,输入数据可以采用多种形式,包括语音,文本,图像或视频。 自编码器将尝试查找表示形式或一段代码,以便对输入数据执行有用的转换。 例如,当对自编码器进行降噪处理时,神经网络将尝试找到可用于将噪声数据转换为干净数据的代码。 嘈杂的数据可以是带有静态噪声的录音形式,然后将其转换为清晰的声音。 自编码器将自动从数据中自动学习代码,而无需人工标记。 这样,自编码器可以在**无监督**学习算法下分类为。 -在本书的后续章节中,我们将研究**生成对抗网络**(**GAN**)和**变体自编码器**(**VAE**) 也是无监督学习算法的代表形式。 这与我们在前几章中讨论过的监督学习算法相反,后者需要人工注释。 +在本书的后续章节中,我们将研究**生成对抗网络**(**GAN**)和**变分自编码器**(**VAE**) 也是无监督学习算法的代表形式。 这与我们在前几章中讨论过的监督学习算法相反,后者需要人工注释。 总之,本章介绍: @@ -45,7 +45,7 @@ ![](img/B14853_03_006.png) (Equation 3.1.1) -在此示例中,m 是输出尺寸(例如,在 MNIST *中,m =宽度×高度×通道= 28×28×1 = 784* )。`x[i]`和![](img/B14853_03_007.png)分别是`x`和![](img/B14853_03_003.png)的元素。 由于损失函数是输入和输出之间差异的量度,因此我们可以使用替代的重建损失函数,例如二进制交叉熵或结构相似性指数(SSIM)。 +在此示例中,m 是输出尺寸(例如,在 MNIST 中,`m = width × height × channels = 28 × 28 × 1 = 784`)。`x[i]`和![](img/B14853_03_007.png)分别是`x`和![](img/B14853_03_003.png)的元素。 由于损失函数是输入和输出之间差异的量度,因此我们可以使用替代的重建损失函数,例如二进制交叉熵或结构相似性指数(SSIM)。 与其他神经网络类似,自编码器会在训练过程中尝试使此错误或损失函数尽可能小。“图 3.1.1”显示了一个自编码器。 编码器是将输入`x`压缩为低维潜矢量`z`的功能。 该潜矢量代表输入分布的重要特征。 然后,解码器尝试以![](img/B14853_03_003.png)的形式从潜矢量中恢复原始输入。 @@ -246,7 +246,7 @@ plt.show() 图 3.2.1:编码器模型由 Conv2D(32)-Conv2D(64)-Dense(16)组成,以生成低维潜矢量 -清单 3.2.1 中的*中的解码器对潜在向量进行解压缩,以恢复 MNIST 数字。 解码器输入级是`Dense`层,它将接受潜在矢量。 单位的数量等于从编码器保存的`Conv2D`输出尺寸的乘积。 这样做是为了便于我们调整`Dense`层`Dense`层的输出大小,以最终恢复原始 MNIST 图像尺寸。* +列表 3.2.1 中的解码器对潜在向量进行解压缩,以恢复 MNIST 数字。 解码器输入级是`Dense`层,它将接受潜在矢量。 单位的数量等于从编码器保存的`Conv2D`输出尺寸的乘积。 这样做是为了便于我们调整`Dense`层`Dense`层的输出大小,以最终恢复原始 MNIST 图像尺寸。 解码器由三个`Conv2DTranspose`的堆栈组成。 在我们的案例中,我们将使用**转置的 CNN**(有时称为**解卷积**),它是解码器中常用的。 我们可以将转置的 CNN(`Conv2DTranspose`)想象成 CNN 的逆过程。 @@ -280,7 +280,7 @@ plt.show() 在“图 3.2.5”中,我们可以看到特定数字的潜矢量聚集在空间的某个区域上。 例如,数字 0 在左下象限中,而数字 1 在右上象限中。 这种群集在图中得到了反映。 实际上,同一图显示了导航或从潜在空间生成新数字的结果,如图“图 3.2.5”所示。 -例如,从*的中心开始,向右上象限改变 2 维潜矢量的值,这表明数字从 9 变为 1。这是可以预期的,因为从*图 3.2 开始 .5* ,我们可以看到数字 9 簇的潜在代码值在中心附近,数字 1 簇的潜在代码值在右上象限。* +例如,从中心开始,向右上象限改变 2 维潜矢量的值,这表明数字从 9 变为 1。这是可以预期的,因为从“图 3.2.5”开始,我们可以看到数字 9 簇的潜在代码值在中心附近,数字 1 簇的潜在代码值在右上象限。 对于“图 3.2.5”和“图 3.2.6”,我们仅研究了每个潜在矢量维在-4.0 和+4.0 之间的区域: @@ -410,11 +410,11 @@ def plot_results(models, ![](img/B14853_03_018.png) (Equation 3.3.2) -在此示例中,`m`是输出尺寸(例如,在 MNIST 中, *m =宽度×高度×通道= 28×28×1 = 784* )。 ![](img/B14853_03_019.png)和![](img/B14853_03_020.png)分别是`x_ori`和![](img/B14853_03_021.png)的元素。 +在此示例中,`m`是输出尺寸(例如,在 MNIST 中,`m = width × height × channels = 28 × 28 × 1 = 784`)。 ![](img/B14853_03_019.png)和![](img/B14853_03_020.png)分别是`x_ori`和![](img/B14853_03_021.png)的元素。 为了实现 DAE,我们将需要对上一节中介绍的自编码器进行一些更改。 首先,训练输入数据应损坏的 MNIST 数字。 训练输出数据是原始的原始 MNIST 数字相同。 这就像告诉自编码器应校正的图像是什么,或要求它找出在图像损坏的情况下如何消除噪声。 最后,我们必须在损坏的 MNIST 测试数据上验证自编码器。 -*图 3.3.2 左侧所示的 MNIST 数字 7 是实际损坏的图像输入。 右边的是经过训练的降噪自编码器的干净图像输出。* +“图 3.3.2"左侧所示的 MNIST 数字 7 是实际损坏的图像输入。 右边的是经过训练的降噪自编码器的干净图像输出。 “列表 3.3.1”:`denoising-autoencoder-mnist-3.3.1.py` @@ -884,7 +884,7 @@ plt.show() 一旦学习了潜在代码,就可以对原始输入分布执行许多结构操作。 为了更好地了解输入分布,可以使用低级嵌入(类似于本章内容)或通过更复杂的降维技术(例如 t)来可视化潜在矢量形式的隐藏结构。 -SNE 或 PCA。 -除了去噪和着色外,自编码器还用于将输入分布转换为低维潜矢量,可以针对其他任务(例如,分割,检测,跟踪,重建和视觉理解)进一步对其进行处理。 在“第 8 章”,*变体自编码器(VAE)*中,我们将讨论 VAE,它们在结构上与自编码器相同,但具有可解释的潜在代码,这些代码可以产生连续的潜在矢量投影,因此有所不同。 +除了去噪和着色外,自编码器还用于将输入分布转换为低维潜矢量,可以针对其他任务(例如,分割,检测,跟踪,重建和视觉理解)进一步对其进行处理。 在“第 8 章”,“变分自编码器(VAE)”中,我们将讨论 VAE,它们在结构上与自编码器相同,但具有可解释的潜在代码,这些代码可以产生连续的潜在矢量投影,因此有所不同。 在下一章中,我们将着手介绍 AI 最近最重要的突破之一,即 GAN。 在下一章中,我们将学习 GAN 的核心优势,即其综合看起来真实的数据的能力。 diff --git a/new/adv-dl-tf2-keras/04.md b/new/adv-dl-tf2-keras/04.md index 15bc5ee9877cd3be823a25428f17c1c21b0fde90..729ff7bbab27252a002fb40b186758b3230de18d 100644 --- a/new/adv-dl-tf2-keras/04.md +++ b/new/adv-dl-tf2-keras/04.md @@ -127,7 +127,7 @@ DCGAN 实施以下设计原则: 我们可以将转置的 CNN(`Conv2DTranspose`)想象成 CNN 的逆过程。 在一个简单的示例中,如果 CNN 将图像转换为特征图,则转置的 CNN 将生成给定特征图的图像。 因此,转置的 CNN 在上一章的解码器中和本章的生成器中使用。 -在对`strides = 2`进行两个`Conv2DTranspose`之后,特征图的大小将为 28 x 28 x *数量的过滤器*。 每个`Conv2DTranspose`之前都有批量规范化和 ReLU。 最后一层具有 *Sigmoid* 激活,可生成 28 x 28 x 1 假 MNIST 图像。 将每个像素标准化为与`[0, 255]`灰度级相对应的`[0.0, 1.0]`。 下面的“列表 4.2.1”显示了`tf.keras`中生成器网络的实现。 定义了一个函数来生成生成器模型。 由于整个代码的长度,我们将列表限制为正在讨论的特定行。 +在对`strides = 2`进行两个`Conv2DTranspose`之后,特征图的大小将为`28 x 28 x n_filter`。 每个`Conv2DTranspose`之前都有批量规范化和 ReLU。 最后一层具有 *Sigmoid* 激活,可生成 28 x 28 x 1 假 MNIST 图像。 将每个像素标准化为与`[0, 255]`灰度级相对应的`[0.0, 1.0]`。 下面的“列表 4.2.1”显示了`tf.keras`中生成器网络的实现。 定义了一个函数来生成生成器模型。 由于整个代码的长度,我们将列表限制为正在讨论的特定行。 [完整的代码可在 GitHub 上获得](https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras)。 diff --git a/new/adv-dl-tf2-keras/06.md b/new/adv-dl-tf2-keras/06.md index 1a4062406e7fcb23441abb676d8ad8ecc9db7d36..b4f9a9db5f1c3fa390158d3b60851b53371e015b 100644 --- a/new/adv-dl-tf2-keras/06.md +++ b/new/adv-dl-tf2-keras/06.md @@ -772,7 +772,7 @@ def build_encoder(inputs, num_labels=10, feature1_dim=256): | **网络** | **损失函数** | **编号** | | GAN | ![](img/B14853_06_030.png)![](img/B14853_06_031.png) | 4.1.14.1.5 | -| 堆叠式 | ![](img/B14853_06_032.png)![](img/B14853_06_033.png)![](img/B14853_06_034.png)![](img/B14853_06_035.png)![](img/B14853_06_036.png)其中![](img/B14853_06_037.png)是权重, *i =编码器和 GAN ID* | 6.2.16.2.26.2.36.2.46.2.5 | +| 堆叠式 | ![](img/B14853_06_032.png)![](img/B14853_06_033.png)![](img/B14853_06_034.png)![](img/B14853_06_035.png)![](img/B14853_06_036.png)其中![](img/B14853_06_037.png)是权重,`i`是编码器和 GAN ID | 6.2.16.2.26.2.36.2.46.2.5 | 表 6.2.1:GAN 和 StackedGAN 的损失函数之间的比较。 `~p_data`表示从相应的编码器数据(输入,特征或输出)采样 @@ -784,7 +784,7 @@ def build_encoder(inputs, num_labels=10, feature1_dim=256): 图 6.2.4:图 6.2.3 的简化版本,仅显示![](img/B14853_06_040.png)计算中涉及的网络元素 -但是,条件损失函数引入了一个新问题。 发生器忽略输入噪声代码`z[i]`,仅依赖`f[i + 1]`。 熵损失函数“公式 6.2.4”中的![](img/B14853_06_041.png)确保发生器不会忽略噪声代码`z[i]`。 * Q 网络*从发生器的输出中恢复噪声代码。 恢复的噪声和输入噪声之间的差异也通过`L2`或欧几里德距离(MSE)进行测量。 +但是,条件损失函数引入了一个新问题。 发生器忽略输入噪声代码`z[i]`,仅依赖`f[i + 1]`。 熵损失函数“公式 6.2.4”中的![](img/B14853_06_041.png)确保发生器不会忽略噪声代码`z[i]`。 *Q 网络*从发生器的输出中恢复噪声代码。 恢复的噪声和输入噪声之间的差异也通过`L2`或欧几里德距离(MSE)进行测量。 “图 6.2.5”显示了![](img/B14853_06_042.png)计算中涉及的网络元素: diff --git a/new/adv-dl-tf2-keras/07.md b/new/adv-dl-tf2-keras/07.md index b376f50469159b9060629409d34d34a5f2b413ae..48e9566ff0c6498ff2f02b9984fb8273b4169f90 100644 --- a/new/adv-dl-tf2-keras/07.md +++ b/new/adv-dl-tf2-keras/07.md @@ -978,7 +978,7 @@ python3 cyclegan-7.1.1.py --mnist_svhn_g_source=cyclegan_mnist_svhn-g_ source.h5 在本章中,我们讨论了 CycleGAN 作为可用于图像翻译的算法。 在 CycleGAN 中,源数据和目标数据不一定要对齐。 我们展示了两个示例,*灰度 ↔ 颜色*和 *MNIST ↔ SVHN* ,尽管 CycleGAN 可以执行许多其他可能的图像转换 。 -在下一章中,我们将着手另一种生成模型,即**变体自编码器**(**VAE**)。 VAE 具有类似的学习目标–如何生成新图像(数据)。 他们专注于学习建模为高斯分布的潜在矢量。 我们将以有条件的 VAE 和解开 VAE 中的潜在表示形式来证明 GAN 解决的问题中的其他相似之处。 +在下一章中,我们将着手另一种生成模型,即**变分自编码器**(**VAE**)。 VAE 具有类似的学习目标–如何生成新图像(数据)。 他们专注于学习建模为高斯分布的潜在矢量。 我们将以有条件的 VAE 和解开 VAE 中的潜在表示形式来证明 GAN 解决的问题中的其他相似之处。 # 3.参考 diff --git a/new/adv-dl-tf2-keras/08.md b/new/adv-dl-tf2-keras/08.md index 4e6ded549e9570feec11427a639314f91d9512e4..9e6147a5ccf7caf85ac13fb3b5e6f69cb79f161c 100644 --- a/new/adv-dl-tf2-keras/08.md +++ b/new/adv-dl-tf2-keras/08.md @@ -2,7 +2,7 @@ # 变分自编码器(VAE) -与我们在之前的章节中讨论过的**生成对抗网络**(**GAN**)类似,**变体自编码器**(**VAE**)[1] 属于生成模型家族。 VAE 的生成器能够在导航其连续潜在空间的同时产生有意义的输出。 通过潜矢量探索解码器输出的可能属性。 +与我们在之前的章节中讨论过的**生成对抗网络**(**GAN**)类似,**变分自编码器**(**VAE**)[1] 属于生成模型家族。 VAE 的生成器能够在导航其连续潜在空间的同时产生有意义的输出。 通过潜矢量探索解码器输出的可能属性。 在 GAN 中,重点在于如何得出近似输入分布的模型。 VAE 尝试对可解码的连续潜在空间中的输入分布进行建模。 这是 GAN 与 VAE 相比能够生成更真实信号的可能的潜在原因之一。 例如,在图像生成中,GAN 可以生成看起来更逼真的图像,而相比之下,VAE 生成的图像清晰度较差。 @@ -145,7 +145,7 @@ 图 8.1.2:解码器测试设置 -通过重新参数化技巧解决了 VAE 上的最后一个问题,我们现在可以在`tf.keras`中实施和训练变体自编码器。 +通过重新参数化技巧解决了 VAE 上的最后一个问题,我们现在可以在`tf.keras`中实施和训练变分自编码器。 ## ALAS 与 Keras