多类神经网络
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
使用神经网络算法创建多类分类模型
模块概述
本文介绍如何使用机器学习 Studio (经典) 中的多类神经网络模块来创建可用于预测具有多个值的目标的神经网络模型。
例如,此类神经网络可用于复杂的计算机视觉任务,如数字或字母识别、文档分类和模式识别。
使用神经网络进行分类是一种监督式学习方法,因此需要一个“带标记的数据集”(其中包含一个标签列)。
您可以通过将模型和标记的数据集作为输入添加到 训练模型 或 调整模型超参数来对模型进行定型。 然后即可使用训练的模型来预测新输入示例的值。
有关神经网络的详细信息
神经网络是一组互连的层。 输入是第一层,并通过由加权边缘和节点组成的无环图连接到一个输出层。
在输入层和输出层之间,可以插入多个隐藏层。 大多数预测任务只需使用一个或几个隐藏层即可轻松完成。 不过,最近的研究表明,深层神经网络 (DNN) ,其中很多层可以在复杂任务(如图像或语音识别)中非常有效。 后续层用于为不断增加的语义深度级别建模。
输入与输出之间的关系可通过基于输入数据对神经网络进行训练来了解。 图形的方向是从输入层到隐藏层,再到输出层。 每一层中的所有节点都通过加权边缘连接到下一层中的节点。
为了针对特定输入计算网络的输出,会在隐藏层和输出层中的每个节点上计算一个值。 此值是通过计算上一层中节点的值的加权和来设置的。 然后会向该加权和应用一个激活函数。
如何配置多类神经网络
将 多类神经网络 模块添加到 Studio 中的试验 (经典) 。 可以在“机器学习”、“初始化”下的“分类”类别中找到此模块。
创建训练程序模式:此选项可用于指定模型的训练方式:
单个参数:如果已知如何配置模型,请选择此选项。
参数范围:如果你不确定最佳参数,并想要使用参数扫描,请选择此选项。 然后,您可以指定一个值范围,并使用 调谐模型超参数 模块来循环访问这些组合并找到最佳配置。
隐藏层规范:选择要创建的网络体系结构的类型。
完全连接的案例:选择此选项可使用默认的神经网络体系结构创建模型。 对于多类神经网络模型,默认值如下所示:
- 一个隐藏层
- 输出层完全连接到隐藏层。
- 隐藏层完全连接到输入层。
- 输入层中的节点数取决于训练数据中的功能数。
- 隐藏层中的节点数可由用户设置。 默认值为 100。
- 输出层中的节点数取决于类的数量。
自定义定义脚本。 选择此选项可以使用 Net # 语言创建自定义神经网络体系结构。 您可以定义隐藏层的数量、它们的连接和高级选项,如指定层之间的映射。 有关 Net # 的简介,请参阅本主题后面的 有关 net # 的详细信息 。
神经网络定义:如果选择了 "自定义体系结构" 选项,请使用文本框键入或粘贴用 Net # 语言编写的语句。 有关更多脚本示例,请参阅 Net # 神经网络规范语言指南。
隐藏节点数:借助此选项,可自定义默认体系结构中的隐藏节点数。 键入隐藏节点数。 默认为一个隐藏层,其中包含 100 个节点。
学习速率:定义更正之前每次迭代要执行的步骤的大小。学习速率的值越大,模型的汇聚速度就越快,但它可以超过本地最小值。
学习迭代数:指定算法应处理训练事例的最大次数。
初始学习权重直径:指定学习过程开始时的节点权重。
动量:指定在学习过程中要应用到之前迭代中的节点的权重。
规范化器的类型:选择要用于功能规范化的方法。 支持以下规范化方法:
装箱规范化器:装箱规范化器创建大小相等的箱,然后通过将每个箱中的每个值除以箱总数来对每个值进行规范化。
高斯规范化器:高斯规范化器重新缩放每个特征的值的平均值为0,方差为1。 这是通过计算每个特征的平均值和方差来实现的。 对于每个实例,将减去平均值,并将结果除以) 标准偏差 (方差的平方根。
最小值-最大值规范化器:线性重新缩放每个特征的最小值规范化器([0,1] 间隔)。
移动每个特征的值以重缩放为 [0,1] 区间,使最小值为 0,然后除以新的最大值(这是初始最大值和初始最小值之间的差异)。
不规范化:不执行规范化。
随机选择示例:选择此选项可在迭代间随机选择事例。
如果取消选择此选项,则每次运行试验时,都将按完全相同的顺序处理事例。
随机数字种子:若要确保可重复性跨同一试验运行,请键入要用作种子的值。
允许未知的分类级别:选择此选项可在定型集和验证集中为未知值创建分组。 对于已知值,该模型可能不太准确,但对新的 (未知) 值提供更好的预测。
如果取消选择此选项,该模型只会接受训练数据中包含的值。
连接培训数据集和培训模块之一:
结果
在训练完成后:
若要查看模型参数的摘要,以及从定型中获知的功能权重和神经网络的其他参数,请右键单击 训练模型 的输出或 微调模型超参数,然后选择 " 可视化"。
要保存已训练模型的快照,请右键单击“已训练模型”输出,选择“另存为已训练模型”。 此模型在连续运行相同实验时不会更新。
若要对标记的数据集执行交叉验证,请将未经训练的模型连接到 交叉验证模型。
示例
有关如何使用此学习算法的示例,请参阅 Azure AI 库中的这些示例试验。 这些试验彼此相关,在单个文档中对其进行了从基本配置到高级配置的介绍:
技术说明
本部分包含实现详情、使用技巧和常见问题解答。
使用脚本自定义神经网络
在 机器学习 Studio (经典) 中,可以使用 Net# 语言自定义神经网络模型的体系结构。 Net# 语言支持的自定义项包括:
- 指定隐藏层的数量和每个层中的节点数
- 指定层之间的映射
- 定义卷积和权重共享捆绑包
- 选择激活函数
神经网络模型由其图形结构定义,包括以下属性:
- 隐藏层数
- 每个隐藏层中的节点数
- 层连接方式
- 使用哪个激活函数
- 图形边缘的权重
重要
用户可指定图形的整体结构以及激活函数。 但是,无法指定边缘上的权重,并且必须在对输入数据训练神经网络时学习这些权重。
通常,网络具有以下默认值:
- 第一层称始终是输入层。
- 最后一层始终是输出层。
- 输出层中的节点数应等于的类的数目。
可以定义任意数目的中间层:这些层有时称为隐藏层,因为它们包含在模型中,并且不会直接作为终结点公开。
Net # 参考指南解释了相关语法,并提供了示例网络定义。 其中说明了如何使用 Net# 添加隐藏层,以及定义彼此交互的各个层。
例如,以下 auto
脚本使用 关键字,该关键字自动为输入层和输出层设置功能数,并使用隐藏层的默认值。
input Data auto;
hidden Hidden auto from Data all;
output Result auto from Hidden all;
有关其他脚本示例,请参阅 Net# 神经网络规范语言指南。
提示
由于许多超参数和自定义网络拓扑的引入,神经网络的计算成本可能很高。 虽然在许多情况下神经网络生成的结果比其他算法更好,但获取此类结果可能需要对超参数进行大量扫描(迭代)操作。
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
隐藏层规范 | 列表 | 神经网络拓扑 | 完全连接用例 | 指定一个或多个隐藏层的体系结构 |
初始学习权重直径 | >=double.Epsilon | Float | 0.1 | 指定学习过程初期的节点权重 |
学习速率 | [double.Epsilon;1.0] | Float | 0.1 | 指定学习过程中每个步骤的大小 |
动量 | [0.0;1.0] | Float | 0.0 | 指定在学习到节点来自以前的迭代过程中应用的权重 |
神经网络定义 | 任意 | StreamReader | 选择“自定义定义脚本”时,在每一行键入一个有效的脚本表达式来定义自定义神经网络的层、节点和行为。 | |
规范化器的类型 | 列表 | 规范化方法 | 最小-最大值规范化器 | 选择要应用到学习示例的规范化类型 |
学习迭代数 | >=1 | Integer | 100 | 指定学习时的迭代数 |
随机排列示例 | 任意 | 布尔 | True | 选择此选项可以更改学习迭代之间的实例顺序 |
随机数种子 | 任意 | Integer | 指定用于生成随机数的数字种子。 留空将使用默认种子。 | |
允许未知的分类级别 | 任意 | 布尔 | True | 指示是否应为未知类别创建附加级别。 如果测试数据集包含的类别不在训练数据集中,则这些类别将映射到此未知级别。 |
输出
名称 | 类型 | 说明 |
---|---|---|
未训练的模型 | ILearner 接口 | 未训练的多类分类模型 |