- 微软认知工具包(CNTK)教程
- 家
- 介绍
- 入门
- CPU和GPU
- CNTK-序列分类
- CNTK - 逻辑回归模型
- CNTK - 神经网络 (NN) 概念
- CNTK - 创建第一个神经网络
- CNTK - 训练神经网络
- CNTK - 内存中和大型数据集
- CNTK - 测量性能
- 神经网络分类
- 神经网络二元分类
- CNTK - 神经网络回归
- CNTK - 分类模型
- CNTK - 回归模型
- CNTK - 内存不足的数据集
- CNTK - 监控模型
- CNTK - 卷积神经网络
- CNTK - 循环神经网络
- Microsoft 认知工具包资源
- Microsoft 认知工具包 - 快速指南
- Microsoft 认知工具包 - 资源
- Microsoft 认知工具包 - 讨论
CNTK - 神经网络 (NN) 概念
本章讨论与 CNTK 相关的神经网络概念。
众所周知,神经网络使用多层神经元来构建。但是,问题是在 CNTK 中我们如何对神经网络的各层进行建模?这可以借助层模块中定义的层函数来完成。
图层功能
实际上,在 CNTK 中,使用层具有独特的函数式编程感觉。图层函数看起来像常规函数,它生成具有一组预定义参数的数学函数。让我们看看如何借助图层函数创建最基本的图层类型 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 为我们提供了一组非常好的构建神经网络的默认值。根据我们选择的激活函数和其他设置,神经网络的Behave和性能会有所不同。这是另一种非常有用的词干算法。这就是原因,了解我们可以配置什么是有好处的。
配置密集层的步骤
神经网络中的每一层都有其独特的配置选项,当我们谈论密集层时,我们需要定义以下重要设置 -
shape - 顾名思义,它定义了该层的输出形状,进一步确定了该层中神经元的数量。
激活- 它定义了该层的激活函数,因此它可以转换输入数据。
init - 它定义该层的初始化函数。当我们开始训练神经网络时,它将初始化该层的参数。
让我们看看我们可以配置密集层的步骤-
Step1 - 首先,我们需要从 CNTK 的层包中导入Dense层函数。
from cntk.layers import Dense
Step2 - 接下来从 CNTK ops 包中,我们需要导入sigmoid 运算符。它将用于配置为激活函数。
from cntk.ops import sigmoid
Step3 - 现在,从初始化程序包中,我们需要导入glorot_uniform初始化程序。
from cntk.initializer import glorot_uniform
Step4 - 最后,我们将使用 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)
优化参数
到目前为止,我们已经了解了如何创建神经网络的结构以及如何配置各种设置。在这里,我们将看到如何优化神经网络的参数。借助学习器和训练器这两个组件的组合,我们可以优化神经网络的参数。
训练器组件
用于优化神经网络参数的第一个组件是训练器组件。它基本上实现了反向传播过程。如果我们谈论它的工作原理,它会通过神经网络传递数据以获得预测。
之后,它使用另一个称为学习器的组件来获取神经网络中参数的新值。一旦获得新值,它就会应用这些新值并重复该过程,直到满足退出标准。
学习者部分
用于优化神经网络参数的第二个组件是学习器组件,它基本上负责执行梯度下降算法。
CNTK 库中包含的学习者
以下是 CNTK 库中包含的一些有趣学习者的列表 -
随机梯度下降(SGD) - 该学习器代表基本的随机梯度下降,没有任何额外的内容。
动量随机梯度下降 (MomentumSGD) - 通过 SGD,该学习器应用动量来克服局部最大值问题。
RMSProp - 为了控制下降率,该学习器使用衰减学习率。
Adam - 为了随着时间的推移降低下降率,该学习者使用衰减动量。
Adagrad - 对于频繁出现和不经常出现的特征,该学习器使用不同的学习率。