matlab BP神经网络

更新时间:2023-09-30 11:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于MATLAB的BP神经网络工具箱函数

最新版本的神经网络工具箱几乎涵盖了所有的神经网络的基本常用模型,如感知器和BP网络等。对于各种不同的网络模型,神经网络工具箱集成了多种学习算法,为用户提供了极大的方便[16]。Matlab R2007神经网络工具箱中包含了许多用于BP网络分析与设计的函数,BP网络的常用函数如表3.1所示。

表3.1 BP网络的常用函数表 函数类型 前向网络创建函数 传递函数 学习函数 性能函数 显示函数 函数名称 newcf Newff logsig tansig 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’。

函数用途 创建级联前向网络 创建前向BP网络 S型的对数函数 S型的正切函数 纯线性函数 基于梯度下降法的学习函数 梯度下降动量学习函数 均方误差函数 均方误差规范化函数 绘制网络的性能 绘制一个单独神经元的误差曲面 绘制权值和阈值在误差曲面上的位置 计算单个神经元的误差曲面 2)newcf函数用于创建级联前向BP网络,newfftd函数用于创建一个存在输入延迟的前向网络。

3.1.2 神经元上的传递函数

传递函数是BP网络的重要组成部分。传递函数又称为激活函数,必须是连续可微的。BP网络经常采用S型的对数或正切函数和线性函数。

1) logsig

该传递函数为S型的对数函数。调用格式为: A=logsig(N) info=logsig(code) 其中,

N:Q个S维的输入列向量;

A:函数返回值,位于区间(0,1)中; 2)tansig

该函数为双曲正切S型传递函数。调用格式为: A=tansig(N) info=tansig(code) 其中,

N:Q个S维的输入列向量;

A:函数返回值,位于区间(-1,1)之间。 3)purelin

该函数为线性传递函数。调用格式为: A=purelin(N) info=purelin(code) 其中,

N:Q个S维的输入列向量; A:函数返回值,A=N。

3.1.3BP网络学习函数

1)learngd

该函数为梯度下降权值/阈值学习函数,它通过神经元的输入和误差,以及权值和阈值的学习效率,来计算权值或阈值的变化率。调用格式为:

[dW,ls]=learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) [db,ls]=learngd(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS)

info=learngd(code)

2)learngdm函数为梯度下降动量学习函数,它利用神经元的输入和误差、权值或阈值的学习速率和动量常数,来计算权值或阈值的变化率。

3.1.4BP网络训练函数

1)train

神经网络训练函数,调用其他训练函数,对网络进行训练。该函数的调用格式为: [net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai) [net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai,VV,TV)

2) traingd函数为梯度下降BP算法函数。traingdm函数为梯度下降动量BP算法函数。

3.2BP网络在函数逼近中的应用

3.2.1问题的提出

BP网络由很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。下面将通过实例来说明BP网络在函数逼近方面的应用。

要求设计一个BP网络,逼近以下函数:g(x)=1+sin(k*pi/4*x),实现对该非线性函数的逼近。其中,分别令k=1,2,4进行仿真,通过调节参数(如隐藏层节点个数等)得出信号的频率与隐层节点之间,隐层节点与函数逼近能力之间的关系。

3.2.2 基于BP神经网络逼近函数

步骤1:假设频率参数k=1,绘制要逼近的非线性函数的曲线。函数的曲线如图3.2所示

k=1;

p=[-1:.05:8]; t=1+sin(k*pi/4*p); plot(p,t,'-');

title('要逼近的非线性函数'); xlabel('时间'); ylabel('非线性函数');

图3.2 要逼近的非线性函数曲线

步骤2:网络的建立

应用newff()函数建立BP网络结构。隐层神经元数目n可以改变,暂设为n=3,输出层有一个神经元。选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练的算法采用Levenberg – Marquardt算法trainlm。

n=3;

net = newff(minmax(p),[n,1],{'tansig' 'purelin'},'trainlm'); 对于初始网络,可以应用sim()函数观察网络输出。 y1=sim(net,p); figure;

plot(p,t,'-',p,y1,':') title('未训练网络的输出结果'); xlabel('时间');

ylabel('仿真输出--原函数-');

同时绘制网络输出曲线,并与原函数相比较,结果如图3.3所示。

图3.3 未训练网络的输出结果

其中“”代表要逼近的非线性函数曲线;

“‥‥‥”代表未经训练的函数曲线;

因为使用newff()函数建立函数网络时,权值和阈值的初始化是随机的,所以网络输出结构很差,根本达不到函数逼近的目的,每次运行的结果也有时不同。

步骤3:网络训练

应用train()函数对网络进行训练之前,需要预先设置网络训练参数。将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。训练后得到的误差变化过程如图3.4所示。

图3.4 训练过程

本文来源:https://www.bwwdw.com/article/l4fd.html

Top