提交 0b21df06 编写于 作者: W wizardforcel

2021-01-05 22:50:05

上级 2fd5ab1f
......@@ -45,9 +45,9 @@
下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:
* Windows 的 WinRAR / 7-Zip
* Mac 版 Zipeg / iZip / UnRarX
* 适用于 Linux 的 7-Zip / PeaZip
* Windows 的 WinRAR/7-Zip
* Mac 版 Zipeg/iZip/UnRarX
* 适用于 Linux 的 7-Zip/PeaZip
本书的代码包也托管在 [GitHub](https://github.com/PacktPublishing/Hands-On-Deep-Learning-Architectures-with-Python) 中。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。
......
......@@ -36,11 +36,11 @@
# 分类
当对目标输出值而不是原始值进行分类时(如回归),这是一项分类任务。 例如,我们可以根据输入特征,花瓣长度,花瓣宽度,萼片长度和萼片宽度对不同种类的花进行分类。 输出类别为杂色,setosa 和 virginica。 逻辑回归,决策树,朴素贝叶斯等算法是分类算法。 我们将在第 2 章中介绍分类的详细信息。
当对目标输出值而不是原始值进行分类时(如回归),这是一项分类任务。 例如,我们可以根据输入特征,花瓣长度,花瓣宽度,萼片长度和萼片宽度对不同种类的花进行分类。 输出类别为杂色,山和弗吉尼亚。 逻辑回归,决策树,朴素贝叶斯等算法是分类算法。 我们将在第 2 章中介绍分类的详细信息。
# 无监督学习
当我们没有输入的相应目标输出值时,将使用无监督学习。 它用于了解数据分布并发现数据点之间某些种类的相似性。 由于没有可供学习的目标输出,因此无监督算法依靠初始化程序来生成初始决策边界,并在它们遍历数据时对其进行更新。 在多次处理数据之后,算法将更新为优化的决策边界,该边界将基于相似性对数据点进行分组。 这种方法称为聚类,并且使用了诸如 k 均值的算法。
当我们没有输入的相应目标输出值时,将使用无监督学习。 它用于了解数据分布并发现数据点之间某些种类的相似性。 由于没有可供学习的目标输出,因此无监督算法依靠初始化程序来生成初始决策边界,并在它们遍历数据时对其进行更新。 在多次处理数据之后,算法将更新为优化的决策边界,该边界将基于相似性对数据点进行分组。 这种方法称为聚类,并且使用了诸如 K 均值的算法。
# 强化学习
......@@ -158,13 +158,13 @@ ANN 由两个组件构建:节点和权重。 节点扮演神经元的角色,
![](img/9a4c25fc-874f-4b01-974a-9706c0615bb5.png)
以下是 S激活函数的图解:
以下是 Sigmoid激活函数的图解:
![](img/236e7085-e234-4c6d-9c6d-11b01287ea14.png)
# Tanh 激活
Tanh 或 tan 双曲函数类似于 S函数,但输出范围从`-1``1`而不是从`0``1`。 通常在输出的符号对我们也很重要的情况下使用。 以下是 tanh 激活函数的图:
Tanh 或 tan 双曲函数类似于 Sigmoid函数,但输出范围从`-1``1`而不是从`0``1`。 通常在输出的符号对我们也很重要的情况下使用。 以下是 tanh 激活函数的图:
![](img/56dee9ca-4953-4a1f-a101-587a1cc5a98d.png)
......@@ -196,7 +196,7 @@ ReLU 的一种修改形式是泄漏的 ReLU。 ReLU 以负值完全使神经元
在继续进行之前,让我们快速设置编码环境。 本书在所有章节中都使用 Python 编程语言。 因此,我们希望您具有 Python 的先验知识。 我们将使用两个最受欢迎的深度学习开源框架-TensorFlow 和 Keras。 首先开始设置 Python(以防您尚未安装)。
我们强烈建议使用 Linux(最好是 Ubuntu)或 macOS 操作系统。 原因是大多数用于深度学习的库都构建为与 Linux / Unix 操作系统最兼容。 这些操作系统将涵盖所有设置说明。
我们强烈建议使用 Linux(最好是 Ubuntu)或 macOS 操作系统。 原因是大多数用于深度学习的库都构建为与 Linux/Unix 操作系统最兼容。 这些操作系统将涵盖所有设置说明。
在安装 Python 时,建议安装版本 3.6,而不是最新的 3.7 或更高版本。 这是为了避免由于 TensorFlow 中用作变量名称的 Python 中的新关键字而导致 TensorFlow 和 Python 之间发生不可预料的冲突。
......
......@@ -101,7 +101,7 @@ RNN 可以分为*多对一*,*一对多*,*多对多*(同步)和*多对多
* 基于当前输入![](img/2040af3e-d1dc-44dc-92dc-a3f919bd1eaa.png)和通过![](img/562308e5-cbaa-4ff7-9b79-bd683a4011bd.png)的先前隐藏状态![](img/383bc003-23ee-43db-9fa1-59937dbe7657.png)计算时间步长`t`和![](img/54984d48-521b-41b9-9685-b73dce04345f.png)的隐藏状态,其中`a`是激活状态 功能。 RNN 中隐藏层的激活函数的典型选择包括 tanh 和 ReLU。
* 同样,![](img/70c19fab-defe-4e68-909f-f6211104a2c7.png)取决于![](img/c9869f70-3cd8-4f6e-93bc-550caa70f200.png),依此类推。 ![](img/024ed476-77bb-45bd-9b60-8608e00ad27e.png)也依赖于![](img/c9307527-4369-491f-a419-a486f8f49795.png),按照惯例,该![](img/c9307527-4369-491f-a419-a486f8f49795.png)设置为全零。
* 由于对时间步长具有这种依赖性,因此可以将隐藏状态视为网络的内存,从以前的时间步长中捕获信息。
* 将时间步长`t`的输出计算为![](img/450661ff-68a5-4ba1-a496-4311c409ad7e.png),其中 g 是激活函数。 根据执行的任务,它可以是用于二进制分类的 S函数,用于多类分类的 softmax 函数以及用于回归的简单线性函数。
* 将时间步长`t`的输出计算为![](img/450661ff-68a5-4ba1-a496-4311c409ad7e.png),其中 g 是激活函数。 根据执行的任务,它可以是用于二进制分类的 Sigmoid函数,用于多类分类的 softmax 函数以及用于回归的简单线性函数。
与传统的神经网络类似,所有的权重`U``V``W`均使用反向传播算法进行训练。 但是不同之处在于,在当前时间`t`上,我们需要计算除当前时间之外的所有先前`t`-1 个时间步的损耗。 这是因为权重由所有时间步共享,并且一个时间步的输出间接依赖于所有先前的时间步,例如权重的梯度。 例如,如果要计算时间步`t = 5`的梯度,则需要向后传播前四个时间步,并对五个时间步的梯度求和。 这种特殊的反向传播算法称为**时间上的反向传播(BPTT)**
......
......@@ -29,7 +29,7 @@
**不确定性**是由于知识有限而无法准确描述未来结果的状态。 在机器学习或深度学习的上下文中,这与预测结果的含糊性有关,或者与人的主观定义和概念有关,而不是自然的客观事实。 不确定性很重要,因为它为我们提供了有关预测的自信程度的信息-如果预测不足或过分虚假,我们可能会拒绝我们的预测。
我们的深度学习模型通常无法估计这种不确定性。 他们产生预测,并盲目接受它们的准确率。 您可能会争辩说,最后一个 S或 softmax 层提供了预测结果的可能性。 这不是信心吗? 概率越高,置信度越高? 不幸的是,这不是信心,因为概率描述了一个结果**相对于另一个**的结果,但并不能解释整体的信心。
我们的深度学习模型通常无法估计这种不确定性。 他们产生预测,并盲目接受它们的准确率。 您可能会争辩说,最后一个 Sigmoid或 softmax 层提供了预测结果的可能性。 这不是信心吗? 概率越高,置信度越高? 不幸的是,这不是信心,因为概率描述了一个结果**相对于另一个**的结果,但并不能解释整体的信心。
在许多情况下,不知道不确定性可能会带来问题。 例如,2016 年 5 月,一辆 AI 辅助车辆在未能识别出明亮的天空下的白色拖拉机拖车时坠毁。 早在 2016 年,Google 相册中的图像分类系统将两名非洲人标记为大猩猩。 如果将不确定性纳入算法,则可能会避免错误的决策,因为低信度的预测将被拒绝。
......@@ -404,7 +404,7 @@ The predictions for the notMNIST example are: [2.0, 5.0, 2.0, 2.0, 2.0, 2.0, 2.0
![](img/4d3a74fc-c56e-4515-99d6-2469428dabe7.png)
然后,从双胞胎网络中提取的特征将输入判别器,以确定两个输入数据样本是否属于同一类。 判别器首先计算特征对之间的距离(例如 L1 距离,L2 距离,余弦相似度)。 然后,该距离将通过 S激活传递到全连接层,以产生两个输入来自同一类别的概率。
然后,从双胞胎网络中提取的特征将输入判别器,以确定两个输入数据样本是否属于同一类。 判别器首先计算特征对之间的距离(例如 L1 距离,L2 距离,余弦相似度)。 然后,该距离将通过 Sigmoid激活传递到全连接层,以产生两个输入来自同一类别的概率。
简而言之,双胞胎网络试图学习有效的功能,以便揭示两个输入之间的关系。 为了帮助更好地了解这个基于度量的网络,我们将实现它,并将其应用于数据量有限的人脸识别项目。
......
......@@ -102,7 +102,7 @@
![](img/f641c5d4-03a7-4cf6-8f46-eacadf6206f4.png)
但是,为什么在捕获非线性方面,S函数比阶跃函数好呢? 让我们比较它们在图形中的性能以了解这一点:
但是,为什么在捕获非线性方面,Sigmoid函数比阶跃函数好呢? 让我们比较它们在图形中的性能以了解这一点:
![](img/c67899b6-21c7-48ed-adf3-4fd1efd01d29.png)
......@@ -185,7 +185,7 @@
第一个矩阵包含训练集中的所有实例(没有响应变量`y`),第二个矩阵是我们刚刚定义的权重矩阵。 乘法的结果存储在变量![](img/a85b6a85-7af3-46bc-aa93-70b13630a83d.png)中(此变量可以命名为任何名称,上标表示它与网络的第一个隐藏层有关)。
在将这些结果发送到下一层将应用激活功能的神经元之前,我们还有一步。 S激活函数和输入层的最终输出如下所示:
在将这些结果发送到下一层将应用激活功能的神经元之前,我们还有一步。 Sigmoid激活函数和输入层的最终输出如下所示:
![](img/20a23d3e-6c8c-44ac-874b-3e088653fec9.png)
......
......@@ -51,7 +51,7 @@ YOLO 的检测机制基于单个**卷积神经网络**(**CNN**),该预测
* 边界框的形状将小于完全包含对象的网格单元的边界框的大小,因为网格单元只能看到对象的一部分并从中推断出其形状。 如果网格单元仅包含对象的一小部分,则它可能根本无法识别该对象。
* 边界框类置信度将很低,因为部分图像产生的 IOU 值将不符合地面真实性预测。
5. 通常,每个网格单元只能包含一个类,但是使用锚框原理,可以将多个类分配给一个网格单元。 锚框是预定义的形状,表示要检测的类的形状。 例如,如果我们检测到三个类别(汽车,摩托车和人),那么我们可能可以通过两个锚框形状来解决-一个代表摩托车和人,另一个代表汽车。 可以通过查看先前图像中最右边的图像来确认。 我们可以通过使用 k 均值聚类等算法分析每个类的形状来确定锚框形状以形成训练 CSV 数据。
5. 通常,每个网格单元只能包含一个类,但是使用锚框原理,可以将多个类分配给一个网格单元。 锚框是预定义的形状,表示要检测的类的形状。 例如,如果我们检测到三个类别(汽车,摩托车和人),那么我们可能可以通过两个锚框形状来解决-一个代表摩托车和人,另一个代表汽车。 可以通过查看先前图像中最右边的图像来确认。 我们可以通过使用 K 均值聚类等算法分析每个类的形状来确定锚框形状以形成训练 CSV 数据。
让我们以前面的图像为例。 在这里,我们有三类:`car``motorcycle``human`。 我们假设一个 5 x 5 的网格具有 2 个锚定框和 8 个维度(5 个边界框参数(`x``y``w``h``c`)和 3 类(c1,c2 和 c3))。 因此,输出向量大小为 5 x 5 x 2 x 8。
......
......@@ -130,7 +130,7 @@ GAN 训练遵循针对几个时期的判别器和生成器训练的替代模式
从上图中,我们可以看到以下内容:
* 所有具有跨步但没有最大池化的卷积网络都允许网络在判别器中学习自己的下采样。
* 我们消除了全连接层。 最后的卷积层被展平并直接连接到单个 S输出。
* 我们消除了全连接层。 最后的卷积层被展平并直接连接到单个 Sigmoid输出。
* 我们对除判别器输入层以外的所有层应用批归一化,以提高学习的稳定性。
# 训练
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册