2.2 MATLAB神经网络工具箱
由神经网络的发展历史可以看出,神经网络算法的出现并不比MATLAB软件出现得晚,因此早在MATLAB 6.x时代,该软件就提供了神经网络工具箱,几乎包括了所有经典的神经网络类型。MATLAB 2019b神经网络工具箱的使用至少有3种方法。下面进行简单介绍。
2.2.1 基于代码的MATLAB神经网络工具箱的应用
基于代码的MATLAB神经网络工具箱主要为用户提供了一系列的函数,用来进行神经网络的建构、训练和数据分析。神经网络的形式有很多种,MATLAB很难完全涵盖,因此在MATLAB神经网络工具箱里仅包含了一部分经典和常见神经网络的函数工具。在本书中也主要介绍几种常见的神经网络所使用的函数以作示例。至于其他的函数,读者可查阅MATLAB神经网络工具箱的帮助文件。
1.神经网络创建函数
神经网络创建函数主要是用来进行相关神经网络创建的。通常来讲,创建函数包括以下几类。
1)单层感知机神经网络创建函数
函数名:newp。
基本格式:newp(PR,S,TF,LF)。
参数说明:
PR——输入数据向量的取值区间,一般为R×2矩阵,限定输入数据的最大值、最小值;
S——神经元的数目;
TF——神经网络的激活函数,例如hardlims函数等;
LF——神经网络的学习函数,例如learnp函数等。
2)线性神经网络创建函数
函数名:newlin。
基本格式:newlin(PR,S,ID,LR)。
参数说明:
PR——输入数据向量的取值区间,一般为R×2矩阵,限定输入数据的最大值、最小值;
S——神经元的数目;
ID——输入数据向量的延迟;
LR——神经网络的学习率。
3)前馈型神经网络创建函数
函数名:newff。
基本格式:newff(PR,[S1 S2…SN],{TF1 TF2…TFN},BTF,BLF,PF)。
参数说明:
PR——输入数据向量的取值区间,一般为R×2矩阵,限定输入数据的最大值、最小值;
[S1 S2…SN]——第1,2,…,N个神经网络层的数目;
{TF1 TF2…TFN}——第1,2,…,N个神经网络层的激活函数,可以是线性函数,例如logsig函数等;
BTF——神经网络的训练函数,可以是梯度下降算法的训练函数,权值、阈值学习规则函数等;
BLF——BP神经网络的学习函数,可以是梯度下降权值、阈值学习函数,动量因子学习函数等;
PF——神经网络的性能指标函数,例如平均绝对误差函数、均方误差函数等。
4)Elman神经网络创建函数
函数名:newelm。
基本格式:newelm(PR,[S1 S2…SN],{TF1 TF2…TFN},BTF,BLF,PF)。
参数说明:
与newff函数的参数说明相同。
5)径向基神经网络创建函数
函数名:newrb。
基本格式:newrb(P,T,goal,spread,MN,DF)。
参数说明:
P——输入数据向量(矩阵);
T——目标数据向量(矩阵);
goal——误差目标值;
spread——径向基函数的扩展系数,用来调整函数逼近曲线的情况;
DF——在相邻显示间隔内所增加的神经元数。
6)反馈型神经网络创建函数
函数名:newhop。
基本格式:newhop(T)。
参数说明:
T——目标数据向量(矩阵)。
反馈型神经网络具有自身反馈连接权值及阈值。
7)自组织特征映射(SOM)神经网络创建函数
函数名:newsom。
基本格式:newsom(PR,[D1 D2…DN],TFCN,DFCN,OLR,OSTEPS,TLR,TND)。
参数说明:
PR——输入数据向量的取值区间,一般为R×2矩阵,限定输入数据的最大值、最小值;
[D1 D2…DN]——网络中第1,2,…,N个网络层的大小;
TFCN——网络中的拓扑函数,例如可以是gridtop或randtop函数等;
DFCN——网络中的距离函数,例如可以是linkdist或mandist函数等;
OLR——自组织特征映射(SOM)网络排序阶段的学习率;
OSTEPS——自组织特征映射网络排序阶段的训练次数;
TLR——自组织特征映射网络调整阶段的学习率;
TND——自组织特征映射网络调整阶段的相邻距离。
8)学习向量量化(LVQ)神经网络创建函数
函数名:newlvq。
基本格式:newlvq(PR,S1,PC,LR,LF)。
参数说明:
PR——输入数据向量的取值区间,一般为R×2矩阵,限定输入数据的最大值、最小值;
S1——隐含层的神经元数目;
PC——学习向量量化(LVQ)神经网络输出单元的各类模式所占的百分比;
LR——神经网络的学习率;
LF——神经网络的学习函数。
9)概率神经网络创建函数
函数名:newpnn。
基本格式:newpnn(P,T,spread)。
参数说明:
P——输入数据向量(矩阵);
T——目标数据向量(矩阵);
spread——扩展系数。
10)用户自定义的神经网络创建函数
函数名:network。
基本格式:network(numInputs,numLayers,biasConnect,inputConnect,layerConnect,outputConnect,targetConnect)。
参数说明:
numInputs——用户自定义神经网络的输入向量数;
numLayers——用户自定义神经网络的层数;
biasConnect——用于判断用户自定义神经网络各层是否存在阈值向量;
inputConnect——用于判断用户自定义神经网络的各层是否存在与输入向量的连接权;
layerConnect——用于判断用户自定义神经网络的某层是否与其他网络层存在连接权;
outputConnect——用于判断用户自定义神经网络的某层是否可作为输出层;
targetConnect——用于判断用户自定义神经网络的各层是否与输出的目标向量有关。
以上是在MATLAB神经网络工具箱中较为经典和常用的神经网络创建函数,而且也是本书中将要介绍和使用的神经网络创建函数。需要说明的是,这只是MATLAB神经网络工具箱中的部分创建函数,MATLAB神经网络工具箱中的神经网络创建函数远不止这些。
2.神经网络的激活函数
在介绍了神经网络的创建函数之后,接下来介绍MATLAB神经网络工具箱中的激活函数。
1)开关特性激活函数
开关特性是一种典型的非线性函数,其数学表达式为
这是单极性开关特性激活函数,与之相应,还有双极性开关特性激活函数,即
图2-7给出了开关特性激活函数的图像。图2-7(a)为单极性开关特性激活函数的图像,图2-7(b)为双极性开关特性激活函数的图像。
在MATLAB软件中,这两种激活函数分别被称为“硬限(Hard Limitation)激活函数”和“对称(Symmetrical)硬限激活函数”。
MATLAB神经网络工具箱中硬限激活函数为:
函数名:hardlim。
基本格式:hardlim(N)。
参数说明(参数N的情况):
'deriv'——hardlim函数的导函数;
'name'——hardlim函数的名称;
'output'——hardlim函数的输出范围;
'active'——hardlim函数的输入作用范围。
图2-7 开关特性激活函数
用户可以根据情况设定这些函数参数。
与之相应,MATLAB神经网络工具箱中对称硬限激活函数为:
函数名:hardlims。
基本格式:hardlims(N)。
参数说明:与硬限激活函数参数说明相同。
2)sigmoid激活函数
sigmoid激活函数是一个生物学中常见的S形函数,用来描述生长过程,因此也称为S形生长曲线。其外形类似于S形对数函数,但表达形式不同。sigmoid激活函数也有单极性、双极性之分。单极性sigmoid激活函数的表达式为
双极性sigmoid激活函数为
式中,a为参数,影响其形状。图2-8(a)为单极性sigmoid型激活函数的图像,图2-8(b)为双极性sigmoid型激活函数的图像。
图2-8 sigmoid激活函数
MATLAB神经网络工具箱中单极性sigmoid激活函数为:
函数名:logsig。
基本格式:logsig(N)。
参数说明(参数N的情况):
'deriv'——logsig函数的导函数;
'name'——logsig函数的名称;
'output'——logsig函数的输出范围;
'active'——logsig函数的输入作用范围。
MATLAB神经网络工具箱中双极性sigmoid激活函数为:
函数名:tansig。
基本格式:tansig(N)。
参数说明:与单极性sigmoid激活函数参数说明相同。
3)线性激活函数
线性激活函数是一个常用的数学函数,其一般的数学表达式为
这是“纯粹”的线性激活函数,与之相应,还有单(正)极性的线性特性激活函数,即
图2-9(a)为“纯粹”线性激活函数的图像,图2-9(b)为单(正)极性的线性激活函数的图像。
图2-9 线性激活函数
(1)“纯粹”线性激活函数。
函数名:purelin。
基本格式:purelin(N)。
参数说明(参数N的情况):
'deriv'——purelin函数的导函数;
'name'——purelin函数的名称;
'output'——purelin函数的输出范围;
'active'——purelin函数的输入作用范围。
用户可以根据情况来设定这些函数的参数。
(2)单(正)极性的线性激活函数。
函数名:poslin。
基本格式:poslin(N)。
参数说明:与“纯粹”线性激活函数参数说明相同。
4)线性饱和特性激活函数
线性饱和特性激活函数是线性函数达到一定值后进入饱和区的函数,其一般的数学表达式为
式中,k为线性区的直线斜率,C、-C为进入饱和区后的饱和值。与线性激活函数相同,线性饱和特性激活函数也有单(正)极性的线性饱和特性激活函数。其数学表达式为
图2-10(a)为一般线性饱和特性激活函数的图像,图2-10(b)为单(正)极性的线性饱和特性激活函数的图像。
(1)线性饱和特性激活函数。
函数名:satlins。
基本格式:satlins(N)。
参数说明(参数N的情况):
'deriv'——satlins函数的导函数;
'name'——satlins函数的名称;
'output'——satlins函数的输出范围;
'active'——satlins函数的输入作用范围。
用户可以根据情况设定这些函数的参数。
(2)单(正)极性的线性饱和特性激活函数。
函数名:satlin。
基本格式:satlin(N)。
参数说明:与一般线性饱和特性激活函数参数说明相同。
图2-10 线性饱和特性激活函数
5)径向基激活函数
径向基激活函数是一种左右对称的钟形函数,一般使用高斯函数表示,即
其基本形状如图2-11所示。
图2-11 径向基激活函数
径向基激活函数为:
函数名:radbas。
基本格式:radbas(N)。
参数说明(参数N的情况):
'deriv'——radbas函数的导函数;
'name'——radbas函数的名称;
'output'——radbas函数的输出范围;
'active'——radbas函数的输入作用范围。
用户可以根据情况来设定这些函数参数。
6)三角基激活函数
三角基激活函数也是一种左右对称的函数,其表达式为
基本形状如图2-12所示。
图2-12 三角基激活函数
三角基激活函数为:
函数名:tribas。
基本格式:tribas(N)。
参数说明(参数N的情况):
'deriv'——tribas函数的导函数;
'name'——tribas函数的名称;
'output'——tribas函数的输出范围;
'active'——tribas函数的输入作用范围。
用户可以根据情况设定这些函数的参数。
以上是MATLAB神经网络工具箱中较常用的神经网络激活函数。同样地,MATLAB神经网络工具箱还提供其他的激活函数供用户使用。
3.神经网络的训练函数
神经网络创建以后,需要有一定量的数据对其进行相关的“训练”或“学习”才能够投入使用。之所以称为“训练”是因为神经网络最终的任务(结果)是预先知道的(例如分类),是一种有监督的学习过程。而对于事先未知结果的无监督学习过程,则称为“学习”。在MATLAB神经网络工具箱分别为用户提供了这两类函数。下面介绍MATLAB神经网络工具箱中的训练函数。
1)权值、阈值学习规则训练函数
函数名:trainb。
基本格式:[net,TR,Ac,El]=trainb(net,Pd,Tl,Ai,Q,TS,VV,TV)。
参数说明:
net——神经网络名称;
Pd——延迟输入向量;
Tl——网络层目标向量;
Ai——网络层初始延迟条件;
Q——批处理的规模;
TS——时间步长;
VV——确认样本向量的结构;
TV——测试样本向量的结构。
在函数trainb(code)的格式中,其相关的特性如表2-3所示。
表2-3 trainb(code)训练函数特性说明表
在神经网络训练结束后还会有返回值,即基本格式中方括号内的参数值。其返回值为:
net——更新权值、阈值后的新网络;
TR——相关的训练记录;
Ac——网络层的输出;
El——网络层的误差向量。
2)循环训练函数
函数名:trainc。
基本格式:[net,TR,Ac,El]=trainc(net,Pd,Tl,Ai,Q,TS,VV,TV)。
参数说明:与权值、阈值学习规则训练函数相同。
在函数trainc(code)的格式中,其相关的特性如表2-4所示。
表2-4 trainc(code)训练函数特性说明表
在神经网络训练结束后也会有返回值,其返回值与trainb(code)函数相同。
3)最速梯度下降法的BP网络训练函数
函数名:traingd。
基本格式:[net,TR,Ac,El]=traingd(net,Pd,Tl,Ai,Q,TS,VV,TV)。
参数说明:与前述权值、阈值学习规则训练函数相同。
在函数traingd(code)的格式中,其相关的特性如表2-5所示。
表2-5 traingd(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与trainb(code)函数相同。
4)学习率可变的最速梯度下降法的BP网络训练函数
函数名:traingda。
基本格式:[net,TR,Ac,El]=traingda(net,Pd,Tl,Ai,Q,TS,VV,TV)。
参数说明:与前述训练函数相同。
在函数traingda(code)的格式中,其相关的特性如表2-6所示。
表2-6 traingda(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与trainb(code)函数相同。
5)动量BP算法修正神经网络权值、阈值
函数名:traingdm。
基本格式:[net,TR,Ac,El]=traingdm(net,Pd,Tl,Ai,Q,TS,VV,TV)。
参数说明:与前述训练函数相同。
在函数traingdm(code)的格式中,其相关的特性如表2-7所示。
表2-7 traingdm(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与trainb(code)函数相同。
6)学习率可变的动量BP算法
函数名:traingdx。
基本格式:[net,TR,Ac,El]=traingdx(net,Pd,Tl,Ai,Q,TS,VV,TV)。
参数说明:与前述训练函数相同。
在函数traingdx(code)的格式中,其相关的特性如表2-8所示。
表2-8 traingdx(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与trainb(code)函数相同。
7)Levenberg-Marquardt算法的变梯度反向传播算法
函数名:trainlm。
基本格式:[net,TR]=trainlm(net,Pd,Tl,Ai,Q,TS,VV,TV)。
参数说明:与前述训练函数相同。
在函数trainlm(code)的格式中,其相关的特性如表2-9所示。
表2-9 trainlm(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与trainb(code)函数相同。
以上这些是在有监督的神经网络运行过程中,对神经网络进行训练的常用训练函数。此外还有一些其他训练算法的函数,这里没有一一列出。如有必要使用其他的训练函数,也可以进行相关查询,这些函数的用法和格式大同小异。
4.神经网络的学习函数
前已述及,在无监督学习的过程中神经网络的最终结果是事先不知道的(例如聚类)。在神经网络的调整过程中,需要不断地“学习摸索”才能达到目的。因此这类神经网络调整函数称为神经网络的学习函数。在MATLAB神经网络工具箱中常见的学习函数有以下几种。
1)感知机权值、阈值学习函数
函数名:learnp。
基本格式:[dW,LS]=learnp(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:
W——权值向量矩阵;
P,N——输入向量矩阵;
Z——加权输入向量矩阵;
A——输出向量矩阵;
T——目标向量矩阵;
E——输出误差向量矩阵;
gW——性能指标函数对于权值的梯度;
gA——性能指标函数对于输出的梯度;
D——各神经元之间的距离;
LP——学习参数;
LS——学习状态。
在函数learnp(code)的格式中,其相关的特性如表2-10所示。
表2-10 learnp(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值如下。
dW——神经网络权值、阈值的修正量矩阵;
LS——新的学习状态。
2)Widrow-Hoff权值、阈值学习函数
函数名:learnwh。
基本格式:[dW,LS]=learnwh(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述learnp学习函数相同。
在函数learnwh(code)的格式中,其相关的特性如表2-11所示。
表2-11 learnwh(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
3)Hebb规则权值学习函数
函数名:learnh。
基本格式:[dW,LS]=learnh(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述学习函数相同。
在函数learnh(code)的格式中,其相关的特性如表2-12所示。
表2-12 learnh(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
4)带有衰减因子的Hebb规则权值学习函数
函数名:learnhd。
基本格式:[dW,LS]=learnhd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述学习函数相同。
在函数learnhd(code)的格式中,其相关的特性如表2-13所示。
表2-13 learnhd(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
5)梯度下降权值、阈值学习函数
函数名:learngd。
基本格式:[dW,LS]=learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述学习函数相同。
在函数learngd(code)的格式中,其相关的特性如表2-14所示。
表2-14 learngd(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
6)带有动量因子的梯度下降权值、阈值学习函数
函数名:learngdm。
基本格式:[dW,LS]=learngdm(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述学习函数相同。
在函数learngdm(code)的格式中,其相关的特性如表2-15所示。
表2-15 learngdm(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
7)LVQ1权值学习函数
函数名:learnlv1。
基本格式:[dW,LS]=learnlv1(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述学习函数相同。
在函数learnlv1(code)的格式中,其相关的特性如表2-16所示。
表2-16 learnlv1(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
8)LVQ2权值学习函数
函数名:learnlv2。
基本格式:[dW,LS]=learnlv2(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述学习函数相同。
在函数learnlv2(code)的格式中,其相关的特性如表2-17所示。
表2-17 learnlv2(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
9)SOFM网络权值学习函数
函数名:learnsom。
基本格式:[dW,LS]=learnsom(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)。
参数说明:与前述学习函数相同。
在learnsom(code)的格式中,其相关的特性如表2-18所示。
表2-18 learnsom(code)训练函数特性说明表
在神经网络训练结束后会有返回值,其返回值与learnp(code)学习函数相同。
同样地,这里只列出了经典的神经网络学习函数。其他的学习函数可在相关的帮助文件中查阅。
5.神经网络工具箱中的其他常用函数
1)分析函数
函数名:errsurf。
基本格式:errsurf(P,T,WV,BV,F)。
功能:计算神经元的误差曲面。
参数说明:
P——输入向量矩阵;
T——目标向量矩阵;
WV——权值的行向量;
BV——阈值的行向量;
F——激活函数名。
该函数有返回值,返回值为其参数WV与BV变化的误差矩阵。
2)距离函数
函数名:dist。
基本格式:dist(W,P)。
功能:计算向量之间的欧几里得权值距离。
该函数的返回值为各神经元之间的欧几里得距离。
其他的距离函数还有boxdist、linkdist、mandist等。
3)初始化函数
函数名:initwb。
基本格式:initwb(net,i)。
功能:根据相应的初始化函数对神经网络的权值、阈值进行初始化。
该函数的返回值为神经网络中第i个网络层更新后的权值、阈值。
其他的初始化函数还有initnw、initlay等。
4)搜索函数
函数名:srchgol。
基本格式:[a,gX,perf,retcode,delta,tol]=srchgol(net,X,Pd,Tl,Ai,Q,TS,dX,gX,perf,dperf,delta,tol,ch_perf)。
功能:使用黄金分割法进行一维极值点的搜索。
参数说明:
net——神经网络名;
X——包含权值、阈值的向量;
P——输入向量矩阵;
Pd——延迟输入向量;
Ai——网络层初始延迟条件;
Tl——网络层目标向量;
EW——误差权重;
Q——批处理的规模;
TS——时间步长;
dX——搜索方向向量;
gX——梯度向量;
perf——当前向量的性能;
dperf——当前向量在其导函数方向上的斜率;
delta——初始步长;
tol——搜索容限;
ch_perf——前一步的性能变化。
返回值说明:
a——性能最优化步长;
gX——新极点处的梯度;
perf——新极点处的性能;
retcode——返回搜索函数的相关代码;
delta——基于当前步长的更新步长;
tol——更新后的搜索容限。
除此之外,MATLAB神经网络工具箱所提供的搜索函数还有srchbac、srchbre、srchcha、srchhyb等,其搜索算法不尽相同,但函数格式和参数大同小异。
5)神经网络通用函数
MATLAB神经网络工具箱所提供的通用函数主要用于对神经网络进行仿真、训练和初始化等操作,例如仿真函数的情况如下。
函数名:sim。
基本格式:[Y,Pf,Af,E,perf]=sim(net,P,Pi,Ai,T)。
功能:对神经网络进行仿真。
参数说明:
net——神经网络名;
P——输入向量矩阵;
Pi——输入向量初始延迟条件;
Ai——网络层初始延迟条件;
T——网络层目标向量。
返回值说明:
Y——神经网络的输出向量;
Pf——最终网络的输入层延迟条件;
Af——最终网络层延迟条件;
E——神经网络误差向量;
perf——神经网络的误差性能。
6)误差指标函数
衡量一个神经网络的性能需要误差指标函数。MATLAB神经网络工具箱提供了多种误差指标函数。现举一例说明。
函数名:mse。
基本格式:perf=mse(E,X,PP)。
功能:均方误差性能函数。
参数说明:
E——输出误差向量矩阵;
X——权值、阈值向量矩阵;
PP——性能参数。
返回值说明:返回神经网络的均方误差。
以上介绍了几种常用的神经网络工具箱的函数,下面举一个简单的例子说明函数的用法。
【例2.1】 使用MATLAB神经网络工具箱的相关函数对线性可分的二维向量进行分类。
解:MATLAB程序代码如下:
图2-13 待分类向量及分类线
图2-14 例2.1神经网络的仿真情况
图2-15 例2.1神经网络的训练情况
运行上述程序代码,分类的结果如图2-13、图2-14所示。图2-13是待分类向量及分类线;图2-14给出了MATLAB仿真结果的总体情况。从图2-13可以看出,待分类向量适于进行线性分类,可以使用一条直线将这两类向量进行分类。图2-14则给出了上述程序所创建的神经网络重要信息。图中,最上面部分是所创建神经网络的网络结构:输入向量为二维向量,网络只有一层,输出结果为一维。接着是算法部分,包括所使用的训练算法、性能指标、计算环境。接着是神经网络的训练过程,包括网络更新的轮次、时间和性能。最后一部分是绘制功能区,包括可绘制性能及训练状态。单击Performance按钮可得如图2-15所示的结果,说明了网络的训练情况:经过5次更新后达到训练要求,且分类结果的平均绝对误差(mae)为0。Training State为训练状态。
2.2.2 基于图形界面的MATLAB神经网络工具箱的应用
在MATLAB神经网络工具箱中除了提供有指令代码的函数外,还提供了以图形化的用户界面进行神经网络分析设计的工具。在指令窗口输入如下指令:
就会弹出图形化的界面,如图2-16所示。界面中对应的各部分为:
Input Data——输入数据(向量)。
Target Data——期望目标数据(向量)。
Input Delay States——输入延时状态。
Networks——神经网络设置。
Output Data——输出数据(向量)。
Error Data——仿真误差数据。
Layer Delay States——神经层延时状态。
图2-16 神经网络工具箱的图形化的用户界面
在整个界面底部的一栏中有七个选项按钮:
Import——导入数据。
New——生成新的数据或者新的网络。
Open——打开数据并进行操作。
Export——导出数据到工作区或储存。
Delete——删除数据及网络。
Help——获取帮助。
Close——关闭图形化的用户界面并退出。
下面以例2.1中的数据和网络结构来说明这种图形化用户界面的使用。
【例2.2】 使用基于图形界面的MATLAB神经网络工具箱的相关函数对例2.1中的数据按线性可分的二维向量进行分类。
(1)建立一个新的神经网络输入数据。单击New按钮,弹出Create Network or Data对话框,如图2-17(a)所示。在右侧Data Type栏中选中Inputs单选按钮,输入待训练样本数据;选中Targets单选按钮,输入期望目标数据,然后单击Create按钮创建这两组向量。此时在图形化用户界面中会有相应的显示,如图2-17(b)所示。
图2-17 使用图形化用户界面输入神经网络相关数据
(2)选中神经网络的相关项目。在创建神经网络的Network选项下对网络的各项参数进行选择,单击Create按钮创建神经网络,如图2-18(a)所示。在创建网络完毕后,单击View按钮可以看到网络的基本结构,如图2-18(b)所示。从图2-18(b)中可以看出其网络参数与例2.1中的神经网络结构参数(如图2-14所示)相同。
图2-18 图形化用户界面新建神经网络相关参数
(3)选中准备进行仿真的神经网络,对其进行仿真和训练,如图2-19所示。
图2-19 在图形化用户界面中对已有的神经网络进行训练
单击Train Network按钮即可得到如图2-15所示的训练情况。在图形化的用户主界面中单击Export按钮,选择相应的变量,即可将这些变量导入MATLAB的工作区(workspace),如图2-20所示。如果想观察到分类的情况,则可以相应地将例2.1中后半部分的程序代码改为:
图2-20 将神经网络中的各项参数导出至工作区
即可观察到图2-13的待分类向量图及分类线。
除了手动输入数据到相应的位置外,还可以先将数据保存在工作区,然后利用图形化用户界面的Import to Network/Data Manager选项卡(Import按钮在界面的右下角)导入数据。导入数据后就可以按照上述创建神经网络、训练神经网络的过程往下进行了,如图2-21所示。
图2-21 将保存在工作区的数据导入神经网络
需要说明的是,这种利用图形化的神经网络工具箱建立和仿真其网络类型、训练(学习)算法是由MATLAB事先给定的,如图2-22所示。这样使用起来比较方便,但也在一定程度上限制了使用者灵活应用的空间。
图2-22 由MATLAB事先给定的神经网络类型、训练(学习)算法
除了上述两种神经网络工具箱的应用外,在MATLAB 2019b菜单栏中还提供了神经网络相关模块应用。
2.2.3 MATLAB/Simulink中神经网络相关模块的应用
Simulink是MATLAB的一个组件,是一种可视化的、框图式的设计环境。其中包含了神经网络的很多常用模块,控制系统建模与仿真、信号处理、电力系统乃至航空航天、虚拟现实等诸多学科的模块库。在MATLAB主界面的工具栏中就有Simulink库,在较早的版本中,Simulink包含神经网络工具箱(Neural Network Toolbox)。近年来,由于深度学习的不断发展,大大地丰富和扩展了神经网络方法的外延。因此,现在新版的Simulink库中,原来的神经网络工具箱被安排在了深度学习工具箱的子目录中,但依然保留了原来的5个子库模块,如图2-23所示。
这5个模块中,Net Input Functions(网络输入函数)、Transfer Functions(激活函数)、Weight Functions(权函数)库为常用神经网络相应的函数;Processing Functions(过程函数)库为在神经网络运算过程中的常用函数;Control Systems(控制系统模块)库则主要是针对使用神经网络进行控制设计和仿真的。Net Input Functions库中包含有“加”“乘”模块,用以完成相应的计算;Transfer Functions库中包含有常用经典神经网络的激活函数;Weight Functions库中包含有常用经典神经网络相应的权值设计函数。这几个子模块库展开后所给出的封装模块如图2-24所示。
图2-23 Simulink库中的神经网络工具箱
图2-24 Simulink库中的神经网络工具箱子模块库
图2-24 (续)
图2-24 (续)
需要说明的是,单纯利用MATLAB/Simulink所提供的神经网络相关模块无法进行神经网络的在线训练,通常是将训练好的网络在Simulink中搭建成功后,再进行数据分析处理。但由于MATLAB软件最初是为控制工程服务的,因此对于在MATLAB/Simulink所提供的Control Systems的子模块库中提供有事先写好的针对控制模型的模块可供用户使用。
下面举例说明MATLAB/Simulink所提供的Control Systems的子模块库中应用神经网络进行控制工程应用的例子。该例存在于MATLAB/Simulink的帮助文件中。
【例2.3】 使用MATLAB/Simulink神经网络模块库的相应模块实现神经网络模型预测控制。
在MATLAB命令窗口输入predcstr,即进入如图2-25(a)所示的Simulink编程界面。从该程序中可以很清晰地看到整个控制系统的结构:这是一个单闭环控制的控制系统,其输入信号为信号源模块(Source)中的均匀分布的随机数(Uniform Random Number),控制器为神经网络Control System的子模块库中神经网络预测控制器(Neural Network Predictive Controller),输出为神经网络模块中的X(2Y)Graph模块。在神经网络模型预测控制算法中,需要提供外部控制对象的数学模型,在图2-25中的Plant模块就是外部控制对象的数学模型,该模型的内部构造如图2-25(b)所示。
双击Neural Network Predictive Controller选项可以看到该模块的参数设置窗口,如图2-26(a)所示。在该窗口中单击Plant Identification按钮可得到如图2-26(b)所示的界面。
图2-25 基于Simulink的神经网络模型预测控制
在该界面中,包含有神经网络的诸多参数,例如网络架构(Network Architecture),其中包含隐含层规模、采样间隔等;在训练数据(Training Data)中包含有训练采样、最大(最小)输入/输出以及最大(最小)间隔值等;在训练参数(Training Parameters)中包含有训练函数以及训练一遍样本的情况。用户可以根据实际情况对神经网络进行训练。此处均选为默认值。
经过上述准备后进行仿真,即可得到如图2-26(c)所示的仿真结果。
图2-26 神经网络预测控制模块的相应界面
2.2.4 MATLAB菜单栏中神经网络相关模块的应用
在MATLAB 2013以后的版本中,在MATLAB的菜单栏中增加了App(应用程序)这一项。在MATLAB 2019b的界面中单击这个菜单项会弹出很多下拉菜单。其中在“数学、统计和优化”栏中有神经网络的相关模块,如图2-27所示。
图2-27 MATLAB的菜单栏中神经网络的相关模块
可以看到,在下拉菜单中神经网络模块有4个,分别是Neural Net Clustering(神经网络聚类)、Neural Net Fitting(神经网络拟合)、Neural Net Pattern Recognition(神经网络模式识别)、Neural Net Time Series(神经网络时间序列)。这4个模块的基本界面如图2-28所示。
图2-28 MATLAB菜单栏中神经网络模块基本界面
图2-28 (续)
图2-28 (续)
这几个模块的界面基本类似,都包含有网络基本情况的介绍、网络基本结构图以及相应的操作按钮。下面将以数据拟合为例说明使用该神经网络模块进行拟合的情况。
【例2.4】 使用MATLAB菜单中的Neural Net Fitting模块实现对数据的拟合。
(1)单击Neural Net Fitting子菜单,弹出如图2-28(b)所示的界面。单击Next按钮,出现如图2-29(a)所示的界面,进行数据选择。
(2)单击Load Example Data Set按钮,导入示例数据集,进行数据确认。
(3)继续单击Next按钮,弹出如图2-29(b)所示的Validation and Test Data界面,其中有关于数据的说明。此处,MATLAB软件将数据分为3类:有70%的数据进行训练,15%的数据进行“确认”,所谓的“确认”主要是用来检测该神经网络的泛化性,另有15%的数据对训练好的神经网络进行检验。
(4)继续单击Next按钮,可以看到该神经网络(MATLAB默认形式)的结构形式,如图2-29(c)所示。从图中可以看到,该神经网络的输入/输出向量数为1(拟合),隐含层的神经元数为10。在该界面中,单击Welcome按钮,可以看到对于该神经网络的详细介绍,如图2-29(d)所示。在拟合过程中,该神经网络具有目标数据集,因此也是一种有监督的学习模式。其网络类型选定为BP(前馈型)神经网络,隐含层激活函数为sigmoid函数,输出层的激活函数为线性函数,训练算法为Levenberg Marquardt训练函数。
图2-29 MATLAB的菜单栏中神经网络数据拟合过程
图2-29 (续)
图2-29 (续)
(5)继续单击Next按钮,对神经网络进行训练,可得到如图2-29(e)所示的界面。在该界面上提供了神经网络的训练情况。同时在该界面的右半部分也给出了神经网络的训练结果。这些结果包含了3个数据集(训练、确认、测试)的运算结果。在这个界面上可单击Plot Fit按钮,得到使用神经网络对数据集拟合结果的图形化表示,如图2-29(f)所示。从图中可以看出,数据与要求拟合的目标拟合得很好,在拟合图下方也给出了拟合误差图。
需要指出的是,在有监督的学习模式中,并不是所有的数据都能够训练成功的。很多数据由于自身或拟合目标的问题,神经网络也无能为力,从而导致拟合失败。下面是一个在工程上的例子,该数据来自不同极弧系数下的磁链数据。将这两部分数据导入神经网络后,按照例2.4对神经网络进行训练,单击Plot Fit按钮,得到如图2-30所示的结果。很明显,在此过程中拟合失败了。那么,为什么会出现这种情况呢?为了能够得到输入数据和目标数据的具体情况,不妨先考察一下准备进行拟合的数据与目标数据之间的关系。在MATLAB中将两类数据以图形化方式表示出来,如图2-30(a)所示。图中拟合数据和目标数据看上去好像差别不大,应该能完成拟合。但如果将两类数据的偏差按趋势绘制出来,就会发现这两类数据的差别还是很大的,如图2-30(b)所示,两类数据的偏差仅为有界,但并不具有渐近收敛的趋势!因此,不论采用何种训练函数和方式,都不可能达到使用神经网络进行数据拟合的目的,这是数据本身的问题而不是神经网络的问题,MATLAB对此也给出了解释。
图2-30 拟合失败情况的数据图形化表示
从以上对MATLAB神经网络模块的使用介绍可以看出,这几种方法各有优缺点。基于代码的方式比较灵活,对于实现较为复杂的功能有优势,但是可能对于初学者来讲,神经网络的结构形式不够直观,对于神经网络的运行机制不容易理解。基于图形界面的方式可以较为直观地观察到神经网络的结构,而且还可以观察到神经网络训练的过程进度,对于理解神经网络的结构和运行模式有一定的好处,适于初学者入门学习,但其网络形式、激活函数、训练方式等都只有MATLAB软件中限定的几种,不能进行改进和创新,不能适应对性能要求较高的场合。在Simulink中的神经网络模块大多是与控制工程相关的,这为基于神经网络的控制算法提供了方便。对于模型较为复杂和不易建模的控制对象,这无疑是一大优势,但是在Simulink中,无法直接使用图形化的方法对所建神经网络进行训练,还必须借助于其他代码化方法对神经网络进行训练,在一定程度上丧失了全局图形化编程的优势。在MATLAB菜单项中进行神经网络相关模块的应用是较晚出现的方式,这种方式继承了基于图形界面方式的优点,而且也在聚类、拟合、模式识别以及时间序列这些神经网络的典型应用上提供了方便。但可以看到,这种方式与图形化的方式一样,使用软件固有的函数进行训练,缺乏一定的灵活性。
对于使用MATLAB软件进行神经网络学习和工作的初学者,建议首先使用图形化的方法,搞清楚神经网络的基本结构和运行特点,进而了解神经网络在各技术领域的典型应用。在此基础上能够灵活应用基于代码的MATLAB工具箱对实际问题进行分析,提出解决方案。再进一步,可以利用MATLAB软件的指令代码编写出具有自我风格的、富有创新特点的神经网络就更好了。