提交 b6308a4f 编写于 作者: W wizardforcel

2021-01-12 14:14:47

上级 93e32347
......@@ -27,7 +27,7 @@ XGBoost 是一个库,可帮助以可扩展且以性能为中心的方式在非
# 集成学习如何决定最佳预测模型?
当集成学习模型产生的误差尽可能低时,确定最佳模型,而损失函数的较低值确定最小值。 损失函数用于衡量预测模型可以预测预期结果的程度。 查找最小功能点的最常见方法是梯度下降。 总而言之,我们必须首先了解导致模型误差的原因,才能真正了解集成模式背后的原因。 我们将向您简要介绍这些误差,并为每位集成学生提供对这些问题的见解。 任何模型的误差都可以在数学上分为三种类型。
当集成学习模型产生的误差尽可能低时,确定最佳模型,而损失函数的较低值确定最小值。 损失函数用于衡量预测模型可以预测预期结果的程度。 查找最小函数点的最常见方法是梯度下降。 总而言之,我们必须首先了解导致模型误差的原因,才能真正了解集成模式背后的原因。 我们将向您简要介绍这些误差,并为每位集成学生提供对这些问题的见解。 任何模型的误差都可以在数学上分为三种类型。
# 可减少的误差 – 偏差
......
......@@ -191,7 +191,7 @@ AutoML 自然语言使上传数据集和训练模型变得容易。 在我们的
# 评估模型
与传统的机器学习管道不同,在传统的机器学习管道中,我们需要在评估数据集上评估模型,而 GCP 在内部使用测试集中的项目评估模型。 在此阶段检查模型的质量和准确率。 AutoML 提供了两个级别的聚合质量指标,这些指标指示模型在所有功能和标签以及每个类别标签上的总体训练水平。 GCP 报告了以下指标:
与传统的机器学习管道不同,在传统的机器学习管道中,我们需要在评估数据集上评估模型,而 GCP 在内部使用测试集中的项目评估模型。 在此阶段检查模型的质量和准确率。 AutoML 提供了两个级别的聚合质量指标,这些指标指示模型在所有特征和标签以及每个类别标签上的总体训练水平。 GCP 报告了以下指标:
* **AuPRC**(精度和召回曲线下的**面积**):这表示平均精度。 典型值在 0.5 到 1.0 之间。 值越高表示模型越准确。
* **精度和召回曲线**:AutoML 提供了一种交互式方式来设置标签的阈值。 较低的阈值会增加召回率,但会降低精度:
......
......@@ -268,7 +268,7 @@ gsutil cp dist/google_cloud_ai_custom_code-1.0.tar.gz gs://ai-ml-bucket/google_c
测试机器学习解决方案涉及多个方面。 这样的方面之一是确保用于训练的数据的质量。 您对训练的测试应确保没有可以歪曲结果的数据集。 训练数据的**质量保证****QA**)创建检查协议,以验证用于训练的数据是否已被消毒。 还必须执行检查以确定是否意外或故意发生了数据中毒攻击。 与数据统计有关的测试(中位数,平均值,样式等)描述了高级数据和关系。 您应该使用脚本创建测试以检查统计信息和相关性。 这些测试应定期进行。 必须定期跟踪列出的参数,并在每次发布之前进行验证。
您还应该针对机器学习模型训练中使用的功能执行测试。 多次,一个或多个功能是冗余/不相关的,实际上会影响预测错误率。 需要采用质量保证/测试程序来主动确定设计技术,例如降低尺寸和选择特征。
您还应该针对机器学习模型训练中使用的特征执行测试。 多次,一个或多个特征是冗余/不相关的,实际上会影响预测错误率。 需要采用质量保证/测试程序来主动确定设计技术,例如降低尺寸和选择特征。
最后但并非最不重要的一点是,您还应该确保模型训练算法的质量。 不断发展的数据集可能会由于数据中毒攻击而导致预览错误级别增加。 随着机器学习模型的重新训练,增加的预测错误率意味着机器学习模型将被重新估值,以检测新算法,而现有算法的准确率更高。 重新训练所有模型,并使用新的数据集定期跟踪模型输出。 如果另一个模型比现有模型更可靠或更成功,则会引发缺陷。
......
......@@ -767,7 +767,7 @@ with tf.Session() as sess:
# 简单的方法
仅为一个简单的 DFN 编写所有上述代码似乎很乏味。 因此,TensorFlow 具有高级模块,使我们可以更轻松地构建模型。 Keras 通过为构建层提供功能来处理主要的编码结构,使我们能够专注于模型架构。 让我们使用 Keras 构建一个小型 DFN,如下所示:
仅为一个简单的 DFN 编写所有上述代码似乎很乏味。 因此,TensorFlow 具有高级模块,使我们可以更轻松地构建模型。 Keras 通过提供构建层的函数来处理主要的编码结构,使我们能够专注于模型架构。 让我们使用 Keras 构建一个小型 DFN,如下所示:
```py
import keras
......
......@@ -27,7 +27,7 @@ CNN 中有很多新方面,例如权重共享,批量操作和本地连接。
# CNN 的架构
CNN 当然是像深度前馈网络一样的神经网络。 CNN 以可学习的权重逐层构建,并且像任何典型的深度学习网络一样受到训练:通过最小化成本函数和反向传播误差。 区别在于神经元的连接方式。 CNN 旨在处理图像。 图像数据具有 CNN 用来减少神经元数量并获得更好学习的两个独特功能
CNN 当然是像深度前馈网络一样的神经网络。 CNN 以可学习的权重逐层构建,并且像任何典型的深度学习网络一样受到训练:通过最小化成本函数和反向传播误差。 区别在于神经元的连接方式。 CNN 旨在处理图像。 图像数据具有 CNN 用来减少神经元数量并获得更好学习的两个独特特点
* 图像是三维体积-宽度,高度和通道(通道有时称为深度)。 因此,卷积层以三维体积而不是单维向量进行输入和输出。
* 邻域中的像素具有彼此相关的值。 这称为空间关系。 CNN 通过过滤器使用此功能,以提供与附近像素的神经元的本地连接。
......@@ -120,7 +120,7 @@ GoogLeNet(通常称为 **InceptionNet**)是 2014 年 ILSVRC 竞赛的获胜
Google 的研究人员为了解决这些问题,设计了一个复杂的层,他们将其称为 Inception 模块。
这个想法是对卷积核并行使用不同大小,而不是在层中使用单个核大小。 这样,网络现在可以选择核大小,并且网络现在可以通过核学习最适合该工作的功能。 相互并行排列核也使架构稀疏,这有助于简化对更深层网络的训练。
这个想法是对卷积核并行使用不同大小,而不是在层中使用单个核大小。 这样,网络现在可以选择核大小,并且网络现在可以通过核学习最适合该工作的特征。 相互并行排列核也使架构稀疏,这有助于简化对更深层网络的训练。
典型的 InceptionNet 使用三个大小分别为`1 x 1``3 x 3``5 x 5`的卷积核。 将所有这三个核的结果连接起来,形成一个输出向量,该向量充当下一层的输入。 初始层还在`5 x 5``5 x 5`核之前添加了`5 x 5`卷积,以减小大小。 下图显示了 Inception 模块:
......@@ -140,7 +140,7 @@ ResNet 暴露了一个问题,该问题一直限制着非常深层网络的训
在整篇论文中,研究人员声称,与其让网络直接通过函数(例如`H(x)`)学习从`x``y`的映射, 它使用残差函数`F(x) = H(x) - x`。 可以将函数`F(x)`视为代表网络的层,并且可以将其重写为`H(x) = F(x) + x`。 作者声称优化间接残差函数`F(x)`比获得`x``y`的直接优化映射`H(x)`容易。
在此,将`x`作为该层的输入,将`H(x)`作为该层的输出,并将`F(x)`作为该层的功能, 我们可以很容易地观察到输入`x`将添加到层的输出中,以使最终输出`H(x) = F(x) + x`。 这种创建从该层的输入到输出的连接,称为**残差连接****跳跃连接**。 下图显示了具有跳过连接的 ResNet 的构建块:
在此,将`x`作为该层的输入,将`H(x)`作为该层的输出,并将`F(x)`作为该层的函数, 我们可以很容易地观察到输入`x`将添加到层的输出中,以使最终输出`H(x) = F(x) + x`。 这种创建从该层的输入到输出的连接,称为**残差连接****跳跃连接**。 下图显示了具有跳过连接的 ResNet 的构建块:
![](img/117181dc-715d-412a-8c93-1279b908aac8.png)
......@@ -170,7 +170,7 @@ CIFAR 数据集包含近 8000 万张图像。 该数据集是开源的,并由
# 数据加载和预处理
让我们首先编写函数来加载数据批并将其重塑为三维图像。 我们还将使用在原始 CIFAR 网站中也提到过的`pickle`操作加载数据。 让我们创建一个名为`data`的类,该类将包含与数据加载和预处理有关的功能。 我们还将定义一个名为`load_data_batch`的函数,用于将数据批量加载到内存中。 在类属性中,我们将创建一个名为`labelsDicti`的字典,该字典会将数字标签映射到其实际类。 还创建了逆字典`inverseLabelsDicti`,以将实际的类映射到数字标签。 这将有助于我们进行预测:
让我们首先编写函数来加载数据批并将其重塑为三维图像。 我们还将使用在原始 CIFAR 网站中也提到过的`pickle`操作加载数据。 让我们创建一个名为`data`的类,该类将包含与数据加载和预处理有关的函数。 我们还将定义一个名为`load_data_batch`的函数,用于将数据批量加载到内存中。 在类属性中,我们将创建一个名为`labelsDicti`的字典,该字典会将数字标签映射到其实际类。 还创建了逆字典`inverseLabelsDicti`,以将实际的类映射到数字标签。 这将有助于我们进行预测:
```py
# first import some essential modules
......@@ -598,7 +598,7 @@ YOLO 中使用的损失函数可分为四个部分:
图片出自原始论文,“您只看一次”:统一的实时对象检测
损失函数中的第一项采用所有`B`边界框预测变量的边界框位置差的平方和。 第二项的功能相同,但宽度和高度相同。 您会注意到额外的平方根。 这组作者说,大边界框中的小偏差比小边界框中的小偏差要小。 对项进行平方根运算有助于我们降低对较大值的敏感度。 我们还预测了置信度分数`C[i]`,以及边界框(预测边界框时模型的置信度)。 损失函数中的第三项与置信度得分有关。 损失函数中的最后一项是关于将对象分类为不同类别的。
损失函数中的第一项采用所有`B`边界框预测变量的边界框位置差的平方和。 第二项使用宽度和高度做相同的事情。 您会注意到额外的平方根。 这组作者说,大边界框中的小偏差比小边界框中的小偏差要小。 对项进行平方根运算有助于我们降低对较大值的敏感度。 我们还预测了置信度分数`C[i]`,以及边界框(预测边界框时模型的置信度)。 损失函数中的第三项与置信度得分有关。 损失函数中的最后一项是关于将对象分类为不同类别的。
尽管 YOLO 极大地简化了对象检测架构并能够实时进行预测,但是也存在某些缺点。 该模型不会提取不同比例的特征,因此对于不同大小和比例的对象不具有鲁棒性。 该模型还难以检测组合在一起的较小尺寸的对象。 接下来,我们将研究另一种基于回归的对象检测架构,即**单发多框检测器****SSD**),该架构可弥补 YOLO 的缺点。
......@@ -611,7 +611,7 @@ YOLO 中使用的损失函数可分为四个部分:
* 用于边界框预测的卷积
* 用于预测的默认边界框
任何卷积网络的首要任务是减小输入的尺寸并增加特征映射的深度,以便提取特征。 然后,可以将特征映射中提取的特征用于不同任务,无论是分类还是检测。 SSD 也一样! SSD 使用著名的 VGG16 架构作为模型的初始层(基础网络)进行特征提取(请记住,这与 YOLO 不同,因为图像本身首先被划分为网格,然后将卷积应用于预测)。 VGG16 架构末尾的全连接层已被删除,因为使用 VGG16 的目的只是为了提供丰富的功能学习而非分类。 在改良的 VGG16 网络的末端,SSD 引入了六层以上的卷积。 这些额外的六层的大小逐渐减小。 添加额外层的目的是使网络能够从不同大小和不同比例的对象中提取特征。 这就是为什么这些层中的特征映射的大小不断减小(多比例缩放的特征映射)的原因。 下图显示了 SSD 的总体架构:
任何卷积网络的首要任务是减小输入的尺寸并增加特征映射的深度,以便提取特征。 然后,可以将特征映射中提取的特征用于不同任务,无论是分类还是检测。 SSD 也一样! SSD 使用著名的 VGG16 架构作为模型的初始层(基础网络)进行特征提取(请记住,这与 YOLO 不同,因为图像本身首先被划分为网格,然后将卷积应用于预测)。 VGG16 架构末尾的全连接层已被删除,因为使用 VGG16 的目的只是为了提供丰富的特征来学习而非分类。 在改良的 VGG16 网络的末端,SSD 引入了六层以上的卷积。 这些额外的六层的大小逐渐减小。 添加额外层的目的是使网络能够从不同大小和不同比例的对象中提取特征。 这就是为什么这些层中的特征映射的大小不断减小(多比例缩放的特征映射)的原因。 下图显示了 SSD 的总体架构:
![](img/f30e4535-41dc-4b52-94e1-562e8fe946b9.png)
......
......@@ -587,7 +587,7 @@ Epoch 251/300
# 用于股价预测的 GRU RNN
预测股票会使许多人感兴趣。 多年以来,已经开发出了大量使用机器学习技术预测股票价格的方法。 例如,在《Python 机器学习示例的》的“第 7 章”中,线性回归,随机森林和支持向量机被用于预测股票价格。 在像这样的传统机器学习解决方案中,特征工程可能是最费力的阶段。 这是手动创建特定于域的特征或信号的过程,这些特征或信号对于定向预测比原始输入更为重要。 典型的发明功能包括`x`天移动平均线,一段时间内的波动率和`x`天回报率。 相反,基于 RNN 的深度学习解决方案不涉及以手工为特色的手工制作,而是自己找出及时或顺序的关系。 我们将通过使用 GRU RNN 预测**道琼斯工业平均指数****DJIA**)来展示循环架构的强大功能。
预测股票会使许多人感兴趣。 多年以来,已经开发出了大量使用机器学习技术预测股票价格的方法。 例如,在《Python 机器学习示例的》的“第 7 章”中,线性回归,随机森林和支持向量机被用于预测股票价格。 在像这样的传统机器学习解决方案中,特征工程可能是最费力的阶段。 这是手动创建特定于域的特征或信号的过程,这些特征或信号对于定向预测比原始输入更为重要。 典型的发明特征包括`x`天移动平均线,一段时间内的波动率和`x`天回报率。 相反,基于 RNN 的深度学习解决方案不涉及以手工为特色的手工制作,而是自己找出及时或顺序的关系。 我们将通过使用 GRU RNN 预测**道琼斯工业平均指数****DJIA**)来展示循环架构的强大功能。
尽管我们强调了深度学习的优势,但我们并未断言深度学习方法优于传统的机器学习方法。 在机器学习中,没有一种适合所有的。
......@@ -635,7 +635,7 @@ DJIA 由 30 只大型和重要股票(例如 Apple,IBM,GE 和 Goldman Sachs
![](img/c7066555-976f-489a-9a0c-704b1ec5900f.png)
因此,我们实现了序列生成功能
因此,我们实现了序列生成函数
```py
>>> def generate_seq(data, window_size): ... """ ... Transform input series into input sequences and outputs based
......@@ -669,7 +669,7 @@ DJIA 由 30 只大型和重要股票(例如 Apple,IBM,GE 和 Goldman Sachs
| ...... | ... |
| ![](img/b96e30bb-3650-4a7c-80b7-77050aee2097.png) | ![](img/be9ead53-baa8-4357-8db1-9b3505882ec4.png) |
我们基本上将绝对值转换为相对值。 预处理功能实现如下:
我们基本上将绝对值转换为相对值。 预处理函数实现如下:
```py
>>> def scale(X, Y): ... """ ... Scaling the prices within each window ... @param X: input series ... @param Y: outputs ... @return: scaled input series and outputs ... """ ... X_processed, Y_processed = np.copy(X), np.copy(Y) ... for i in range(len(X)): ... x = X[i, -1] ... X_processed[i] /= x ... Y_processed[i] /= x ... return X_processed, Y_processed
......
......@@ -35,7 +35,7 @@ GAN 可能是深度神经网络最有趣的类型之一。 自从 Goodfellow 等
# 生成模型
机器学习中有两种主要类型的模型,即**生成模型****判别模型**。 顾名思义,判别模型试图在两个(或多个)类之间区分数据。 例如,我们在“第 4 章”,“CNN 架构”中讨论过的 CNN 模型,学会告诉我们一个图像是猫还是狗,给定其中一个图像, 以及 “第 6 章”,“循环神经网络”中的 RNN 模型经过训练,可以输出给定段落的正面或负面情感。 判别模型着重于根据数据的特征预测数据类别。 相反,生成模型不尝试将特征映射到类,而是在给定特定类的情况下生成特征。 例如,训练**高斯混合模型****GMM**)以生成适合训练集分布的新数据。 生成模型对给定单个类的特征分布进行建模。 也就是说,可以使用生成模型对数据进行分类,例如朴素贝叶斯和玻尔兹曼机,我们在“第 3 章”,“受限玻尔兹曼机和自编码器”中进行了讨论。 但是,他们的首要任务是弄清楚某些功能的可能性,而不是识别标签。 然后将学习到的特征分布用于分类。 如果仍然感到困惑,这是区分生成模型和判别模型的简单方法:
机器学习中有两种主要类型的模型,即**生成模型****判别模型**。 顾名思义,判别模型试图在两个(或多个)类之间区分数据。 例如,我们在“第 4 章”,“CNN 架构”中讨论过的 CNN 模型,学会告诉我们一个图像是猫还是狗,给定其中一个图像, 以及 “第 6 章”,“循环神经网络”中的 RNN 模型经过训练,可以输出给定段落的正面或负面情感。 判别模型着重于根据数据的特征预测数据类别。 相反,生成模型不尝试将特征映射到类,而是在给定特定类的情况下生成特征。 例如,训练**高斯混合模型****GMM**)以生成适合训练集分布的新数据。 生成模型对给定单个类的特征分布进行建模。 也就是说,可以使用生成模型对数据进行分类,例如朴素贝叶斯和玻尔兹曼机,我们在“第 3 章”,“受限玻尔兹曼机和自编码器”中进行了讨论。 但是,他们的首要任务是弄清楚某些特征的可能性,而不是识别标签。 然后将学习到的特征分布用于分类。 如果仍然感到困惑,这是区分生成模型和判别模型的简单方法:
* 判别模型对寻找边界或规则来分离数据感兴趣
* 生成模型侧重于对数据分布进行建模
......@@ -106,7 +106,7 @@ Li 等人(提出动物行为推断的同一作者)在《图灵学习:一
... return train_data
```
功能读取并合并原始训练和测试集(不包括标签),因为在原始模型中不需要它们。 它还将数据从`[0, 255]``[-1, 1]`的范围重新缩放,这是神经网络模型预处理的非常重要的一部分,并且还将单个样本重塑为一维样本。
函数读取并合并原始训练和测试集(不包括标签),因为在原始模型中不需要它们。 它还将数据从`[0, 255]``[-1, 1]`的范围重新缩放,这是神经网络模型预处理的非常重要的一部分,并且还将单个样本重塑为一维样本。
调用此函数并检查已加载数据的大小:
......@@ -132,7 +132,7 @@ Training dataset shape: (70000, 784)
... plt.show()
```
功能在 4 行 10 列中显示 40 张图像。 稍后将重新使用它以显示生成的图像。 看一下前 40 个真实样本:
函数在 4 行 10 列中显示 40 张图像。 稍后将重新使用它以显示生成的图像。 看一下前 40 个真实样本:
```py
>>> display_images(data)
......@@ -561,7 +561,7 @@ TensorBoard 中显示的学习图如下所示:
>>> print("Training dataset shape:", x_data.shape) Training dataset shape: (70000, 784)
```
因此,`batch`生成功能也需要更新,以便它返回一批图像和标签:
因此,`batch`生成函数也需要更新,以便它返回一批图像和标签:
```py
>>> def gen_batches_label(x_data, y_data, batch_size, shuffle=True):
......@@ -717,7 +717,7 @@ CGAN 认为条件变量是已知的。 因此,在训练期间将条件变量
由于我们不需要将条件变量提供给将自动推断出条件的判别器,因此我们可以将其基本分配给任何与数据相关的事物。 它不仅限于标签。 它可以是边缘的宽度,旋转角度和特定样式。 此外,它不仅限于一个变量,也不限于诸如*标签*之类的分类值。 我们可以有多个变量或一个标签变量,以及一个或多个连续变量作为潜在特征。
那么,InfoGAN 如何学习潜在功能? 顾名思义,它们是通过最大化信息来实现的,信息是指信息论中的互信息。 我们希望最大化`c`与生成器生成的输出之间的相互信息。 InfoGAN 的`loss`函数可以概括如下:
那么,InfoGAN 如何学习潜在特征? 顾名思义,它们是通过最大化信息来实现的,信息是指信息论中的互信息。 我们希望最大化`c`与生成器生成的输出之间的相互信息。 InfoGAN 的`loss`函数可以概括如下:
`L_InfoGAN = (D, G) = L(D, G) - I(c, G(z, c))`
......
......@@ -404,9 +404,9 @@ 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 距离,余弦相似度)。 然后,该距离将通过 Sigmoid 激活传递到全连接层,以产生两个输入来自同一类别的概率。
然后,从连体网络中提取的特征将输入判别器,以确定两个输入数据样本是否属于同一类。 判别器首先计算特征对之间的距离(例如 L1 距离,L2 距离,余弦相似度)。 然后,该距离将通过 Sigmoid 激活传递到全连接层,以产生两个输入来自同一类别的概率。
简而言之,双胞胎网络试图学习有效的功能,以便揭示两个输入之间的关系。 为了帮助更好地了解这个基于度量的网络,我们将实现它,并将其应用于数据量有限的人脸识别项目。
简而言之,连体网络试图学习有效的特征,以便揭示两个输入之间的关系。 为了帮助更好地了解这个基于度量的网络,我们将实现它,并将其应用于数据量有限的人脸识别项目。
标准的面部识别系统应该能够仅使用系统中该人的几张照片来识别该人的身份。 显然,为了积累足够的训练数据,不能强迫他拍摄数百张照片。 尽管这是一个多类别的分类问题,但在这种情况下,CNN 不能在一个很小的训练集上真正起作用,因为每个类别的样本要多得多。 而且,如果我们采用典型的多类分类路线,则每次新用户加入系统时都必须对模型进行重新训练,这是不切实际的。 幸运的是,连体神经网络擅长处理**几次学习**问题。
......@@ -520,7 +520,7 @@ pip install Pillow
>>> model.compile(loss=binary_crossentropy, optimizer=optimizer)
```
6. 现在该模型已准备好进行训练,我们需要使用以下功能构建训练集,其中从各个受试者中随机选择正对,从两个不同受试者中随机选择负对。 正负比率保持在 50:50:
6. 现在该模型已准备好进行训练,我们需要使用以下函数构建训练集,其中从各个受试者中随机选择正对,从两个不同受试者中随机选择负对。 正负比率保持在 50:50:
```py
>>> np.random.seed(42)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册