BP神经网络的Matlab语法.docx
- 文档编号:8027252
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:18
- 大小:188.89KB
BP神经网络的Matlab语法.docx
《BP神经网络的Matlab语法.docx》由会员分享,可在线阅读,更多相关《BP神经网络的Matlab语法.docx(18页珍藏版)》请在冰豆网上搜索。
BP神经网络的Matlab语法
1.数据预处理
在训练神经网络前一般需要对数据进行预处理,一种重要的预处理手段是归一化处理。
下面简要介绍归一化处理的原理与方法。
(1)什么是归一化?
数据归一化,就是将数据映射到[0,1]或[-1,1]区间或更小的区间,比如(0.1,0.9)。
(2)为什么要归一化处理?
<1>输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。
<2>数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。
<3>由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。
例如神经网络的输出层若采用S形激活函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。
<4>S形激活函数在(0,1)区间以外区域很平缓,区分度太小。
例如S形函数f(X)在参数a=1时,f(100)与f(5)只相差0.0067。
(3)归一化算法
一种简单而快速的归一化算法是线性转换算法。
线性转换算法常见有两种形式:
<1>
y=(x-min)/(max-min)
其中min为x的最小值,max为x的最大值,输入向量为x,归一化后的输出向量为y。
上式将数据归一化到[0,1]区间,当激活函数采用S形函数时(值域为(0,1))时这条式子适用。
<2>
y=2*(x-min)/(max-min)-1
这条公式将数据归一化到[-1,1]区间。
当激活函数采用双极S形函数(值域为(-1,1))时这条式子适用。
(4)Matlab数据归一化处理函数
Matlab中归一化处理数据可以采用premnmx,postmnmx,tramnmx这3个函数。
<1>premnmx
语法:
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t)
参数:
pn:
p矩阵按行归一化后的矩阵
minp,maxp:
p矩阵每一行的最小值,最大值
tn:
t矩阵按行归一化后的矩阵
mint,maxt:
t矩阵每一行的最小值,最大值
作用:
将矩阵p,t归一化到[-1,1],主要用于归一化处理训练数据集。
<2>tramnmx
语法:
[pn]=tramnmx(p,minp,maxp)
参数:
minp,maxp:
premnmx函数计算的矩阵的最小,最大值
pn:
归一化后的矩阵
作用:
主要用于归一化处理待分类的输入数据。
<3>postmnmx
语法:
[p,t]=postmnmx(pn,minp,maxp,tn,mint,maxt)
参数:
minp,maxp:
premnmx函数计算的p矩阵每行的最小值,最大值
mint,maxt:
premnmx函数计算的t矩阵每行的最小值,最大值
作用:
将矩阵pn,tn映射回归一化处理前的范围。
postmnmx函数主要用于将神经网络的输出结果映射回归一化前的数据范围。
2.使用Matlab实现神经网络
使用Matlab建立前馈神经网络主要会使用到下面3个函数:
newff:
前馈网络创建函数
train:
训练一个神经网络
sim:
使用网络进行仿真
下面简要介绍这3个函数的用法。
(1)newff函数
<1>newff函数语法
newff函数参数列表有很多的可选参数,具体可以参考Matlab的帮助文档,这里介绍newff函数的一种简单的形式。
语法:
net=newff(A,B,{C},‘trainFun’)
参数:
A:
一个n×2的矩阵,第i行元素为输入信号xi的最小值和最大值;
B:
一个k维行向量,其元素为网络中各层节点数;
C:
一个k维字符串行向量,每一分量为对应层神经元的激活函数;
trainFun:
为学习规则采用的训练算法。
表3.1BP网络的常用函数表
函数类型
函数名称
函数用途
前向网络创建函数
newcf
创建级联前向网络
Newff
创建前向BP网络
传递函数
logsig
S型的对数函数
tansig
S型的正切函数
purelin
纯线性函数
学习函数
learngd
基于梯度下降法的学习函数
learngdm
梯度下降动量学习函数
性能函数
mse
均方误差函数
msereg
均方误差规范化函数
显示函数
plotperf
绘制网络的性能
plotes
绘制一个单独神经元的误差曲面
plotep
绘制权值和阈值在误差曲面上的位置
errsurf
计算单个神经元的误差曲面
3.1.1BP网络创建函数
1)newff
该函数用于创建一个BP网络。
调用格式为:
net=newff
net=newff(PR,[S1S2..SN1],{TF1TF2..TFN1},BTF,BLF,PF)
其中,
net=newff;用于在对话框中创建一个BP网络。
net为创建的新BP神经网络;
PR为网络输入向量取值范围的矩阵;
[S1S2…SNl]表示网络隐含层和输出层神经元的个数;
{TFlTF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’;
BTF表示网络的训练函数,默认为‘trainlm’;
BLF表示网络的权值学习函数,默认为‘learngdm’;
PF表示性能数,默认为‘mse’。
<2>常用的激活函数
常用的激活函数有:
a)线性函数(Lineartransferfunction)
f(x)=x
该函数的字符串为’purelin’。
b)对数S形转移函数(Logarithmicsigmoidtransferfunction)
该函数的字符串为’logsig’。
c)双曲正切S形函数(Hyperbolictangentsigmoidtransferfunction)
也就是上面所提到的双极S形函数。
该函数的字符串为’tansig’。
Matlab的安装目录下的toolbox\nnet\nnet\nntransfer子目录中有所有激活函数的定义说明。
<3>常见的训练函数
常见的训练函数有:
traingd:
梯度下降BP训练函数(Gradientdescentbackpropagation)
traingdx:
梯度下降自适应学习率训练函数
如果考虑增加动量项,可以使用两个训练函数:
traingdm和traingdx
traingdm——有动量的梯度下降法,设置动量因子的命令如下:
net.trainParam.mc=0.9(缺省值为0.9)
traingdx——有自适应lr的动量梯度下降法,设置动量因子的命令同traingdm
<4>网络配置参数
一些重要的网络配置参数如下:
net.trainparam.goal :
神经网络训练的目标误差
net.trainparam.show :
显示中间结果的周期
net.trainparam.epochs :
最大迭代次数
net.trainParam.lr :
学习率
net.trainParam.max_fail:
验证次数validation
net.trainParam.mc=0.9;动量因子
(2)train函数
网络训练学习函数。
语法:
[net,tr,Y1,E] =train(net,X,Y)
参数:
X:
网络实际输入
Y:
网络应有输出
tr:
训练跟踪信息
Y1:
网络实际输出
E:
误差矩阵
(3)sim函数
语法:
Y=sim(net,X)
参数:
net:
网络
X:
输入给网络的K×N矩阵,其中K为网络输入个数,N为数据样本数
Y:
输出矩阵Q×N,其中Q为网络输出个数
保存网络
validationchecks是用来防止网络训练过适的,即是训练时网络的验证误差大于训练误差的次数,默认值为6就是大于次数达到6次训练就会停止。
网络训练过适时,即使performance还在减小网络性能也不会提高,反而会降低,因此要设定过适次数来提前训练以保证网络性能。
%当前输入层权值和阈值
inputWeights=net.IW{1,1}
inputbias=net.b{1}%当前网络层权值和阈值
layerWeights=net.LW{2,1}
layerbias=net.b{2}
inputWeights=net.IW{1,1}
inputbias=net.b{1}%当前输入层权值和阀值
layerWeights=net.LW{2,1}
layerbias=net.b{2}
net.IW{1,1}; 输入层到第一层隐层的权值
net.b{1,1}; 输入层到第一层隐层的阈值
net.LW{2,1}; 第一层隐层到第二层隐层的权值
net.b{2,1}; 第一层隐层到第二层隐层的阈值
net.LW{3,2}; 第二层隐层到输出层的权值
net.b{3,2}; 第二层隐层到输出层的阈值
1.网络总体结构
网络总体结构包括以下属性:
(1) numInputs:
该属性定义了神经网络的输入个数,属性值可以是0或正整数。
需要注意的是,该属性定义了网络输入矢量的总个数,而不是单个输入矢量的维数。
(2) numLayers:
该属性定义了神经网络的层数,其属性值可以是0或正整数。
(3) biasConnect:
该属性定义了神经网络的每层是否具有阈值,其属性值为N×1维的布尔量矩阵,其中N为网络的层数(net.numLayers)。
net.biasConnect(i)为1,表示第i层上的神经元具有阈值,为0则表示该层没有阈值.
(4) inputConnect:
该属性定义了神经网络的输入层,其属性值为N×Ni维的布尔量矩阵,其中N为网络的层数,Ni为网络的输入个数(net.numInputs)。
net.inputConnect(i,j)为1,表示第i层上的每个神经元都要接收网络的第j个输入矢量,为0则表示不接收该输入。
(5) layerConnect:
该属性定义了网络各层的连接情况,其属性值为N×N维的布尔量矩阵,其中N为网络的层数。
net.layerConnect(i,j)为1,表示第i层与第j层上的神经元相连,为0则表示它们不相连。
(6) outputConnect:
该属性定义了神经网络的输出层,其属性值为1×N维的布尔量矩阵,其中N为网络的层数。
net.outputConnect(i)为1,表示第i层神经元将产生网络的输出,为0则表示该层不产生输出。
(7) targetConnect:
该属性定义了神经网络的目标层,即网络哪些层的输出具有目标矢量。
其属性值为1×N维的布尔量矩阵,其中N为网络的层数。
net.targetConnect(i)为1,表示第i层神经元产生的输出具有目标矢量,为0则表示该层输出不具有目标矢量。
(8) numOutputs:
该属性定义了神经网络输出矢量的个数,属性值为只读变量,其数值为网络中输出层的总数(sum(net.outputConnect))。
(9) numTargets:
该属性定义了网络目标矢量的个数,属性值为只读变量,其数值为网络中目标层的总数(sum(net.targetConnect))。
(10) numInputDelays:
该属性定义了神经网络的输入延迟,属性值为只读变量,其数值为网络各输入层输入延迟拍数(net.inputWeights{i,j}.delays)中的最大值。
(11) numLayerDelays:
该属性定义了神经网络的层输出延迟,属性值为只读变量,其数值为各层的神经元之间连接延迟拍数(net.layerWeights{i,j}.delays)中的最大值。
2.子对象结构子对象结构包括以下属性:
(1) inputs:
该属性定义了神经网络每个输入的属性,其属性值为Ni×1维的单元数组,其中Ni为网络输入的个数。
(2) layers:
该属性定义了神经网络每层神经元的属性,其属性值为N×1维的单元数组,其中N为网络的层数。
(3) outputs:
该属性定义了神经网络每个输出的属性,其属性值为N×1维的单元数组,其中N为网络的层数。
(4) targets:
该属性定义了每层神经网络目标矢量的属性,其属性值为N×1维的单元数组,其中N为网络的层数。
(5) biases:
该属性定义了每层神经网络阈值的属性,其属性值为N×1维的单元数组,其中N为网络的层数。
(6) inputWeights:
该属性定义了神经网络每组输入权值的属性,其属性值为N×Ni维的单元数组,其中N为网络的层数,Ni 为网络的输入个数。
(7) layerWeights:
该属性包括了神经网络各层神经元之间网络权值的属性,其属性值为N×N维的单元数组,其中N为网络的层数。
3.函数神经网络对象的函数包括以下属性:
(1) adaptFcn:
该属性定义了网络的自适应调整函数,其属性值为表示自适应函数名称的字符串。
(2) initFcn:
该属性定义了网络的初始化函数,其属性值为表示网络初始化函数名称的字符串。
(3) performFcn:
该属性定义了衡量网络输出误差的性能函数,其属性值为表示性能函数名称的字符串。
(4) trainFcn:
该属性定义了网络的训练函数,其属性值为表示训练函数名称的字符串。
4.函数参数神经网络对象的函数参数包括以下属性:
(1) adaptParam:
该属性定义了网络当前自适应函数的各参数,其属性值为各参数构成的结构体。
(2) initParam:
该属性定义了网络当前初始化函数的各参数,其属性值为各参数构成的结构体。
(3) performParam:
该属性定义了网络当前性能函数的各参数,其属性值为各参数构成的结构体。
(4) trainParam:
该属性定义了网络当前训练函数的各参数,其属性值为各参数构成的结构体。
5.权值和阈值
神经网络对象的权值和阈值包括以下属性:
(1) IW:
该属性定义了网络输入和各输入层神经元之间的网络权值,属性值为N×Ni维的单元数组,其中,N为网络的层数,Ni为网络的输入个数。
如果net.inputConnect(i,j)为1,即第i层上的各神经元接收网络的第j个输入,那么在单元net.IW{i,j}中将存储它们之间的网络权值矩阵,该矩阵的行数为第i层神经元的个数(net.layers{i}.size),列数为第j个输入的维数(net.inputs{j}.size)与输入延迟拍数(net.inputWeights{i,j}.delays)的乘积。
(2) LW:
该属性定义了各层神经元之间的网络权值,其属性值为N×N维的单元数组,其中N为网络的层数。
如果net.layerConnect(i,j)为1,即第i层与第j层上的神经元相连,那么在单元 net.LW{i,j}中将存储它们之间的网络权值矩阵,该矩阵的行数为第i层上神经元的个数(net.layers{i}.size),列数为第j层神经元的个数(net.layers{j}.size)与层输入延迟拍数(net.layerWeights{i,j}.delays)的乘积。
(3) b:
该属性定义了各层神经元的阈值,其属性值为1×N维的单元数组,其中N为网络的层数。
如果net.biasConnect(i)为1,即第i层的神经元具有阈值,那么单元net.b{i}中将存储该层的阈值矢量,矢量维数和第i层的神经元个数(net.layers{j}.size)相等。
6.其他数据
userdata属性用于存储用户信息。
2 神经网络的细节结构(子对象属性)
将详细介绍网络输入、网络层、输出、目标、权值和阈值等子对象的属性。
1.输入(inputs)
网络输入net.inputs为Ni×1维的单元数组,其中net.inputs{i}中存储了网络第i个输入的信息。
网络的每个输入具有以下属性:
(1) size:
该属性定义了输入矢量的维数,其属性值可以为0或正整数。
(2) range:
该属性定义了输入矢量的取值范围,其属性值为Ri×2维的矩阵,Ri为输入矢量的维数(net.inputs{i}.size),该矩阵中的每一行表示输入矢量中各维元素可取的最小值和最大值。
(3) userdata:
该属性用于存储用户信息。
2.层(layers)网络各层net.layers为N×1维的单元数组,其中net.layers{i}中存储了网络第i层的信息。
网络的每一层具有以下属性:
(1) size:
该属性定义了每层神经元的个数,其属性值可以为0或正整数。
(2) dimensions:
该属性定义了每层神经元在多维空间中排列时各维的维数,其属性值为一个行矢量,该矢量中各元素的乘积等于该层神经元的个数(net.layers{i}.size)。
该属性对于自组织映射网络十分重要。
(3) topologyFcn:
该属性定义了每层神经元在多维空间中分布的拓扑函数,其属性值为表示拓扑函数名称的字符串。
(4) positions:
该属性定义了每层网络中各神经元的位置坐标,属性值为只读变量,其值由拓扑函数(net.layers{i}.topologyFcn)和神经元在各维分布的维数(net.layers{i}.dimensions)来确定。
(5) distanceFcn:
该属性定义了每层神经元间距的计算函数,其属性值为表示距离函数名称的字符串。
(6) distances:
该属性定义了每层网络中各神经元之间的距离,属性值为只读变量,其数值由神经元的位置坐标(net.layers{i}.positions)和距离函数(net.layers{i}.distanceFcn)来确定。
(7) initFcn:
该属性定义了每层神经元的初始化函数,其属性值为表示初始化函数名称的字符串。
(8) netInputFcn:
该属性定义了每层神经元的输入函数,其属性值为表示输入函数名称的字符串。
该函数确定了网络每层的加权输入以何种方式和阈值组合在一起以形成神经元传递函数的输入。
(9) transferFcn:
该属性定义了每层神经元的传递函数,其属性值为表示传递函数名称的字符串。
(10) userdata:
该属性用于存储用户信息。
3.输出(outputs)
网络输出net.outputs为N×1维的单元数组,如果第i层产生网络的一个输出,那么在net.outputs{i}中将存储该输出量的信息。
网络的每一个输出都具有以下属性:
(1) size:
该属性定义了每一个网络输出的维数,属性值为只读变量,其数值等于该输出层中神经元的个数(net.layers{i}.size) 。
(2) userdata:
该属性用于存储用户信息
4.目标(targets)
目标net.targets为N×1维的单元数组,如果第i层具有网络的一个目标矢量,那么在net.targets{i}中将存储该目标矢量的信息。
网络的每一个目标矢量都具有以下属性:
(1) size:
该属性定义了每一个神经网络目标矢量的维数,属性值为只读变量,其数值等于第i层中神经元的个数(net.layers{i}.size)。
(2) userdata:
该属性用于存储用户信息。
5.阈值(biases)
阈值net.biases为N×1维的单元数组,第i个单元net.biases{i}中存储了第i层神经元的阈值信息。
网络中每一层神经元的阈值都具有以下属性:
(1) initFcn:
该属性定义了阈值的初始化函数,其属性值为表示阈值初始化函数名称的字符串。
(2) learn:
该属性定义了阈值在训练过程中是否进行调整,其属性值为0或1。
(3) learnFcn:
该属性定义了阈值的学习函数,其属性值为表示阈值学习函数名称的字符串。
(4) learnParam:
该属性定义了阈值学习函数的参数,其属性值为各参数构成的结构体。
(5) size:
该属性定义了每层神经网络的阈值个数,属性值为只读变量,其数值等于该层神经元的个数(net.layers{i}.size)。
(6) userdata:
该属性用于存储用户信息。
6.输入权值(inputWeights)
网络输入权值net.inputWeights为N×Ni维的单元数组,其中net.inputWeights{i,j}为网络第j个输入到网络第i层的网络权值的属性。
每一组网络输入权值都具有以下属性:
(1) delays:
该属性定义了网络输入的各延迟拍数,其属性值是由0或正整数构成的行矢量,各输入层实际接收的是由网络输入的各个延迟构成的混合输入。
(2) initFcn:
该属性定义了输入权值的初始化函数,其属性值为表示权值初始化函数名称的字符串。
(3) learn:
该属性定义了输入权值在训练过程中是否进行调整,其属性值为0或1。
(4) learnFcn:
该属性定义了输入权值的学习函数,其属性值为表示权值学习函数名称的字符串。
(5) learnParam:
该属性定义了权值学习函数的参数,其属性值为各参数构成的结构体。
(6) size:
该属性定义了每个输入权值矩阵(net.IW{i,j})的大小,其属性值是一个具有两元素的行矢量,并且是只读变量,其中第一个元素等于该层神经元的个数(net.layers{i}.size),第二个元素等于输入延迟矢量的长度(length(net.inputWeights{i,j}.delays))和输入矢量维数(net.inputs{j}.size)的乘积。
(7) userdata:
该属性用于存储用户信息。
(8) weightFcn:
该属性定义了输入权值的加权函数,其属性值为表示加权函数名称的字符串,该函数确定了输入和权值以何种方式组合在一起构成神经元的加权输入量。
7.各层网络权值(layerWeights)
网络各层间的网络权值net.layerWeights为N×N维的单元数组,其中net.layerWeights{i,j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BP 神经网络 Matlab 语法
![提示](https://static.bdocx.com/images/bang_tan.gif)