📜  CNTK-神经网络(NN)概念

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


本章讨论有关CNTK的神经网络概念。

众所周知,多层神经元被用于制造神经网络。但是,出现的问题是,在CNTK中,我们如何对NN的各个层进行建模?可以借助图层模块中定义的图层功能来完成。

图层函数

实际上,在CNTK中,使用这些层具有独特的功能编程感觉。图层函数看起来像常规函数,它会生成带有一组预定义参数的数学函数。让我们看看如何在layer函数的帮助下创建最基本的图层类型Dense。

借助以下基本步骤,我们可以创建最基本的图层类型-

步骤1-首先,我们需要从CNTK的图层包中导入Dense图层函数。

from cntk.layers import Dense

步骤2-接下来从CNTK根包中,我们需要导入input_variable函数。

from cntk import input_variable

步骤3-现在,我们需要使用input_variable函数创建一个新的输入变量。我们还需要提供其大小。

feature = input_variable(100)

步骤4-最后,我们将使用Dense函数创建一个新层,并提供所需的神经元数量。

layer = Dense(40)(feature)

现在,我们可以调用已配置的Dense层函数以将Dense层连接到输入。

完整的实施示例

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

自定义图层

正如我们所看到的,CNTK为我们提供了一组很好的默认值,用于构建NN。根据激活函数和我们选择的其他设置,NN的行为和性能是不同的。这是另一个非常有用的词干算法。这就是原因,很高兴了解我们可以配置的内容。

配置密集层的步骤

NN中的每一层都有其独特的配置选项,当我们谈论密集层时,我们具有以下重要设置来定义-

  • 形状-顾名思义,它定义了该层的输出形状,该形状进一步确定了该层中神经元的数量。

  • 激活-它定义了该层的激活函数,因此它可以转换输入数据。

  • init-定义该层的初始化函数。当我们开始训练NN时,它将初始化该层的参数。

让我们看看可以配置密集层的步骤-

步骤1-首先,我们需要从CNTK的图层包中导入Dense图层函数。

from cntk.layers import Dense

步骤2-接下来从CNTK ops包中,我们需要导入sigmoid运算符。它将被配置为激活函数。

from cntk.ops import sigmoid

步骤3-现在,从初始化程序包中,我们需要导入glorot_uniform初始化程序。

from cntk.initializer import glorot_uniform

步骤4-最后,我们将使用Dense函数创建一个新层,并提供神经元数量作为第一个参数。同样,提供Sigmoid运算符作为激活函数,并提供glorot_uniform作为该层的初始化函数。

layer = Dense(50, activation = sigmoid, init = glorot_uniform)

完整的实现示例-

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)

优化参数

到目前为止,我们已经了解了如何创建NN的结构以及如何配置各种设置。在这里,我们将看到如何优化NN的参数。借助于学习者培训者两个组件的组合,我们可以优化神经网络的参数。

培训师组成

用于优化NN参数的第一个组件是Trainer组件。它基本上实现了反向传播过程。如果我们谈论它的工作原理,它将数据通过NN传递以获得预测。

此后,它使用另一个称为学习器的组件来获取NN中参数的新值。一旦获得新值,它将应用这些新值并重复该过程,直到满足退出标准为止。

学习者组件

用于优化NN参数的第二个组件是学习器组件,它主要负责执行梯度下降算法。

CNTK库中包含的学习者

以下是CNTK库中包含的一些有趣的学习者的列表-

  • 随机梯度下降(SGD) -该学习器表示基本的随机梯度下降,没有任何额外的功能。

  • 动量随机梯度下降(MomentumSGD) -通过SGD,该学习者可以利用动量来克服局部极大值的问题。

  • RMSProp-该学习者为了控制下降速度,使用递减的学习速度。

  • 亚当-为了降低随时间下降的速度,该学习者使用了衰减的动量。

  • Adagrad-该学习者对于频繁使用和不频繁使用的功能都使用不同的学习率。