ANN-MLP(神经网络--多层感知器)

来自:https://docs.opencv.org/master/dc/dd6/ml_intro.html#ml_intro_ann
与ML中同时构建和训练的许多其他模型不同,在MLP模型中,这些步骤是分开的。首先,使用非默认构造函数或方法ANN_MLP :: create创建具有指定拓扑的网络。所有权重都设置为零。然后,使用一组输入和输出向量训练网络。训练过程可以重复多次,也就是说,可以根据新的训练数据调整权重。

可以使用StatModel :: train的其他标志:ANN_MLP :: TrainFlags。

神经网络

ML实现了前馈人工神经网络,或者更具体地,多层感知器(MLP),其是最常用的神经网络类型。MLP由输入层,输出层和一个或多个隐藏层组成。每层MLP包括一个或多个与前一层和下一层神经元定向连接的神经元。以下示例表示具有三个输入,两个输出的3层感知器,以及包含五个神经元的隐藏层:
ANN-MLP(神经网络--多层感知器)
MLP中的所有神经元都是相似的。它们中的每一个都有几个输入链接(它将前一层中几个神经元的输出值作为输入)和几个输出链接(它将响应传递给下一层中的几个神经元)。从前一层检索的值与某些权重相加,每个神经元个体加上偏差项。使用**函数来转换总和,**函数f对于不同的神经元也可以是不同的。F
ANN-MLP(神经网络--多层感知器)

换句话说,给定层n的输出,层n + 1的输出y_i被计算为:
ANN-MLP(神经网络--多层感知器)

可以使用不同的**功能。ML实现三个标准功能:

身份函数(cv :: ml :: ANN_MLP :: IDENTITY):F(x )= x
对称sigmoid(cv :: ml :: ANN_MLP :: SIGMOID_SYM):ANN-MLP(神经网络--多层感知器)),其中是MLP的默认选择。带有\ beta = 1,\ alpha = 1的标准sigmoid 如下所示:β= 1 ,α = 1

ANN-MLP(神经网络--多层感知器)

高斯函数(cv :: ml :: ANN_MLP :: GAUSSIAN):ANN-MLP(神经网络--多层感知器),目前尚不完全支持。
在ML中,所有神经元具有相同的**函数,具有由用户指定的相同的*参数(),并且不会被训练算法改变。

因此,整个训练有素的网络如下工作:

将特征向量作为输入。矢量大小等于输入层的大小。
将值作为输入传递给第一个隐藏层。
使用权重和**函数计算隐藏层的输出。
将输出传递到下游,直到计算输出层。
因此,要计算网络,您需要知道所有权重ANN-MLP(神经网络--多层感知器)。权重由训练算法计算。该算法采用训练集,具有相应输出向量的多个输入向量,并迭代地调整权重以使网络能够对所提供的输入向量给出期望的响应。

网络规模越大(隐藏层数及其大小)越大,潜在的网络灵活性就越大。训练集上的错误可以任意小。但同时学习网络也“学习”训练集中存在的噪声,因此测试集上的错误通常在网络大小达到极限后开始增加。此外,较大的网络训练时间比较小的网络长,因此使用cv :: PCA或类似技术预处理数据是合理的,并且仅在必要特征上训练较小的网络。

另一个MLP功能是无法按原样处理分类数据。但是,有一种解决方法。如果输入或输出中的某个特征(对于的n类分类器)层是分类的并且可以采用M> 2个不同的值,则将其表示为M个元素的二进制元组是有意义的,其中当且仅当该特征等于M中的第i个值时,第i个元素才为1。它增加了输入/输出层的大小,但加快了训练算法的收敛速度,同时实现了这些变量的“模糊”值,即概率元组而不是固定值。

ML实现了两种训练MLP的算法。第一种算法是经典的随机顺序反向传播算法。第二个(默认)是批处理RPROP算法。

也可以看看
ANN-MLP(神经网络--多层感知器)