提交 d9fd67d7 编写于 作者: W wizardforcel

2021-01-06 22:35:19

上级 b4ffc7bc
......@@ -37,7 +37,7 @@ Keras 还可以使用其功能 API 以及用于动态图的`Model`和`Layer`类
## 安装 Keras 和 TensorFlow
Keras 不是独立的深度学习库。 如您在“图 1.1.1”中所看到的,它建立在另一个深度学习库或后端的之上。 这可能是 Google 的 TensorFlow,MILA 的 Theano,微软的 CNTK 或 Apache MXNet。 但是,与本书的上一版不同,我们将使用 TensorFlow 2.0(`tf2`或简称为`tf`)提供的 Keras(更好地称为`tf.keras`),以利用所提供的有用工具 通过 tf2`tf.keras`也被认为是 TensorFlow 的事实上的前端,它在生产环境中表现出了公认的可靠性。 此外,在不久的将来,将不再提供 Keras 对 TensorFlow 以外的后端的支持。
Keras 不是独立的深度学习库。 如您在“图 1.1.1”中所看到的,它建立在另一个深度学习库或后端的之上。 这可能是 Google 的 TensorFlow,MILA 的 Theano,微软的 CNTK 或 Apache MXNet。 但是,与本书的上一版不同,我们将使用 TensorFlow 2.0(`tf2`或简称为`tf`)提供的 Keras(更好地称为`tf.keras`),以利用 tf2 所提供的有用工具`tf.keras`也被认为是 TensorFlow 的事实上的前端,它在生产环境中表现出了公认的可靠性。 此外,在不久的将来,将不再提供 Keras 对 TensorFlow 以外的后端的支持。
从 Keras 迁移到`tf.keras`通常就像更改一样简单:
......@@ -912,7 +912,7 @@ Non-trainable params: 0
![](img/B14853_01_19.png)
图 1.5.4:LSTM 图 为了清楚起见,未显示参数。
图 1.5.4:LSTM 图为了清楚起见,未显示参数。
还有许多其他方法可以配置 RNN。 一种方法是制作双向 RNN 模型。 默认情况下,从当前输出仅受过去状态和当前输入影响的意义上讲,RNN 是单向的。
......
......@@ -10,7 +10,7 @@ DenseNet 允许每个卷积直接访问输入和较低层的功能图,从而
但是,为什么这些是两个模型,而不是其他? 好吧,自从引入它们以来,已经有无数的模型,例如 **ResNeXt** [6]和 **WideResNet** [7],它们受到这两个网络使用的技术的启发。 同样,在了解 ResNet 和 DenseNet 的情况下,我们将能够使用他们的设计指南来构建我们自己的模型。 通过使用迁移学习,这也将使我们能够将预训练的 ResNet 和 DenseNet 模型用于我们自己的目的,例如对象检测和分割。 仅出于这些原因,以及与 Keras 的兼容性,这两个模型非常适合探索和补充本书的高级深度学习范围。
尽管本章的重点是深度神经网络; 在本章中,我们将讨论 Keras 的重要功能,称为**函数式 API**。 该 API 充当在`tf.keras`中构建网络的替代方法,使我们能够构建更复杂的网络,而这是顺序模型 API 无法实现的。 我们之所以专注于此 API 的原因是,它将成为构建诸如本章重点介绍的两个之类的深度网络的非常有用的工具。 建议您先完成“第 1 章”,“Keras 的高级深度学习介绍”,然后再继续本章,因为我们将本章介绍的入门级代码和概念称为 在本章中,我们将它们带入了更高的层次。
尽管本章的重点是深度神经网络; 在本章中,我们将讨论 Keras 的重要功能,称为**函数式 API**。 该 API 充当在`tf.keras`中构建网络的替代方法,使我们能够构建更复杂的网络,而这是顺序模型 API 无法实现的。 我们之所以专注于此 API 的原因是,它将成为构建诸如本章重点介绍的两个之类的深度网络的非常有用的工具。 建议您先完成“第 1 章”,“Keras 的高级深度学习介绍”,然后再继续本章,因为我们将参考在本章中探讨的入门级代码和概念,我们将它们带入了更高的层次。
本章的目的是介绍:
......
......@@ -65,7 +65,7 @@
由于编码器和解码器都是非线性函数,因此我们可以使用神经网络来实现两者。 例如,在 MNIST 数据集中,自编码器可以由 MLP 或 CNN 实现。 通过最小化通过反向传播的损耗函数,可以训练自编码器。 与其他神经网络类似,反向传播的要求是损失函数必须是可微的。
如果将输入视为分布,则可以将编码器解释为分布的编码器,`p``z`|`x`)解释为 解码器`p``x`|`z`。 自编码器的损耗函数表示为:
如果将输入视为分布,则可以将编码器解释为分布的编码器,`p(z | x)`,将解码器解释为分布的解码器`p(x | z)`。 自编码器的损耗函数表示为:
![](img/B14853_03_012.png) (Equation 3.1.2)
......@@ -606,7 +606,7 @@ plt.show()
现在,我们将致力于自编码器的另一个实际应用。 在这种情况下,我们将想象一下,我们有一张灰度照片,并且想要构建一个可以自动为其添加颜色的工具。 我们要复制人类的能力,以识别海洋和天空为蓝色,草地和树木为绿色,云层为白色,依此类推。
如图“图 3.4.1”所示,如果给我们前景的稻田,背景的火山和顶部的天空的灰度照片(左),我们可以添加 适当的颜色(右)。
如图“图 3.4.1”所示,如果给我们前景的稻田,背景的火山和顶部的天空的灰度照片(左),我们可以添加适当的颜色(右)。
![](img/B14853_03_12.png)
......
......@@ -112,7 +112,7 @@ EMD 背后的想法是,它是为了确定概率分布`p_data`应由![](img/B14
![](img/B14853_05_02.png)
图 5.1.2:没有重叠的两个分布的示例。 对于`p_g`θ= 0.5
图 5.1.2:没有重叠的两个分布的示例。 对于`p_g``θ = 0.5`
![](img/B14853_05_044.png)是均匀分布。 每个距离函数的差异如下:
......@@ -121,7 +121,7 @@ EMD 背后的想法是,它是为了确定概率分布`p_data`应由![](img/B14
* ![](img/B14853_05_047.png)
* ![](img/B14853_05_048.png)
由于`D[JS]`是一个常数,因此 GAN 将没有足够的梯度来驱动![](img/B14853_05_049.png)。 我们还会发现`D[KL]`或反向`D[KL]`也不起作用。 但是,通过`W(p_data, p_g)`,我们可以使平滑 通过梯度下降获得![](img/B14853_05_050.png)。 为了优化 GAN,EMD 或 Wasserstein 1 似乎是一个更具逻辑性的损失函数,因为在两个分布具有极小或没有重叠的情况下,`D[JS]`会失败。
由于`D[JS]`是一个常数,因此 GAN 将没有足够的梯度来驱动![](img/B14853_05_049.png)。 我们还会发现`D[KL]`或反向`D[KL]`也不起作用。 但是,通过`W(p_data, p_g)`,我们可以拥有平滑函数,以便通过梯度下降获得![](img/B14853_05_050.png)。 为了优化 GAN,EMD 或 Wasserstein 1 似乎是一个更具逻辑性的损失函数,因为在两个分布具有极小或没有重叠的情况下,`D[JS]`会失败。
为了帮助进一步理解,可以在以下位置找到[有关距离函数的精彩讨论](https://lilianweng.github.io/lil-log/2017/08/20/from-GAN-to-WGAN.html)
......
......@@ -2,7 +2,7 @@
# 纠缠表示 GAN
正如我们已经探索的那样,GAN 可以通过学习数据分布来产生有意义的输出。 但是,无法控制所生成输出的属性。 GAN 的一些变体,例如**条件 GAN****CGAN**)和**辅助分类器 GAN****ACGAN**),如 前两章都可以训练生成器,该生成器可以合成特定的输出。 例如,CGAN 和 ACGAN 都可以诱导生成器生成特定的 MNIST 数字。 这可以通过同时使用 100 维噪声代码和相应的一号热标签作为输入来实现。 但是,除了单热标签外,我们没有其他方法可以控制生成的输出的属性。
正如我们已经探索的那样,GAN 可以通过学习数据分布来产生有意义的输出。 但是,无法控制所生成输出的属性。 GAN 的一些变体,例如**条件 GAN****CGAN**)和**辅助分类器 GAN****ACGAN**),如前两章所讨论的,都可以训练生成器,该生成器可以合成特定的输出。 例如,CGAN 和 ACGAN 都可以诱导生成器生成特定的 MNIST 数字。 这可以通过同时使用 100 维噪声代码和相应的一号热标签作为输入来实现。 但是,除了单热标签外,我们没有其他方法可以控制生成的输出的属性。
有关 CGAN 和 ACGAN 的评论,请参阅“第 4 章”,“生成对抗网络(GANs)”和“第 5 章”,“改进的 GANs”。
......@@ -693,7 +693,7 @@ StackedGAN 的详细网络模型可以在“图 6.2.2”中看到。 为简洁
![](img/B14853_06_09.png)
图 6.2.2:StackedGAN 包含编码器和 GAN 的堆栈。 对编码器进行预训练以执行分类。 `Generator[1]``G[1]`学会合成`f[1f]`功能 假标签`y[f]`和潜在代码`z[1f]``Generator[0]``G[0]`均使用这两个伪特征`f[1f]`生成伪图像和潜在代码`z[0f]`
图 6.2.2:StackedGAN 包含编码器和 GAN 的堆栈。 对编码器进行预训练以执行分类。 `Generator[1]``G[1]`学会合成特征`f[1f]`假标签`y[f]`和潜在代码`z[1f]``Generator[0]``G[0]`均使用这两个伪特征`f[1f]`生成伪图像和潜在代码`z[0f]`
StackedGAN 以*编码器*开头。 它可能是训练有素的分类器,可以预测正确的标签。 可以将中间特征向量`f[1r]`用于 GAN 训练。 对于 MNIST,我们可以使用基于 CNN 的分类器,类似于在“第 1 章”,“Keras 高级深度学习”中讨论的分类器。
......
......@@ -68,7 +68,7 @@ pix2pix 算法与**条件 GAN**(**CGAN**)[4]相似,我们在“第 4 章
“公式 7.1.1”只是假目标数据![](img/B14853_07_002.png)的生成器`G`。 它将数据从源域`x`转换为目标域`y`
要训​​练生成器,我们必须构建 GAN。 这是正向循环 GAN,如图“图 7.1.5”所示。 该图表明,它类似于“第 4 章”,“生成对抗网络(GANs)”中的典型 GAN,由生成器`G`和判别器![](img/B14853_07_003.png)组成 可以以相同的对抗方式进行训练 通过仅利用源域中的可用实际图像`x`和目标域中的实际图像`y`无监督学习。
要训​​练生成器,我们必须构建 GAN。 这是正向循环 GAN,如图“图 7.1.5”所示。 该图表明,它类似于“第 4 章”,“生成对抗网络(GANs)”中的典型 GAN,由生成器`G`和判别器![](img/B14853_07_003.png)组成,它可以以相同的对抗方式进行训练。通过仅利用源域中的可用实际图像`x`和目标域中的实际图像`y`,进行无监督学习。
![A close up of a logo Description automatically generated](img/B14853_07_05.png)
......@@ -90,7 +90,7 @@ pix2pix 算法与**条件 GAN**(**CGAN**)[4]相似,我们在“第 4 章
循环一致性检查表明,尽管我们已将源数据`x`转换为域`y`,但`x`的原始特征仍应保留在`y`中并且可恢复。 网络`F`只是我们将从反向循环 GAN 借用的另一个生成器,如下所述。
CycleGAN 是对称的。 如图“图 7.1.7”所示,后向循环 GAN 与前向循环 GAN 相同,但具有源数据`x`和目标数据`y`的作用 逆转。 现在,源数据为`y`,目标数据为`x`。 生成器`G``F`的作用也相反。`F`现在是生成器,而`G`恢复输入。 在正向循环 GAN 中,生成器`F`是用于恢复源数据的网络,而`G`是生成器。
CycleGAN 是对称的。 如图“图 7.1.7”所示,后向循环 GAN 与前向循环 GAN 相同,但将源数据`x`和目标数据`y`的作用逆转。 现在,源数据为`y`,目标数据为`x`。 生成器`G``F`的作用也相反。`F`现在是生成器,而`G`恢复输入。 在正向循环 GAN 中,生成器`F`是用于恢复源数据的网络,而`G`是生成器。
Backward Cycle GAN 生成器的目标是合成:
......@@ -112,7 +112,7 @@ Backward Cycle GAN 生成器的目标是合成:
总而言之,CycleGAN 的最终目标是使生成器`G`学习如何合成伪造的目标数据![](img/B14853_07_002.png),该伪造的目标数据![](img/B14853_07_002.png)会在正向循环中欺骗识别器![](img/B14853_07_011.png)。 由于网络是对称的,因此 CycleGAN 还希望生成器`F`学习如何合成伪造的源数据![](img/B14853_07_012.png),该伪造的源数据可以使判别器![](img/B14853_07_007.png)在反向循环中蒙蔽。 考虑到这一点,我们现在可以将所有损失函数放在一起。
让我们从 GAN 部分开始。 受到*最小二乘 GAN(LSGAN)* [5]更好的感知质量的启发,如“第 5 章”,“改进的 GAN” 中所述,CycleGAN 还使用 MSE 作为 判别器和发电机损耗。 回想一下,LSGAN 与原始 GAN 之间的差异需要使用 MSE 损失,而不是二进制交叉熵损失。
让我们从 GAN 部分开始。 受到*最小二乘 GAN(LSGAN)* [5]更好的感知质量的启发,如“第 5 章”,“改进的 GAN” 中所述,CycleGAN 还使用 MSE 作为判别器和发电机损耗。 回想一下,LSGAN 与原始 GAN 之间的差异需要使用 MSE 损失,而不是二进制交叉熵损失。
CycleGAN 将生成器-标识符损失函数表示为:
......
......@@ -600,7 +600,7 @@ cvae = Model([inputs, y_labels], outputs, name='cvae')
![](img/B14853_08_15.png)
图 8.2.3:使用 CNN 的 CVAE 模型 输入现在包含一个 VAE 输入和一个条件标签
图 8.2.3:使用 CNN 的 CVAE 模型输入现在包含一个 VAE 输入和一个条件标签
在“图 8.2.4”中,每个标记的平均值分布在 30 个纪元后显示。 与前面章节中的“图 8.1.6”和“图 8.1.11”不同,每个标签不是集中在一个区域上,而是分布在整个图上。 这是预期的,因为潜在空间中的每个采样都应生成一个特定的数字。 浏览潜在空间会更改该特定数字的属性。 例如,如果指定的数字为 0,则在潜伏空间中导航仍将产生 0,但是诸如倾斜角度,厚度和其他书写样式方面的属性将有所不同。
......
......@@ -18,7 +18,7 @@
# 1.政策梯度定理
如“第 9 章”,“深度强化学习”中所讨论的,代理位于处于`s[t]`状态的环境中 状态空间,![](img/B14853_10_001.png)。 状态空间![](img/B14853_10_001.png)可以是离散的,也可以是连续的。 代理通过遵循策略![](img/B14853_10_005.png)从动作空间![](img/B14853_10_004.png)采取动作![](img/B14853_10_003.png)。 ![](img/B14853_10_004.png)可以是离散的或连续的。 作为执行动作![](img/B14853_10_003.png)的结果,代理会收到奖励`r[t + 1]`,并且环境转换为新状态`s[t + 1]`。 新状态仅取决于当前状态和操作。 代理的目标是学习一种最佳策略![](img/B14853_10_008.png),该策略可最大化所有状态的回报:
如“第 9 章”,“深度强化学习”中所讨论的,代理位于环境中,处于状态`s[t]`中,它是状态空间`S`的一个元素。 状态空间![](img/B14853_10_001.png)可以是离散的,也可以是连续的。 代理通过遵循策略![](img/B14853_10_005.png)从动作空间![](img/B14853_10_004.png)采取动作![](img/B14853_10_003.png)。 ![](img/B14853_10_004.png)可以是离散的或连续的。 作为执行动作![](img/B14853_10_003.png)的结果,代理会收到奖励`r[t + 1]`,并且环境转换为新状态`s[t + 1]`。 新状态仅取决于当前状态和操作。 代理的目标是学习一种最佳策略![](img/B14853_10_008.png),该策略可最大化所有状态的回报:
![](img/B14853_10_009.png) (Equation 9.1.1)
......@@ -328,7 +328,7 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
为了简单起见,我们在中删除了`r``s`的下标。“公式 10.4.1”类似于“第 9 章”,“深度强化学习”中讨论的 Q 学习中的时间差异。 下一个状态值被![](img/B14853_10_104.png)折现。估计遥远的未来奖励很困难。 因此,我们的估计仅基于近期![](img/B14853_10_105.png)。 这就是*自举*技术。
自举技术和“公式 10.4.1”中状态表示的依赖性通常会加速学习并减少差异。 从“公式 10.4.1”,我们注意到价值网络评估了当前状态`s`=`s[t]`,这是由于 策略网络的上一个操作![](img/B14853_10_106.png)。 同时,策略梯度基于当前动作![](img/B14853_10_107.png)。 从某种意义上说,评估延迟了一步。
自举技术和“公式 10.4.1”中状态表示的依赖性通常会加速学习并减少差异。 从“公式 10.4.1”,我们注意到价值网络评估了当前状态`s`=`s[t]`,这是由于策略网络的上一个操作![](img/B14853_10_106.png)。 同时,策略梯度基于当前动作![](img/B14853_10_107.png)。 从某种意义上说,评估延迟了一步。
“算法 10.4.1”总结了演员评论家方法[1]。 除了评估用于训练政策和价值网络的国家价值评估外,还可以在线进行训练。 在每个步骤中,两个网络都经过训练。 这与 REINFORCE 和带有基线的 REINFORCE 不同,在基线之前,代理完成了一个情节。 首先,在当前状态的值估计期间向价值网络查询两次,其次,为下一个状态的值查询。 这两个值都用于梯度计算中。
......@@ -1147,7 +1147,7 @@ python3 policygradient-car-10.1.1.py
在本章中,我们介绍了策略梯度方法。 从策略梯度定理开始,我们制定了四种方法来训练策略网络。 详细讨论了四种方法:REINFORCE,带有基线的 REINFORCE,演员评论家和 A2C 算法。 我们探讨了如何在 Keras 中实现这四种方法。 然后,我们通过检查代理成功达到目标的次数以及每集获得的总奖励来验证算法。
与上一章中讨论的深度 Q 网络[2]相似,基本策略梯度算法可以进行一些改进。 例如,最突出的一个是 A3C [3],它是 A2C 的多线程版本。 这使代理可以同时接触不同的经验,并异步优化策略和价值网络。 但是,在 [OpenAI](https://blog.openai.com/baselines-acktr-a2c/) 进行的实验中,与 A2C 相比,A3C 没有强大的优势,因为前者无法利用 A3C 的优势 当今提供强大的 GPU
与上一章中讨论的深度 Q 网络[2]相似,基本策略梯度算法可以进行一些改进。 例如,最突出的一个是 A3C [3],它是 A2C 的多线程版本。 这使代理可以同时接触不同的经验,并异步优化策略和价值网络。 但是,在 [OpenAI](https://blog.openai.com/baselines-acktr-a2c/) 进行的实验中,与 A2C 相比,A3C 没有强大的优势,因为前者无法利用当今提供强大的 GPU 的优势
在接下来的两章中,我们将着手于另一个领域-对象检测和语义分割。 对象检测使代理能够识别和定位给定图像中的对象。 语义分割基于对象类别识别给定图像中的像素区域。
......
......@@ -62,7 +62,7 @@
为了帮助网络找出正确的边界框坐标,将图像划分为多个区域。 每个区域称为**定位框**。 然后,网络估计每个锚框的**偏移**。 这样得出的预测更接近于基本事实。
例如,如图“图 11.2.1”所示,将普通图像尺寸`640 x 480`分为`2 x 1`个区域,从而产生两个锚框。 与`2 x 2`的大小不同,`2 x 1`的划分创建了近似方形的锚框。 在第一个锚点框中,新的偏移量是`(x_min, y_min)`和![](img/B14853_11_001.png),它们比 没有锚框的像素误差值。 第二个锚框的偏移量也较小。
例如,如图“图 11.2.1”所示,将普通图像尺寸`640 x 480`分为`2 x 1`个区域,从而产生两个锚框。 与`2 x 2`的大小不同,`2 x 1`的划分创建了近似方形的锚框。 在第一个锚点框中,新的偏移量是`(x_min, y_min)`和![](img/B14853_11_001.png),它们比没有锚框的像素误差值更小。 第二个锚框的偏移量也较小。
在“图 11.2.2”中,图像被进一步分割。 这次,锚框为`3 x 2`。第二个锚框偏移为![](img/B14853_11_002.png)和![](img/B14853_11_003.png),这是迄今为止最小的。 但是,如果将图像进一步分为`5 x 4`,则偏移量开始再次增加。 主要思想是,在创建各种尺寸的区域的过程中,将出现最接近地面真值边界框的最佳锚框大小。 使用多尺度锚框有效地检测不同大小的对象将巩固**多尺度对象检测**算法的概念。
......@@ -278,7 +278,7 @@ def centroid2minmax(boxes):
从“图 11.2.3”看来,给定一个对象边界框,有许多可以分配给对象的真实情况锚定框。 实际上,仅出于“图 11.2.3”中的说明,已经有 3 个锚定框。 如果考虑每个区域的所有锚框,则仅针对![](img/B14853_11_021.png)就有`6 x 6 = 36`个地面真实框。 使用所有 9,648 个锚点框显然过多。 所有锚定框中只有一个应与地面真值边界框相关联。 所有其他锚点框都是背景锚点框。 选择哪个对象应被视为图像中对象的真实情况锚定框的标准是什么?
选择锚框的基础称为**交并比****IoU**)。 IoU 也称为 *Jaccard 指数*。 在“图 11.3.1”中说明了 IoU。 给定 2 个区域,对象边界框`B[0]`和锚定框`A[1]`,IoU 等于 重叠除以合并区域的面积:
选择锚框的基础称为**交并比****IoU**)。 IoU 也称为 *Jaccard 指数*。 在“图 11.3.1”中说明了 IoU。 给定 2 个区域,对象边界框`B[0]`和锚定框`A[1]`,IoU 等于重叠除以合并区域的面积:
![](img/B14853_11_022.png) (Equation 11.3.1)
......@@ -738,7 +738,7 @@ s = np.linspace(0.2, 0.9, n_layers + 1)
![](img/B14853_11_09.png)
图 11.5.1 SSD 模型架构 请注意,对于![](img/B14853_11_054.png)网格,锚框的数量可能不准确。 网格显示了锚框的紧密包装。
图 11.5.1 SSD 模型架构请注意,对于![](img/B14853_11_054.png)网格,锚框的数量可能不准确。 网格显示了锚框的紧密包装。
讨论了 SSD 模型架构之后,现在让我们看一下如何在 Keras 中实现 SSD 模型架构。
......
......@@ -40,7 +40,7 @@ MI 最近已成功地从未标记的数据中提取了有用的信息,可以
换句话说,MI 是联合分布与边际分布乘积之间的 **Kullback-Leibler****KL**)散度。 回顾“第 5 章”,“改进的 GAN” ,KL 是两个分布之间距离的度量。 在 MI 的上下文中,KL 距离越大,两个随机变量`X``Y`之间的 MI 越高。 通过扩展,MI 越高,`X``Y`的依赖性越高。
由于 MI 等于边际分布的联合与乘积之间的 KL 散度,因此它暗示它大于或等于零:![](img/B14853_13_002.png)。 当`X``Y`是独立随机变量时,MI 完全等于零。 当`X``Y`是独立的时,观察一个随机变量(例如`Y`)不会提供关于另一个随机变量的信息 例如`X`)。 因此,MI 是`X``Y`独立程度的度量。
由于 MI 等于边际分布的联合与乘积之间的 KL 散度,因此它暗示它大于或等于零:![](img/B14853_13_002.png)。 当`X``Y`是独立随机变量时,MI 完全等于零。 当`X``Y`是独立的时,观察一个随机变量(例如`Y`)不会提供关于另一个随机变量的信息例如`X`)。 因此,MI 是`X``Y`独立程度的度量。
如果`X``Y`**离散随机变量**,则通过扩展 KL 散度,MI 可以计算为:
......@@ -134,7 +134,7 @@ MI 的另一种有趣解释是根据“公式 13.2.3”,可以将其重写为
![](img/B14853_13_023.png)
假设随机变量`Y`代表随机字节的 4 个最高有效位。 如果我们观察到 4 个最高有效位全为零,则数字 0 到 15 包含![](img/B14853_13_024.png),其余数字具有`P(X) = 0`。条件熵 在基数 2 中是:
假设随机变量`Y`代表随机字节的 4 个最高有效位。 如果我们观察到 4 个最高有效位全为零,则数字 0 到 15 包含![](img/B14853_13_024.png),其余数字具有`P(X) = 0`。条件熵在基数 2 中是:
![](img/B14853_13_025.png)
......@@ -148,7 +148,7 @@ MI 的另一种有趣解释是根据“公式 13.2.3”,可以将其重写为
# 3.通过最大化离散随机变量的互信息来进行无监督学习
深度学习中的经典问题是监督分类。 在“第 1 章”,“Keras 简介”和“第 2 章”,“深度神经网络”中,我们了解到 在监督分类下,我们需要标记输入图像。 我们对 MNIST 和 CIFAR10 数据集都进行了分类。 对于 MNIST,三层 CNN 和密集层可实现高达 99.3% 的精度。 对于使用 ResNet 或 DenseNet 的 CIFAR10,我们可以实现大约 93% 至 94% 的精度。 MNIST 和 CIFAR10 都被标记为数据集。
深度学习中的经典问题是监督分类。 在“第 1 章”,“Keras 简介”和“第 2 章”,“深度神经网络”中,我们了解到在监督分类下,我们需要标记输入图像。 我们对 MNIST 和 CIFAR10 数据集都进行了分类。 对于 MNIST,三层 CNN 和密集层可实现高达 99.3% 的精度。 对于使用 ResNet 或 DenseNet 的 CIFAR10,我们可以实现大约 93% 至 94% 的精度。 MNIST 和 CIFAR10 都被标记为数据集。
与监督学习不同,本章的目标是执行无监督学习。 我们的重点是没有标签的分类。 这个想法是,如果我们学习如何对所有训练数据的潜在代码向量进行聚类,那么线性分离算法可以对每个测试输入数据潜在向量进行分类。
......@@ -178,7 +178,7 @@ Ji 等人的**不变信息聚类**(**IIC**)[1] 建议从联合和边际分
![](img/B14853_13_045.png) (Equation 13.3.2)
这将创建一个`N`x`N`矩阵![](img/B14853_13_046.png),其中每个元素`Z[ij]`对应于同时观察两个元素的概率 随机变量![](img/B14853_13_047.png)。 如果对大批量进行此估计,则大样本均值将估计联合概率。
这将创建一个`N x N`矩阵![](img/B14853_13_046.png),其中每个元素`Z[ij]`对应于同时观察两个随机变量![](img/B14853_13_047.png)的概率。 如果对大批量进行此估计,则大样本均值将估计联合概率。
由于我们将使用 MI 来估计密度函数,因此 IIC 将采样限制为![](img/B14853_13_048.png)。 本质上,对于每个样本`x[i]`,我们计算其潜在代码![](img/B14853_13_049.png)。 然后,我们将`x[i]`转换,并计算其潜在代码![](img/B14853_13_050.png)。 联合分布计算如下:
......@@ -639,7 +639,7 @@ def unsupervised_labels(y, yp, n_classes, n_clusters):
`X`是一个二进制矩阵。 每行仅分配给一列。 因此,线性分配问题是组合问题。 最佳解决方案的详细信息超出了本书的范围,此处不再讨论。
最佳权重矩阵`X`显示在“图 13.5.1”中。 群集 0 被分配了标签 1。群集 1 被分配了标签 2。群集 2 被分配了标签 0。这可以从成本矩阵中直观地进行验证,因为这导致最低成本为 -4,同时确保每行仅分配给 一栏
最佳权重矩阵`X`显示在“图 13.5.1”中。 群集 0 被分配了标签 1。群集 1 被分配了标签 2。群集 2 被分配了标签 0。这可以从成本矩阵中直观地进行验证,因为这导致最低成本为 -4,同时确保每行仅分配给一列
使用此矩阵,群集类的分配显示在最右边的表中。 使用群集类分配时,第四行上只有一个错误。 结果精度为五分之四,即 80%。
......
......@@ -31,7 +31,7 @@
* **无服务器 DevOps**:借助此,应用程序开发团队可以完全专注于核心业务逻辑。 他们可以根据数据量和计算需求,根据应用范围简单地规定存储和计算需求。 这些团队无需担心任何部署,他们将以最少的配置和扩展时间开始使用服务。 无服务器架构将云功能作为服务公开给云提供商托管应用程序的地方,并负责管理硬件和相关软件组件。 这种模式提供了进入业务应用程序,算法和模型开发的快速入门,而不必担心底层基础结构,因此,可以快速构建核心功能以开始实现业务收益。
* **快速发布时间****TTM**):有了前面列出的所有优点,采用 Cloud First 策略将各种概念和原型的 TTM 降至最低。
Google 通过从头开始构建服务,从而为企业提供云服务时采取了创新的方法。 这些服务最初是由 Google 自己内部用于搜索和其他互联网规模的服务而构建的。 该平台迅速成熟,形成了一套完整的套件,可用于开发整个简单范围的应用程序,从简单的 Web 应用程序开始,再到微服务和高级分析,这些功能利用了大量的结构化和非结构化数据以及 GPU 和 **张量处理单元****TPU**),用于训练计算密集型模型。 在本书的“第 7 章”,“了解云 TPU” 中,我们将深入研究 TPU 并详细了解 TPU。 在本书中,我们将详细了解 GCP 的各个组成部分,并将专门研究如何利用 GCP 部署**人工智能****AI**)工作负载以及各种应用程序的无缝集成 作为服务。
Google 通过从头开始构建服务,从而为企业提供云服务时采取了创新的方法。 这些服务最初是由 Google 自己内部用于搜索和其他互联网规模的服务而构建的。 该平台迅速成熟,形成了一套完整的套件,可用于开发整个简单范围的应用程序,从简单的 Web 应用程序开始,再到微服务和高级分析,这些功能利用了大量的结构化和非结构化数据以及 GPU 和 **张量处理单元****TPU**),用于训练计算密集型模型。 在本书的“第 7 章”,“了解云 TPU” 中,我们将深入研究 TPU 并详细了解 TPU。 在本书中,我们将详细了解 GCP 的各个组成部分,并将专门研究如何利用 GCP **人工智能****AI**)工作负载以及各种应用程序的无缝集成部署为服务。
尽管 Cloud First 策略在实现实实在在的利益方面具有公认的优势和优势,但由于接下来要说明的原因,云的采用也受到了批评。
......
......@@ -34,7 +34,7 @@ Google 计算选项可帮助您在 Google 基础架构上运行多种大小的
Compute Engine 是 Google Cloud 提供的 IaaS; 它是在 Google 基础架构中运行的虚拟机。
Google Cloud 提供的所有区域和区域都可以使用 Compute Engine。 它具有永久性磁盘和本地**固态驱动器****SSD**)的存储选项。SSD 内部内置芯片上集成电路,不包含任何旋转头或 磁盘驱动器以读取数据。 与硬盘驱动器相比,SSD 更耐用,读取时间更快。 永久磁盘是一种网络存储,最多可以扩展到 64 TB,而本地 SSD 是加密驱动器,它实际上已连接到服务器,并且可以扩展到 3 TB。
Google Cloud 提供的所有区域和区域都可以使用 Compute Engine。 它具有永久性磁盘和本地**固态驱动器****SSD**)的存储选项。SSD 内部内置芯片上集成电路,不包含任何旋转头或磁盘驱动器以读取数据。 与硬盘驱动器相比,SSD 更耐用,读取时间更快。 永久磁盘是一种网络存储,最多可以扩展到 64 TB,而本地 SSD 是加密驱动器,它实际上已连接到服务器,并且可以扩展到 3 TB。
在旋转实例时,用户可以选择预定义的计算选项之一,也可以使用自定义的配置。 可以使用 Linux 或 Windows 操作系统启动 Compute Engine。 这些实例可以使用 CPU,GPU 和 TPU 启动,并且由于基础结构是由 Google 提供的,因此用户可以进行操作系统级的自定义。
......@@ -263,7 +263,7 @@ Cloud Spanner 可以提供适用于 MySQL 和 PostgreSQL 的所有 AI 和 ML 用
Cloud Memorystore 是基于 Redis 构建的完全托管的内存中数据存储服务。 以下是 Cloud Memorystore 的功能:
* Redis 是一个通用的数据库,可以用于很多用例。 通常,人们将 Redis 用作缓存服务,但是它具有各种不同的数据结构,可以为**物联网****IoT**),ML,流式传输等其他用例提供服务
* Redis 是一个通用的数据库,可以用于很多用例。 通常,人们将 Redis 用作缓存服务,但是它具有各种不同的数据结构,可以为**物联网****IoT**),ML,流式传输等其他用例提供服务。
* 借助 Cloud Memorystore,Google 本质上提供了可伸缩且高度可用的 Redis 实例。
* Google 针对 Cloud Memorystore 的**服务级别协议****SLA**)对于标准层为 99.9%,并且受到 Google 的网络政策和基于角色的访问控制的完全保护。
* Cloud Memorystore 分为两层:基本层和标准层:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册