Microsoft Cognitive Toolkit 简明教程

CNTK - Creating First Neural Network

本章将详细介绍在 CNTK 中创建神经网络。

Build the network structure

为了将 CNTK 概念应用到构建我们第一个的神经网络,我们准备使用神经网络根据花萼宽度和长度以及花瓣宽度和长度的物理属性对鸢尾科花卉的种类进行分类。我们将使用的数据集是描述不同品种鸢尾科花的物理属性的鸢尾数据集 -

  1. Sepal length

  2. Sepal width

  3. Petal length

  4. Petal width

  5. 类别即鸢尾玫瑰或鸢尾杂色花或鸢尾维吉尼亚变种

此处,我们将构建一种称为前馈神经网络常规神经网络。让我们来看看构建神经网络结构的实现步骤 -

Step 1 - 首先,我们将从 CNTK 库导入必要组件,如层类型、激活函数和一个允许我们在神经网络中定义输入变量的函数。

from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu

Step 2 - 接下来,我们将使用顺序函数创建模型。创建后,我们将根据需要将其输入到层中。在此,我们准备在神经网络中创建两个不同层;一层有 4 个神经元,另一层有 3 个神经元。

model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])

Step 3 - 最后,为了编译神经网络,我们将把网络绑定到输入变量。它将有一个包含 4 个神经元的输入层和一个包含 3 个神经元的输出层。

feature= input_variable(4)
z = model(feature)

Applying an activation function

有很多激活函数可以选用,而选择正确的激活函数肯定将对我们深度学习模型的执行效果产生重要影响。

At the output layer

在输出层选择 activation 函数将取决于我们准备用模型解决的问题类型。

  1. 对于一个回归问题,我们应该在输出层使用 linear activation function

  2. 对于一个二分类问题,我们应该在输出层使用 sigmoid activation function

  3. 对于一个多分类问题,我们应该在输出层使用 softmax activation function

  4. 此处,我们准备构建一个用于预测三个类别之一的模型。这意味着我们需要在输出层中使用 softmax activation function

At the hidden layer

在隐藏层选择 activation 函数需要进行一些实验以监测性能,以查看哪个激活函数效果最好。

  1. 在一个分类问题中,我们需要预测样本属于特定类别的概率。因此我们需要一个 activation function 给我们概率值。为达成此目标, sigmoid activation function 能够助我们一臂之力。

  2. 与 S 形函数有关的一个主要问题是消失梯度问题。为了克服该问题,我们可以使用 ReLU activation function ,它将所有负值转换为零,并作为正值的直通滤波器工作。

Picking a loss function

首先,我们获得了神经网络模型的结构,我们必须对其进行优化。对于优化,我们需要一个 loss function 。与 activation functions 不同,我们的选择损失函数非常少。然而,选择损失函数将取决于我们的模型解决的问题类型。

例如,在分类问题中,我们应该使用能够衡量预测类和实际类之间的差别的损失函数。

loss function

对于分类问题,我们将使用我们的神经网络模型求解, categorical cross entropy 损失函数是最佳选择。在CNTK中,它被实现为 cross_entropy_with_softmax ,可以从 cntk.losses 包中导入,如下所示−

label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)

Metrics

有了我们神经网络模型的结构和要应用的损失函数,我们已经具备了制作深度学习模型优化配方所需的所有要素。但是,在深入研究之前,我们应该了解指标。

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)

以上函数实际上需要神经网络的输出和预期标签作为输入。