提交 63b29b04 编写于 作者: W wizardforcel

2021-01-10 17:39:45

上级 16edb771
......@@ -427,13 +427,13 @@ model.add(Dense(hidden_units,
`tanh`函数将其输入映射在 -1.0 到 1.0 的范围内。 如果输出可以同时以正值和负值摆幅,则这一点很重要。 `tanh`功能在循环神经网络的内部层中更普遍使用,但也已用作输出层激活。 如果在输出激活中使用 tanh 代替`sigmoid`,则必须适当缩放使用的数据。 例如,不是使用`x = x / 255`缩放`[0.0, 1.0]`范围内的每个灰度像素,而是使用`x = (x - 127.5) / 127.5`将其分配在`[-1.0, 1.0]`范围内。
下图“图 1.3.6”显示了`sigmoid``tanh`功能。 数学上,乙状结肠可以用以下公式表示:
下图“图 1.3.6”显示了`sigmoid``tanh`功能。 数学上,Sigmoid可以用以下公式表示:
![](img/B14853_01_008.png) (Equation 1.3.5)
![](img/B14853_01_07.png)
图 1.3.6:乙状结肠和正切图
图 1.3.6:Sigmoid和正切图
预测张量距单热地面真值向量有多远称为损失。 损失函数的一种类型是`mean_squared_error`**MSE**),或者是目标或标签与预测之间差异的平方的平均值。 在当前示例中,我们使用`categorical_crossentropy`。 它是目标或标签乘积与每个类别的预测对数之和的负数。 Keras 中还有其他损失函数,例如`mean_absolute_error``binary_crossentropy`。“表 1.3.2”总结了的常见损耗函数。
......@@ -446,7 +446,7 @@ model.add(Dense(hidden_units,
表 1.3.2:常见损失函数汇总。 类别是指标签和预测中的类别数(例如:MNIST 为 10)。 所示的损耗方程式仅适用于一个输出。 平均损失值是整个批量的平均值。
损失函数的选择不是任意的,而应作为模型正在学习的标准。 对于按类别进行分类,在`softmax`激活层之后,`categorical_crossentropy``mean_squared_error`是一个不错的选择。 `binary_crossentropy`损失功能通常在`sigmoid`激活层之后使用,而`mean_squared_error``tanh`输出的选项。
损失函数的选择不是任意的,而应作为模型正在学习的标准。 对于按类别进行分类,在`softmax`激活层之后,`categorical_crossentropy``mean_squared_error`是一个不错的选择。 `binary_crossentropy`损失函数通常在`sigmoid`激活层之后使用,而`mean_squared_error``tanh`输出的选项。
在下一部分中,我们将讨论优化算法以最小化我们在此处讨论的损失函数。
......
......@@ -482,7 +482,7 @@ CGAN 的基础仍然与原始 GAN 原理相同,区别在于判别器和生成
图 4.3.2:训练 CGAN 判别器类似于训练 GAN 判别器。 唯一的区别是,所生成的伪造品和数据集的真实图像均以其相应的“一键通”标签作为条件。
生成器的新损失功能可最大程度地减少对以指定的一幅热标签为条件的伪造图像进行鉴别的正确预测。 生成器学习如何在给定一个热向量的情况下生成特定的 MNIST 数字,该数字可能使判别器蒙蔽。“图 4.3.3”显示了如何训练生成器。
生成器的新损失函数可最大程度地减少对以指定的一幅热标签为条件的伪造图像进行鉴别的正确预测。 生成器学习如何在给定一个热向量的情况下生成特定的 MNIST 数字,该数字可能使判别器蒙蔽。“图 4.3.3”显示了如何训练生成器。
![](img/B14853_04_09.png)
......
......@@ -168,7 +168,7 @@ EMD 背后的想法是,它是`d = ||x - y||`传输多少质量`γ(x, y)`,为
表 5.1.2:GAN 和 WGAN 的损失函数之间的比较
这些损失功能用于训练 WGAN,如“算法 5.1.1”中所示。
这些损失函数用于训练 WGAN,如“算法 5.1.1”中所示。
**算法 5.1.1 WGAN**。 参数的值为`α = 0.00005``c = 0.01``m = 64``n_critic = 5`
......@@ -219,7 +219,7 @@ EMD 背后的想法是,它是`d = ||x - y||`传输多少质量`γ(x, y)`,为
对于真实数据,其中`y_label = 1.0`,对于假数据,`y_label= -1.0`。 为了简化符号,我们删除了上标`(i)`。 对于判别器,当使用实际数据进行训练时,WGAN 增加`y_pred = D[w](x)`以最小化损失函数。
使用伪造数据进行训练时,WGAN 会降低`y_pred = D[w](g(z))`以最大程度地减少损失函数。 对于生成器,当在训练过程中将伪数据标记为真实数据时,WGAN 增加`y_pred = D[w](g(z))`以最小化损失功能。 请注意,`y_label`除了其符号外,对损失功能没有直接贡献。 在`tf.keras`中,“公式 5.1.23”实现为:
使用伪造数据进行训练时,WGAN 会降低`y_pred = D[w](g(z))`以最大程度地减少损失函数。 对于生成器,当在训练过程中将伪数据标记为真实数据时,WGAN 增加`y_pred = D[w](g(z))`以最小化损失函数。 请注意,`y_label`除了其符号外,对损失函数没有直接贡献。 在`tf.keras`中,“公式 5.1.23”实现为:
```py
def wasserstein_loss(y_label, y_pred):
......
......@@ -107,7 +107,7 @@ InfoGAN 的关键思想是强制 GAN 不要忽略潜在代码`c`。 这是通过
表 6.1.1:GAN 和 InfoGAN 的损失函数之间的比较
InfoGAN 的损失函数与 GAN 的区别是附加术语`-λI(c; g(z, c))`,其中`λ`是一个小的正常数。 最小化 InfoGAN 的损失功能可以将原始 GAN 的损失最小化,并将互信息最大化`I(c; g(z, c))`
InfoGAN 的损失函数与 GAN 的区别是附加术语`-λI(c; g(z, c))`,其中`λ`是一个小的正常数。 最小化 InfoGAN 的损失函数可以将原始 GAN 的损失最小化,并将互信息最大化`I(c; g(z, c))`
如果将其应用于 MNIST 数据集,InfoGAN 可以学习解开的离散码和连续码,以修改生成器输出属性。 例如,像 CGAN 和 ACGAN 一样,将使用`10-dim`一键标签形式的离散代码来指定要生成的数字。 但是,我们可以添加两个连续的代码,一个用于控制书写样式的角度,另一个用于调整笔划宽度。“图 6.1.3”显示了 InfoGAN 中 MNIST 数字的代码。 我们保留较小尺寸的纠缠代码以表示所有其他属性:
......@@ -800,7 +800,7 @@ def build_encoder(inputs, num_labels=10, feature1_dim=256):
图 6.2.5:图 6.2.3 的简单版本仅向我们显示了`L_0^(G_ent)`计算中涉及的网络元素
最后的损失功能类似于通常的 GAN 损失。 它包括判别器损失`L_i^(D)`和生成器(通过对抗性)损失`L_i^(G_adv)`。“图 6.2.6”显示了 GAN 丢失所涉及的元素。
最后的损失函数类似于通常的 GAN 损失。 它包括判别器损失`L_i^(D)`和生成器(通过对抗性)损失`L_i^(G_adv)`。“图 6.2.6”显示了 GAN 丢失所涉及的元素。
![](img/B14853_06_13.png)
......
......@@ -478,7 +478,7 @@ vae = Model(inputs, outputs, name='vae')
“列表 8.2.1”突出显示了针对 MNIST 数字的 VAE 原始代码所做的更改。 编码器输入现在是原始输入图像及其单标签的串联。 解码器输入现在是潜在空间采样与其应生成的图像的一键热标签的组合。 参数总数为 174,437。 与 β-VAE 相关的代码将在本章下一节中讨论。
损失功能没有改变。 但是,在训练,测试和结果绘制过程中会提供单热标签。
损失函数没有改变。 但是,在训练,测试和结果绘制过程中会提供单热标签。
“列表 8.2.1”:`cvae-cnn-mnist-8.2.1.py`
......
......@@ -493,7 +493,7 @@ A2C 的相应网络类似于“图 10.4.1”,因为我们仅更改了梯度计
![](img/B14853_10_064.png)
“列表 10.5.1”显示了`A2CAgent`类,该类在`tf.keras`中实现了“算法 10.5.1”。 与两个 REINFORCE 方法不同,返回值是从最后一个体验单元或状态到第一个体验单元或状态的计算得出的。 在每个体验单元,通过调用各自模型的`fit()`方法,优化第 7 行和第 9 行中用于目标和价值函数`logp_model``value_model`的网络。 注意,在对象实例化期间,熵损失的`beta`或权重设置为`0.9`,以指示将使用熵损失函数。 此外,使用 MSE 损失功能训练`value_model`
“列表 10.5.1”显示了`A2CAgent`类,该类在`tf.keras`中实现了“算法 10.5.1”。 与两个 REINFORCE 方法不同,返回值是从最后一个体验单元或状态到第一个体验单元或状态的计算得出的。 在每个体验单元,通过调用各自模型的`fit()`方法,优化第 7 行和第 9 行中用于目标和价值函数`logp_model``value_model`的网络。 注意,在对象实例化期间,熵损失的`beta`或权重设置为`0.9`,以指示将使用熵损失函数。 此外,使用 MSE 损失函数训练`value_model`
“列表 10.5.1”:`policygradient-car-10.1.1.py`
......@@ -977,7 +977,7 @@ self.value_model = Model(inputs, value, name='value')
这些行也用`build_actor_critic()`方法实现,如清单 10.6.2 所示。
建立网络模型后,下一步就是训练。 在“算法 10.2.1”至“算法 10.5.1”中,我们通过梯度上升执行目标函数最大化。 在`tf.keras`中,我们通过梯度下降执行损失函数最小化。 损失函数只是目标函数最大化的负数。 梯度下降是梯度上升的负值。“列表 10.6.3”显示了`logp`和值损失功能
建立网络模型后,下一步就是训练。 在“算法 10.2.1”至“算法 10.5.1”中,我们通过梯度上升执行目标函数最大化。 在`tf.keras`中,我们通过梯度下降执行损失函数最小化。 损失函数只是目标函数最大化的负数。 梯度下降是梯度上升的负值。“列表 10.6.3”显示了`logp`和值损失函数
我们可以利用损失函数的通用结构来统一“算法 10.2.1”至“算法 10.5.1”中的损失函数。 性能和值梯度仅在其恒定因子上有所不同。 所有性能梯度都有一个通用术语`ᐁ[θ] ln π(a[t] | s[t], θ)`。 这由策略日志概率损失函数`logp_loss()`中的`y_pred`表示。 通用术语`ᐁ[θ] ln π(a[t] | s[t], θ)`的因素取决于哪种算法,并实现为`y_true`。“表 10.6.1”显示`y_true`的值。 其余项是熵的加权梯度`β ᐁ[θ] H(π(a[t] | s[t], θ))`。 这是通过`logp_loss()`功能中`beta``entropy`的乘积实现的。 仅 A2C 使用此术语,因此默认为`self.beta=0.0`。 对于 A2C,`self.beta=0.9`
......
......@@ -1519,7 +1519,7 @@ def nms(args, classes, offsets, anchors):
在 mIoU 上,最佳性能是非归一化偏移选项,而归一化偏移设置具有最高的平均精度和召回率。 考虑到训练数据集中只有 1,000 张图像,性能并不是最新技术。 也没有应用数据增强。
从结果来看,使用损失函数的改进会降低性能。 使用平滑 L1 或焦距损失功能或同时使用两者时,会发生这种情况。“图 11.13.1”至“图 11.13.5”显示了样本预测。 可以通过执行以下操作获得图像上的对象检测:
从结果来看,使用损失函数的改进会降低性能。 使用平滑 L1 或焦距损失函数或同时使用两者时,会发生这种情况。“图 11.13.1”至“图 11.13.5”显示了样本预测。 可以通过执行以下操作获得图像上的对象检测:
```py
python3 ssd-11.6.1.py –-restore-weights=<weights_file>
......@@ -1654,7 +1654,7 @@ python3 ssd-11.6.1.py --restore-weights=ResNet56v2-4layer-extra_anchors-drinks-2
在本章中,讨论了多尺度单发物体检测的概念。 使用以接收场斑块的质心为中心的锚框,可以计算地面真值边界框偏移量。 代替原始像素误差,归一化像素误差会鼓励更适合优化的有限范围。
每个锚框都分配有地面实况类别标签。 如果锚点框不与对象重叠,则为其分配背景类,并且其偏移量不包括在偏移量损失计算中。 已经提出了焦点损失以改善类别损失功能。 可以使用平滑的 L1 损耗函数代替默认的 L1 偏置损耗函数。
每个锚框都分配有地面实况类别标签。 如果锚点框不与对象重叠,则为其分配背景类,并且其偏移量不包括在偏移量损失计算中。 已经提出了焦点损失以改善类别损失函数。 可以使用平滑的 L1 损耗函数代替默认的 L1 偏置损耗函数。
对测试数据集的评估表明,使用默认损失函数的归一化偏移可实现平均精度和召回率方面的最佳性能,而当消除偏移归一化时,mIoU 会得到改善。 通过增加训练图像的数量和变化可以提高性能。
......
......@@ -608,7 +608,7 @@ sg.send(message)
* GCP 将启用针对特定行业和企业的 AI 工具包,以提高各种规模企业的盈利能力和创新能力。 例如,谷歌已经在帮助零售商加速其数字和多渠道收入增长。 除此之外,Google 还帮助零售商变得完全由数据驱动,并提出建议(基于数据)以提高运营效率。 这可以通过利用 GCP,Chrome Enterprise 和 Android 上的 AI 工具以及整个连接的工具箱来实现。
* GCP 上的 AI 工具包还将促进需要大量数据和计算能力以及用于构建 AI 管道的过程和接口的研究项目。 例如,谷歌正在帮助 FDA MyStudies 利用现实世界的数据进行生物学研究。 Google Cloud 正在与 FDA 合作开发 MyStudies 应用程序,并提供了更好,适应性更强的保护和可配置的隐私权策略。 目的是为研究组织提供自动识别和保护个人身份信息的能力。 Google Cloud 将继续投资于各种研究和研究计划,以对该平台进行总体改进,扩大支持的评估数量,并允许与下游分析和可视化工具集成。
* AutoML Tables 使您的整个数据科学家团队能够以极高的速度和规模在结构化数据上自动构建和部署 ML 模型。 它具有出色的功能工程模型训练功能。 训练开始时,AutoML 表将自动执行某些功能工程任务,例如对输入进行标准化。 数值功能被限制在范围内,以实现更好的模型可靠性,日期时间输入参数的规范化,基本文本处理清除和停止单词删除,并为因变量创建一键编码和嵌入。 AutoML 表在线性,前馈深度神经网络,梯度提升决策树,AdaNet 和各种模型架构的集合上执行并行测试,以确定适合您的数据集的最佳模型架构。 用户将能够使用 StackDriver 日志记录查看 AutoML 表结构,并能够导出测试数据。
* AutoML Tables 使您的整个数据科学家团队能够以极高的速度和规模在结构化数据上自动构建和部署 ML 模型。 它具有出色的功能工程模型训练功能。 训练开始时,AutoML 表将自动执行某些功能工程任务,例如对输入进行标准化。 数值功能被限制在范围内,以实现更好的模型可靠性,日期时间输入参数的规范化,基本文本处理清除和停止单词删除,并为因变量创建单热编码和嵌入。 AutoML 表在线性,前馈深度神经网络,梯度提升决策树,AdaNet 和各种模型架构的集合上执行并行测试,以确定适合您的数据集的最佳模型架构。 用户将能够使用 StackDriver 日志记录查看 AutoML 表结构,并能够导出测试数据。
* AI Hub 是即将加入 GCP 的另一个非常有用的功能。 AI Hub 是用于构建最复杂的 ML 管道的一站式设施。 可以使用预配置的笔记本使用一些预训练的模型来构建 AI 应用程序,以及轻松地训练新模型。 AI Hub 还确保以一致的方式访问相关事件数据集。 还可以在模型开发上进行协作,并利用基于通用框架(例如 TensorFlow)构建的模型。 这极大地促进了在 GCP 上训练和部署模型。
* 通过 AI 平台笔记本,可以通过受保护的,公开可用的笔记本实例 URL 轻松管理 JupyterLab 实例。 它将使您能够创建和管理与 JupyterLab 预先打包的虚拟机实例。 AI Platform Notebooks 实例将支持 PyTorch 和 TensorFlow 框架。 这些笔记本将受到 GCP 身份验证和授权的保护。 AI Platform Notebooks 将随附许多预装的常用软件。
* AI 平台深度学习容器是 GCP 提供一种访问预训练模型的独特方法,可以在 GCP 上高度优化和一致的环境的帮助下快速对其进行原型化和使用。 这有助于快速构建工作流,并以最小的进入障碍和成本促进实验。 这是使 AI 开发功能完全民主化的巨大飞跃。
......
......@@ -158,7 +158,7 @@ ANN 由两个组件构建:节点和权重。 节点扮演神经元的角色,
![](img/59562508-475e-4b5f-8b4e-8ac17d1187d5.png)
# 乙状结肠激活
# Sigmoid 激活
对于所有实数输入,此功能的输出范围从零到一。 这对于从神经元生成概率分数非常重要。 该函数也是连续且非线性的,有助于保持输出的非线性。 同样,曲线的梯度在原点附近陡峭,并且随着我们开始沿`x`轴移动而饱和。 这意味着,围绕原点的输入会发生微小变化,从而导致输出发生重大变化。 此特性有助于分类任务,因为它试图使输出保持接近零或一。 以下是针对输入`x`进行 Sigmoid 激活的方程式:
......@@ -350,7 +350,7 @@ TensorFlow 图是在图中组织的一系列操作。 首先以 TensorFlow 图
这将输出如下内容:`add:0``shape=()``dtype=string`。 您期待`heythere`吗? 这不会发生,因为 TensorFlow 仅在激活会话后才运行图形。 通过定义常量,我们只制作了一个图形,这就是为什么打印试图告诉运行该图形的总和的原因。 因此,让我们创建一个会话。
# 建立会
# 建立会
`tf.Session`对象用于创建会话。 默认情况下,它采用当前图形,或者您可以指定要使用的图形:
......
......@@ -235,13 +235,13 @@ L1 正则化将权重的绝对值作为惩罚系数添加到损失函数中,
使用 L2 正则化的优点是易于计算平方并通过损失函数确保连续性。 但这是以敏感性为代价的。 由于平方项,L2 正则化会放大离群值的损失函数,因此使成本函数非常敏感。 在下一小节中,我们将看到什么是丢弃以及如何避免过拟合。
# 退出
# 丢弃
丢弃是处理神经网络过拟合(或深度学习)的独特方法。 为了引入网络中的随机性,丢弃操作通过删除与该节点之间的权重连接来随机删除几个节点(神经元)。 丢弃在每个迭代中随机发生。 下图显示了 DFN 中丢弃的工作方式:
![](img/92ad7f67-8956-4811-8344-8537f848d734.png)
# 早
# 早期停止
在讨论验证集时,我们稍后将讨论验证集在过拟合中的作用。 在训练过程中,我们实际上不知道有多少次迭代训练模型。 这通常是过拟合的原因。 知道何时停止是重要的事情! 训练时设置验证集有助于我们决定何时停止。 由于训练算法将训练损失降到最低,因此不管模型是否过拟合,损失将始终保持减少。 因此,除了训练损失,我们还监视验证集上的损失。 训练和验证损失都将持续减少,直到达到最佳点为止。 此后,由于过拟合,验证损失将再次开始增加。 验证和训练损失开始出现分歧的点是我们需要停止过度训练并避免过拟合的点。 您可以在下图中观察到相同的结果:
......@@ -361,12 +361,12 @@ trainX, valX, trainY, valY = train_test_split(trainX, trainY, test_size = 0.1, r
# random_state is used for randomly shuffling the data.
```
# 型号参数
# 模型参数
与准备数据有关的大多数任务现已完成。 现在,我们将重点介绍深层前馈模型。 在构建模型图之前,我们将确定模型的以下参数:
* **类的数量**`CLASS_NUM`):在 MNIST 时尚数据集中,有 10 个类。 因此,我们将分类的类数为 10。
* **输入神经元的数量**`INPUT_UNITS`):我们将输入层中的一个神经元附加到图像的一个像素值。 输入层中有 784(`28 x 28`)个神经元。
* **输入神经元的数量**`INPUT_UNITS`):我们将输入层中的一个神经元附加到图像的一个像素值。 输入层中有 784(`28 x 28`)个神经元。
* **第一层神经元的数量**`HIDDEN_LAYER_1_UNITS`):我们决定在网络的第一隐藏层中保留 256 个神经元。 您可以尝试将此数字更改为您的选择。
* **第二层神经元的数量**`HIDDEN_LAYER_2_UNITS`):在第二层隐藏层中,保留了 128 个神经元。 同样,您可以将此数字更改为选择之一。
* **输出层中神经元的数量**`OUTPUT_LAYER_UNITS`):由于我们将使用 softmax 激活,因此输出层中的每个神经元将输出属于该类别的输入的概率。 因此,我们需要使神经元的数量等于类的数量。
......@@ -409,9 +409,9 @@ EPOCHS = 10
# number of iterations we will perform to train
```
# 一键编码
# 单热编码
一键编码是一个矢量,其大小等于仅包含二进制值(0 和 1)的类的数量。 用于表示标签。 向量在类的索引处包含 1,其余均为 0。 在我们的案例中,我们有 10 个班级; 因此,用于表示第三类(套衫)的标签的一个热编码矢量将如下所示:
单热编码是一个矢量,其大小等于仅包含二进制值(0 和 1)的类的数量。 用于表示标签。 向量在类的索引处包含 1,其余均为 0。 在我们的案例中,我们有 10 个班级; 因此,用于表示第三类(套衫)的标签的一个热编码矢量将如下所示:
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
......@@ -497,7 +497,7 @@ with tf.name_scope('out_layer') as scope:
layer3 = tf.add(tf.matmul(layer2, weights3), biases3, name = 'out_layer')
```
# 增加损失功能
# 添加损失函数
我们之前谈到了损失。 由于这是分类任务,因此交叉熵损失将是最合适的。 要使用交叉熵,预测和预期输出必须是概率分布。 这是通过 softmax 激活来完成的。 TensorFlow 中的交叉熵损失函数在单个函数中结合了 softmax 激活和交叉熵损失,我们无需在网络的最后一层单独应用 softmax 激活。
......@@ -541,7 +541,7 @@ with tf.name_scope('accuracy') as scope:
avgAccuracy = tf.reduce_mean(tf.cast(correctPredictions, tf.float32))
```
# 进行训练课程
# 进行训练
到目前为止,我们已经创建了包含层,损耗和优化器的模型图。 但是,要使图表栩栩如生,我们需要运行该会话! 对于每次迭代,都会生成一批输入图像和标签。 每次调用`run`函数时,都需要将数据馈入占位符。 生成的批量数据通过`feed_dict`参数输入到占位符。 每次运行`train`操作时,权重都会根据损失进行更新。 张量仅在活动会话中保持其值:
......
# 受限玻尔兹曼机和自编码器
# 受限玻尔兹曼机和自编码器
当您在线购物或浏览电影时,您可能会想知道“您可能也喜欢的电影”产品如何工作。 在本章中,我们将说明幕后算法,称为**受限玻尔兹曼机****RBM**)。 我们将首先回顾 RBM 及其发展路径。 然后,我们将更深入地研究其背后的逻辑,并在 TensorFlow 中实现 RBM。 我们还将应用它们来构建电影推荐器。 除了浅层架构,我们还将继续使用称为**深度信念网络****DBN**)的 RBM 堆叠版本,并使用它对图像进行分类,当然,我们在 TensorFlow 中实现。
......@@ -7,7 +7,7 @@ RBM 通过尝试重建输入数据来找到输入的潜在表示。 在本章中
我们将深入探讨以下主题:
* 什么是 RBM?
* 成果管理制的发展路径
* RBM的发展路径
* 在 TensorFlow 中实现 RBM
* 电影推荐的 RBM
* 数据库
......@@ -62,9 +62,9 @@ RBM 中显然没有输出层,因此学习与前馈网络中的学习有很大
这些梯度称为对比散度。
我希望您现在已经掌握了成果管理制背后的理论。 在简要介绍了 RBM 的演变路径之后,您将在动手部分中增强对 RBM 的理解,我们将在下一节中进行介绍。
我希望您现在已经掌握了RBM背后的理论。 在简要介绍了 RBM 的演变路径之后,您将在动手部分中增强对 RBM 的理解,我们将在下一节中进行介绍。
# 成果管理制的发展路径
# RBM的发展路径
顾名思义,RBM 源自玻尔兹曼机。玻尔兹曼机由 Geoffrey Hinton 和 Paul Smolensky 于 1983 年发明,是一种网络类型,其中所有单元(可见和隐藏)都处于二进制状态并连接在一起。 尽管他们具有学习有趣的表示形式的理论能力,但对他们来说还是有许多实际问题,包括训练时间,训练时间随模型大小呈指数增长(因为所有单元都已连接)。 玻尔兹曼机的总体示意图如下:
......@@ -286,7 +286,7 @@ DBN 也有许多有趣的应用程序,例如:
我们刚刚完成了 RBM 算法的实现。 在下一节中,我们将其应用于电影推荐。
# 电影推荐的 RBM
# 用于电影推荐的 RBM
众所周知,电子商务网站会根据用户的购买和浏览历史向他们推荐产品。 相同的逻辑适用于电影推荐。 例如,Netflix 根据用户在观看的电影上提供的反馈(例如评分)来预测用户喜欢的电影。 RBM 是推荐系统最受欢迎的解决方案之一。 让我们看一下推荐的 RBM 的工作原理。
......@@ -668,7 +668,7 @@ DBN 类接受的参数包括`layer_sizes`(每层的单元数,从第一个输
最后一层的输出是提取的特征,这些特征用于下游任务,例如分类,回归或聚类。 在下一节中,我们将说明如何将 DBN 应用于图像分类。
# DBN 用于图像分类
# 用于图像分类的 DBN
我们将使用的数据集由`1797` 10 类手写数字图像组成。 每个图像的尺寸为`8 x 8`,每个像素值的范围为 0 到 16。让我们读取数据集并将数据缩放到`0``1`的范围,然后将其分为训练和测试集,如下所示 :
......@@ -1084,7 +1084,7 @@ Epoch 00050: loss did not improve from 0.00003
Area under precision-recall curve: 0.8279249913991501
```
# 稀疏自编码器
# 稀疏自编码器
在训练神经网络时,我们通常会在损失目标函数中施加约束,以控制网络的容量并防止过拟合。 自编码器也不例外。 我们可以在自编码器的损失函数中添加 L1 范数正则化项,从而引入稀疏约束。 这种自编码器称为稀疏自编码器。
......@@ -1268,7 +1268,7 @@ Area under precision-recall curve: 0.8311662962345293
学习自编码器是旅程的后半部分,因为它们具有相似的想法,即通过输入数据重建来寻找潜在的输入表示形式。 在讨论了什么是自编码器并讨论了它们的发展路径之后,我们说明了各种自编码器,这些编码器按其架构或正则化形式进行了分类。 我们还在信用卡欺诈检测中应用了不同类型的自编码器。 每种类型的自编码器都打算提取某些结构或强制形式的鲁棒表示。
# 行使
# 练习
您可以使用自编码器构建电影推荐器吗?
......
......@@ -13,11 +13,11 @@
* 带有 CNN 的著名物体探测器
* 您的第一个 TensorFlow 对象检测器
# 深度前馈网络存在问题
# 深度前馈网络存在问题
在“第 2 章”,“深度前馈网络”中,我们学习了使用深度前馈网络识别(分类)时尚商品的图像。 每个图像的大小为`28 x 28`,我们将一个神经元连接到每个像素。 这样,我们在第一层本身就有`28 x 28 = 784`个神经元。 但是在现实世界中,图像几乎没有这么小。 让我们考虑一个大小为`500 x 500`的中型图像。因此,现在,在第一层中,我们将需要 250,000 个神经元。 对于这样大小的图像,第一层中有大量的神经元。 因此,网络对于该任务而言在计算上变得过于昂贵。 那么,我们如何解决这个问题呢? 同样,生物学的灵感来了! 在下一节中,我们将详细介绍 CNN 的发展。
# CNN 的演进之路
# CNN 的演进之路
在 1960 年代,人们发现动物的视觉皮层并没有像深度前馈网络那样处理图像。 而是,视觉皮层中的单个神经元连接到一个小的区域(而不是单个像素),这称为感受野。 感受野中的任何活动都会触发相应的神经元。
......@@ -98,7 +98,7 @@ CNN 的总体思想是保持通过过滤器提取特征并增加激活图的深
在本节中,我们将介绍一些用于图像分类任务的最成功的 CNN 架构,例如 VGGNet,InceptionNet 和 ResNet。 这些网络由于其强大的特征提取功能,还被用作对象检测模型中的特征提取器。 我们将在以下小节中简要讨论网络。
# 虚拟网
# VGGNet
VGGNet 由牛津大学的 K. Simonyan 和 A. Zisserman 开发。 该网络在 ILSVRC 2014 上获得亚军。VGGNet 是 AlexNet 的改进,用较小的`3 x 3`卷积代替了 11 和 5 的较高卷积,在多个堆叠层上保持一致。 尽管 VGGNet 并非 ILSVRC 的赢家,但其简单,易于实现的架构及其强大的特征提取功能使 VGGNet 成为对象检测或分割任务中基础网络的明智选择。
......@@ -110,7 +110,7 @@ VGGNet 具有许多基于堆叠层数的变体。 分别具有 16 层和 19 层
接下来,我们将讨论 ILSVRC 2014 的获奖架构-InceptionNet。
# 盗梦网
# GoogLeNet
GoogLeNet(通常称为 **InceptionNet**)是 2014 年 ILSVRC 竞赛的获胜者。 让我们在以下几点进行讨论:
......@@ -277,7 +277,7 @@ dataObj.visualise_data([100, 4000, 2, 8000])
![](img/069ef92a-0fec-4796-b1f3-178201d59131.png)
接下来,我们将标签转换为单一编码形式。 我们已经在“第 2 章”,“深度前馈网络”中讨论了一种热编码。 如果您不记得它,可以返回参考“第 2 章”,“深度前馈网络”下的一键编码。 CIFAR-10 的类数为 10,并且类属性`classNum`的默认值为`10`。 以下函数将标签转换为一键编码:
接下来,我们将标签转换为单一编码形式。 我们已经在“第 2 章”,“深度前馈网络”中讨论了一种热编码。 如果您不记得它,可以返回参考“第 2 章”,“深度前馈网络”下的单热编码。 CIFAR-10 的类数为 10,并且类属性`classNum`的默认值为`10`。 以下函数将标签转换为单热编码:
```py
def one_hot_encoder(self):
......@@ -534,7 +534,7 @@ with tf.Session() as sess:
因此,对象检测网络具有两个单独的子网来执行这两个任务。 第一个网络在图像中生成不同的兴趣区域,而第二个网络对它们进行分类。
# 神经网络
# R-CNN
这是用于对象检测的深度学习方法的早期阶段之一。 它利用选择性搜索算法生成区域提议。 区域提议是图像中任何包含对象的可能性很大的长宽比的有界框。 选择性搜索是一种基于图的算法,该算法首先使用像素强度划分区域,然后根据颜色,纹理和大小对它们进行分层分组以生成区域。 该算法的问题在于,即使对于低分辨率图像,它也会产生太多区域提议。 因此,R-CNN 将区域提议限制为 2,000。
......
......@@ -166,7 +166,7 @@ Total vocabulary (unique characters): 57
请注意,最后一个子序列`es`不够长,因此我们可以简单地忽略它。
由于神经网络模型仅吸收数字数据,因此字符的输入和输出序列由一键编码的矢量表示。 我们通过将 57 个字符映射到从`0``56`的索引以及另一个相反的索引来创建字典:
由于神经网络模型仅吸收数字数据,因此字符的输入和输出序列由单热编码的矢量表示。 我们通过将 57 个字符映射到从`0``56`的索引以及另一个相反的索引来创建字典:
```py
>>> index_to_char = dict((i, c) for i, c in enumerate(chars))
......@@ -217,7 +217,7 @@ Total vocabulary (unique characters): 57
(31962, 100, 57)
```
同样,每个样本都由一键编码字符的`100`元素组成。 我们终于准备好了训练数据集,现在是时候构建我们​​的原始 RNN 模型了。 让我们训练一个具有两个循环层的模型,如下所示:
同样,每个样本都由单热编码字符的`100`元素组成。 我们终于准备好了训练数据集,现在是时候构建我们​​的原始 RNN 模型了。 让我们训练一个具有两个循环层的模型,如下所示:
![](img/c2e8a6c3-2717-45e3-80e3-8cf434b83e6a.png)
......@@ -859,7 +859,7 @@ Keras 包含来自 [IMDb](http://www.imdb.com) 的 50,000 条电影评论的数
>>> from keras.preprocessing import sequence >>> maxlen = 200 >>> x_train = sequence.pad_sequences(x_train, maxlen=maxlen) >>> x_test = sequence.pad_sequences(x_test, maxlen=maxlen) >>> print('x_train shape:', x_train.shape) x_train shape: (25000, 200) >>> print('x_test shape:', x_test.shape) x_test shape: (25000, 200)
```
现在,我们有 200 个单词的输入序列,每个单词由`0``4999`的整数表示。 我们可以进行传统的一键编码,但是所生成的 3,000 维稀疏输出将使训练相应的 RNN 模型过慢。 取而代之的是,我们执行单词嵌入以将单词索引转换为较低维的密集向量。 在 Keras 中,我们将嵌入层用作模型的第一层:
现在,我们有 200 个单词的输入序列,每个单词由`0``4999`的整数表示。 我们可以进行传统的单热编码,但是所生成的 3,000 维稀疏输出将使训练相应的 RNN 模型过慢。 取而代之的是,我们执行单词嵌入以将单词索引转换为较低维的密集向量。 在 Keras 中,我们将嵌入层用作模型的第一层:
```py
>>> from keras.models import Sequential >>> from keras.layers import Embedding >>> model = Sequential() >>> model.add(Embedding(max_words, 128, input_length=maxlen))
......
......@@ -831,7 +831,7 @@ CGAN 认为条件变量是已知的。 因此,在训练期间将条件变量
>>> d_loss = d_real_loss + d_fake_loss
```
第二部分是相互信息。 对于一键编码的分类变量,通过交叉熵来度量:
第二部分是相互信息。 对于单热编码的分类变量,通过交叉熵来度量:
```py
>>> cat = c[:, n_cont:]
......
......@@ -94,7 +94,7 @@
在神经网络的训练过程中,可能会出现这样的情况,即偏差和权重值的微小变化可能会以剧烈的方式影响神经网络的输出。 理想情况下,这不应发生。 偏差或权重值的微小变化都应该仅导致输出的微小变化。 使用阶跃函数时,权重和偏差项的变化会在很大程度上影响输出,因此需要阶跃函数以外的其他东西。
神经元的运作背后是一种功能。 在线性神经元的情况下,我们看到其操作是基于阶跃函数的。 我们有一堆能够捕获非线性的函数。 乙状结肠功能就是这样的功能,使用该功能的神经元通常被称为乙状结肠神经元。 与阶跃函数不同,对于乙状神经元,将使用以下规则生成输出:
神经元的运作背后是一种功能。 在线性神经元的情况下,我们看到其操作是基于阶跃函数的。 我们有一堆能够捕获非线性的函数。 Sigmoid功能就是这样的功能,使用该功能的神经元通常被称为Sigmoid神经元。 与阶跃函数不同,对于乙状神经元,将使用以下规则生成输出:
![](img/c07baaa1-6d33-4e1b-b759-e81faa535390.png)
......@@ -224,7 +224,7 @@ Sigmoid 激活函数输出的值范围为 0-1,但是我们正在处理二进
这是我们没有选择一个更简单且不凸的损失函数的原因之一。 (如果您不熟悉凸和非凸等术语,请不要担心。)
我们现在有损失功能。 请记住,这仅是整个数据集的一个实例,而不是我们将要应用梯度下降的函数。 前面的函数将帮助我们定义最终将使用梯度下降进行优化的成本函数。 让我们看看成本函数的样子。
我们现在有损失函数。 请记住,这仅是整个数据集的一个实例,而不是我们将要应用梯度下降的函数。 前面的函数将帮助我们定义最终将使用梯度下降进行优化的成本函数。 让我们看看成本函数的样子。
![](img/2fe2f681-2cd6-4422-b942-fba491e140e1.png)
......@@ -369,7 +369,7 @@ CNN 的核心是一个称为卷积的操作(在计算机视觉和图像处理
![](img/82595ac0-af4d-4777-8394-1939beb4c4b7.png)
因此,在一键编码中,我们的字母输入矢量/词汇量不过是四个`4 x 1`矩阵,每个矩阵表示一个特定的字母。 一键编码是这些任务的标准做法。 该步骤实际上是数据预处理步骤。
因此,在单热编码中,我们的字母输入矢量/词汇量不过是四个`4 x 1`矩阵,每个矩阵表示一个特定的字母。 单热编码是这些任务的标准做法。 该步骤实际上是数据预处理步骤。
# 初始化权重矩阵等
......
......@@ -156,7 +156,7 @@ gen_image(test_images[0])
# 创建读取标签文件的功能
MNIST 数据集中有两个可用的标签文件:`train-labels-idx1-ubyte``t10k-labels-idx1-ubyte`。 要查看这些文件,我们可以使用以下函数,该函数将文件名的输入作为参数并生成一个由一键编码的标签组成的数组:
MNIST 数据集中有两个可用的标签文件:`train-labels-idx1-ubyte``t10k-labels-idx1-ubyte`。 要查看这些文件,我们可以使用以下函数,该函数将文件名的输入作为参数并生成一个由单热编码的标签组成的数组:
```py
def loadLabelFile(filelabel):
......
......@@ -433,7 +433,7 @@ from sklearn.preprocessing import OneHotEncoder
import cntk as C # if you have not done this before in the project
```
`sklearn`模块的`fetch_openml()`方法可帮助我们将本示例中使用的数据集直接下载到项目中,即 MNIST 手写数字数据集。 `OneHotEncoder`方法用于标签的一键编码。
`sklearn`模块的`fetch_openml()`方法可帮助我们将本示例中使用的数据集直接下载到项目中,即 MNIST 手写数字数据集。 `OneHotEncoder`方法用于标签的单热编码。
2. 接下来,设置程序执行过程中所需的几个常量:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册