📜  CNTK-创建第一个神经网络

📅  最后修改于: 2020-12-10 05:01:46             🧑  作者: Mango


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

建立网络结构

为了应用CNTK概念构建我们的第一个NN,我们将使用NN根据萼片宽度和长度以及花瓣宽度和长度的物理属性对鸢尾花的种类进行分类。我们将使用虹膜数据集的数据集,该数据集描述了不同品种的鸢尾花的物理特性-

  • 萼片长度
  • 萼片宽度
  • 花瓣长度
  • 花瓣宽度
  • 类,即鸢尾鸢尾花或杂色鸢尾花或初春鸢尾花

在这里,我们将构建一个称为前馈NN的常规NN。让我们看看构建NN结构的实现步骤-

步骤1 -首先,我们将导入必要的组分,例如我们的层的类型,激活函数,和一个函数,它允许我们定义输入变量为我们的NN,从CNTK库。

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

步骤2-之后,我们将使用顺序函数创建模型。创建完成后,我们将向其提供所需的图层。在这里,我们将在NN中创建两个不同的层。一个带有四个神经元,另一个带有三个神经元。

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

步骤3-最后,为了编译NN,我们将网络绑定到输入变量。它具有带有四个神经元的输入层和带有三个神经元的输出层。

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

应用激活函数

有很多激活函数可供选择,选择正确的激活函数肯定会对我们的深度学习模型的性能产生很大的影响。

在输出层

在输出层选择激活函数将取决于我们要用模型解决的问题的类型。

  • 对于回归问题,我们应该在输出层上使用线性激活函数

  • 对于二进制分类问题,我们应该在输出层上使用S型激活函数

  • 对于多类别分类问题,我们应该在输出层上使用softmax激活函数

  • 在这里,我们将建立一个模型来预测这三个类别之一。这意味着我们需要在输出层使用softmax激活函数

在隐藏层

在隐藏层选择激活函数需要进行一些实验,以监视性能以查看哪个激活函数运行良好。

  • 在分类问题中,我们需要预测样本属于特定类别的概率。这就是为什么我们需要一个激活函数来给我们概率值。为了达到这个目标,乙状结肠激活函数可以为我们提供帮助。

  • 与S形函数相关的主要问题之一是消失的梯度问题。为了克服这种问题,我们可以使用ReLU激活功能,该函数将所有负值都覆盖为零,并用作正值的直通滤波器。

选择损失函数

一旦有了神经网络模型的结构,就必须对其进行优化。为了优化,我们需要一个损失函数。与激活函数不同,我们有很少的损失函数可供选择。但是,选择损失函数将取决于我们要用模型解决的问题的种类。

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

损失函数

对于分类问题,我们将使用我们的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的输出和期望的标签作为输入。