- Microsoft Cognitive Toolkit (CNTK) 教程
- 首页
- 简介
- 入门
- CPU 和 GPU
- CNTK - 序列分类
- CNTK - 逻辑回归模型
- CNTK - 神经网络 (NN) 概念
- CNTK - 创建第一个神经网络
- CNTK - 训练神经网络
- CNTK - 内存数据集和大型数据集
- CNTK - 测量性能
- 神经网络分类
- 神经网络二元分类
- CNTK - 神经网络回归
- CNTK - 分类模型
- CNTK - 回归模型
- CNTK - 内存不足的数据集
- CNTK - 监控模型
- CNTK - 卷积神经网络
- CNTK - 循环神经网络
- Microsoft Cognitive Toolkit 资源
- Microsoft Cognitive Toolkit - 快速指南
- Microsoft Cognitive Toolkit - 资源
- Microsoft Cognitive Toolkit - 讨论
CNTK - 创建第一个神经网络
本章将详细阐述在 CNTK 中创建神经网络。
构建网络结构
为了应用 CNTK 概念来构建我们的第一个 NN,我们将使用 NN 根据萼片宽度和长度以及花瓣宽度和长度的物理特性对鸢尾花种类进行分类。我们将使用的数据集是鸢尾花数据集,它描述了不同品种鸢尾花的物理特性 -
- 萼片长度
- 萼片宽度
- 花瓣长度
- 花瓣宽度
- 类别,即山鸢尾、杂色鸢尾或弗吉尼亚鸢尾
在这里,我们将构建一个称为前馈 NN 的常规 NN。让我们看看构建 NN 结构的实现步骤 -
步骤 1 - 首先,我们将从 CNTK 库中导入必要的组件,例如我们的层类型、激活函数以及允许我们为 NN 定义输入变量的函数。
from cntk import default_options, input_variable from cntk.layers import Dense, Sequential from cntk.ops import log_softmax, relu
步骤 2 - 之后,我们将使用 sequential 函数创建我们的模型。创建完成后,我们将向其提供我们想要的层。在这里,我们将在我们的 NN 中创建两个不同的层;一个有四个神经元,另一个有三个神经元。
model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])
步骤 3 - 最后,为了编译 NN,我们将网络绑定到输入变量。它具有一个具有四个神经元的输入层和一个具有三个神经元的输出层。
feature= input_variable(4) z = model(feature)
应用激活函数
有很多激活函数可供选择,选择正确的激活函数肯定会对深度学习模型的性能产生很大影响。
在输出层
在输出层选择激活函数将取决于我们将用模型解决的问题类型。
对于回归问题,我们应该在输出层使用线性激活函数。
对于二元分类问题,我们应该在输出层使用sigmoid 激活函数。
对于多类分类问题,我们应该在输出层使用softmax 激活函数。
在这里,我们将构建一个用于预测三个类别之一的模型。这意味着我们需要在输出层使用softmax 激活函数。
在隐藏层
在隐藏层选择激活函数需要一些实验来监控性能,以查看哪个激活函数效果更好。
在分类问题中,我们需要预测样本属于特定类别的概率。这就是为什么我们需要一个激活函数来为我们提供概率值。为了实现这个目标,sigmoid 激活函数可以帮助我们。
sigmoid 函数的一个主要问题是梯度消失问题。为了克服这个问题,我们可以使用ReLU 激活函数,它将所有负值转换为零,并作为正值的直通过滤器。
选择损失函数
一旦我们有了 NN 模型的结构,就必须对其进行优化。为了优化,我们需要一个损失函数。与激活函数不同,我们只有很少的损失函数可供选择。但是,选择损失函数将取决于我们将用模型解决的问题类型。
例如,在分类问题中,我们应该使用一个可以衡量预测类别和实际类别之间差异的损失函数。
损失函数
对于我们将用 NN 模型解决的分类问题,分类交叉熵损失函数是最佳选择。在 CNTK 中,它实现为cross_entropy_with_softmax,可以从cntk.losses包中导入,如下所示 -
label= input_variable(3) loss = cross_entropy_with_softmax(z, label)
指标
有了 NN 模型的结构和要应用的损失函数,我们就具备了开始制定优化深度学习模型的方案的所有要素。但在深入研究之前,我们应该了解一下指标。
cntk.metrics
CNTK 有一个名为cntk.metrics的包,我们可以从中导入我们将使用的指标。由于我们正在构建一个分类模型,因此我们将使用classification_error指标,它将生成一个介于 0 和 1 之间的数字。介于 0 和 1 之间的数字表示正确预测的样本百分比 -
首先,我们需要从cntk.metrics包中导入指标 -
from cntk.metrics import classification_error error_rate = classification_error(z, label)
上述函数实际上需要 NN 的输出和预期的标签作为输入。