实验二 基于BP神经网络算法的函数逼近

时间:2024.3.19

实验二 基于BP神经网络算法的函数逼近

1、实验目的

掌握Matlab子函数的编写与调用。

理解BP神经网络算法的原理,并利用程序实现利用 BP算法逼近任意非线性函数。

2、实验内容与实验要求

掌握BP神经网络算法的原理。

掌握matlab子函数的编写方法及调用方法。

根据BP神经网络算法的原理,编写Matlab程序,逼近非线性函数。

3、实验要求

1) 自己编写Matlab函数。

2) 书写实验报告。

3) 分析实验结果,用图描述出非线性函数的真实曲线以及BP算法逼近的曲线。

4、实验设备

1) 计算机

2) Matlab软件

5、实验原理

BP神经网络算法:

神经网络由神经元和权重构成,神经元即为:输入节点,输出节点和隐层结点三部分;权重是各个神经元相互连接的强度。神经网络通过训练,从样本中学习知识,并且将知识以数值的形式存储于连接权中。神经网络的分类过程分成两部分,首先学习网络的权重,利用一些已知的数据训练网络得到该类数据模型的权重;接着根据现有的网络结构和权重等参数得到未知样本的类别。BP算法被称作反向传播算法,主要思想是从前向后(正向)逐层传播信息;从后向前(反向)逐层传播输出层的误差,间接算出隐层误差。

6、BP算法具体步骤

①前馈计算

设隐层的第j个节点的输入和输出分别为:

Ij??wij?Oi

i?1N

Oj?f(Ij) 其中f(Ij)为激励函数 f(Ij)?1

1?e?Ij

由于隐层的输出就是输出层的输入,则输出层第k个节点的总输入和输出分别为:

Ik??wjk?Oj

j?1H

yk?Ok?f(Ik) 若网络输出与实际输出存在误差,则将误差信号反向传播,并不断地修正权值,直至误差达到要求为止。

②权值调整

设误差函数定义为: 1M

Ep?2?(dk?yk)2

k?1

为了简便,以下计算都是针对每个节点而言,误差函数Ep记作E。

? 输出层权值的调整

权值修正公式为: ?wjk????E

?w jk

????E?Ik

?I

k?wjk

定义反传误差信号??E

k为:?k???I???E?Ok

?I

k?Okk

式中 ?E

?O??(dk?Ok) k

?Ok

?I??f(Ik)?f?(Ik)

k?Ik

f?(Ik)?f(Ik)[1?f(Ik)]?Ok(1?Ok) 所以 ?k?(dk?Ok)Ok(1?Ok)

H

又 ?Ik

?w??(?wjkOj)?Oj

jk?wjkj?1

由此可得输出层的任意神经元权值的修正公式:

?wjk???kOj 或 ?wjk??Ok(1?Ok)(dk?Ok)Oj (

? 隐层权值的调整 ?wij????E ?wij

?E?Ij ??? ?Ij?wij

????EOi ?Ij

?E?N

?(?wij?Oi)?Oi 式中 ?wij?wiji?1

由于误差函数E与隐层输入Ij不存在直接的函数关系,因此不能直接求得,所以 ?E?E?Oj?? ? ?Ij?Oj?Ij

??(?

M?E?Ik?f(Ij))? ?Ijk?1?Ik?OjM?E?H

)(?wjk?Oj)?f?(Ij) ??(??Ik?Ojj?1k?1

?(??kwjk)?f?(Ij)

k?1M

隐层的反传误差信号为

?i?f?(Ij)???kwjk

k?1M

由此可得,隐层权值的修正公式为; ?wij??f?(Ij)?(??kwjk)?Oi

k?1M

或 ?wij??Oj(1?Oj)?(??kwjk)?Oi

k?1M

7、程序代码

w10=[0.1 0.2;0.3 0.15;0.2 0.4]; w11=[0.2 0.1;0.25 0.2;0.3 0.35]; w20=[0.2;0.25;0.3];

w21=[0.15;0.2;0.4];

q0=[0.1 0.2 0.3];

q1=[0.2 0.15 0.25];

p0=0.2;p1=0.1;

xj=[0.5;0.9];

k1=5;k2=1200000;

yb=0;

e0=0;e1=0;e2=0;

for s=1:72

yp1=cos(2*3.14*k1*s/360);

for k=1:k2

for i=1:3

x=w11(i,1)*xj(1,:)+w11(i,2)*xj(2,:); z=x+q1(:,i);

o=[1-exp(-z)]/[1+exp(-z)];

m=1/[1+exp(-z)];

m1(i,:)=m;

o1(i,:)=o;

end

for i=1:3

yb=0;

yb=yb+w21(i,:)*o1(i,:);

end

yi=yb+p1;

n=1/[1+exp(-yi)];

y=[1-exp(-yi)]/[1+exp(-yi)];

e0=e1;

e1=e2;

e2=[(yp1-y).^2]/2;

xj1=e2-e1;

xj2=e2-2*e1+e0;

xj=[xj1;xj2];

d2=n*(1-y)*(yp1-y);

bk=d2;

for i=1:3

u=w21(i,:)*bk;

d1=[1-o1(i,:)]*u;

d0=m1(i,:)*d1;

qw=q1(:,i)-q0(:,i);

q2=q1(:,i)+0.8*d0+0.4*qw;

q3(:,i)=q2;

for j=1:2

dw=w11(i,j)-w10(i,j);

w12=w11(i,j)+0.8*d0*xj(j,:)+0.6*dw; w13(i,j)=w12;

end

end

w10=w11;

w11=w13;

q0=q1;

q1=q3;

for i=1:3

h=w21(i,:)-w20(i,:);

w22=w21(i,:)+0.4*d2*o1(i,:)+0.75*h; w23(i,:)=w22;

end

w20=w21;

w21=w23;

ph=p1-p0;

p2=p1+0.9*d2+0.6*ph;

p0=p1;

p1=p2;

if e2<0.0001,break;

else k=k+1;

end

end

e(s)=e2;

ya(s)=yp1;

yo(s)=y;

s=s+1;

end

w11=w13;

w21=w23;

s1=s-1;

s=1:s1;

plot(s,ya,s,yo,'g.',s,e,'rx');

title('BP ');

8、运行结果

实验二基于BP神经网络算法的函数逼近

9、实验结果分析

1) 此次逼近的函数为y=cosx,蓝线为真实的正弦曲线,绿色为逼近的正弦曲线,

红色代表误差曲线,从图像上可以得出逼近结果与原曲线契合程度高,效果良好。

2) 为了测试程序广泛适用性,对函数进行修改反复测试,效果良好,误差十分小。

3) BP算法能很有效的完成数据训练,是一个训练数据的好方法。


第二篇:基于BP神经网络逼近函数


用神经网络拟合一个非线性函数

姓名:李海浪        班级:10级自动化3班      学号:P101813479

1.  基于BP神经网络逼近函数

假设频率参数k=1,绘制要逼近的非线性函数的曲线。函数的曲线如图1所示.MATLAB程序如下:

k=1;

p=[0:0.05:10];

t=sin(k*pi/4*p);

plot(p,t);

title('要逼近的正弦函数');

xlabel('时间');

ylabel(正弦波函数');

图1 要逼近的正弦函数曲线

2.    建立网络

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

n=3;

net = newff(minmax(p),[n,1],{'tansig' 'purelin'},'trainlm');

y1=sim(net,p);

figure;

plot(p,t,'-',p,y1,':')

title('未训练网络的输出结果');

xlabel('时间');

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

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

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

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

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

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

3.网络训练

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

图3 训练过程

    net.trainParam.epochs=50;

net.trainParam.goal=0.01;

net=train(net,p,t);

TRAINLM-calcjx, Epoch 0/50, MSE 9.27774/0.01, Gradient 13.3122/1e-010

TRAINLM-calcjx, Epoch 3/50, MSE 0.00127047/0.01, Gradient 0.0337555/1e-010

TRAINLM, Performance goal met.

从以上结果可以看出,网络训练速度很快,经过一次循环跌送过程就达到了要求的精度0.01。

4. 网络测试

对于训练好的网络进行仿真:MATLAB程序如下:

y2=sim(net,p);

figure;

plot(p,t,'-',p,y1,':',p,y2, '--')

title('训练后网络的输出结果');

xlabel('时间');

ylabel('仿真输出');

绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,比较出来的结果如图4所示。

图4 训练后网络的输出结果

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

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

    “———” 代表经过训练的函数曲线;

从图中可以看出,得到的曲线和原始的非线性函数曲线很接近。这说明经过训练后,BP网络对非线性函数的逼近效果比较好。

更多相关推荐:
神经网络实验报告

实验报告课程名称实验名称实验仪器系别专业班级学号学生姓名实验日期成绩指导老师BP神经网络实验一级倒立摆实验matlab一级倒立摆实验台自动化20xx年4月8日一级倒立摆实验实验目的1熟悉MatlabSimuli...

BP神经网络实验报告

BP神经网络实验报告一实验目的1熟悉MATLAB中神经网络工具箱的使用方法2通过在MATLAB下面编程实现BP网络逼近标准正弦函数来加深对BP网络的了解和认识理解信号的正向传播和误差的反向传递过程二实验原理由于...

神经网络实验报告

电气工程学院神经网络实验报告院系电气工程学院专业电气工程及其自动化实验二基于BP网络的多层感知器一实验目的1理解基于BP网络的多层感知器的工作原理2通过调节算法参数的了解参数的变化对BP多层感知器训练的影响3了...

BP神经网络实验报告

深圳大学实验报告实验课程名称人工神经网络技术实验项目名称BP神经网络对蝴蝶花分类学院专业软件工程报告人学号班级同组人无指导教师实验时间实验报告提交时间教务处制一实验目的初步熟悉MATLAB工作环境熟悉命令窗口学...

BP神经网络实验报告

作业8编程题实验报告一实验内容实现多层前馈神经网络的反向传播学习算法使用32节上机生成的数据集对神经网络进行训练和测试观察层数增加和隐层数增加是否会造成过拟合二实验原理1前向传播以单隐层神经网络为例三层神经网络...

BP神经网络实验报告

BP神经网络一实验目的初步熟悉MATLAB工作环境熟悉命令窗口学会使用帮助窗口查找帮助信息二实验内容一Matlab程序如下读取训练数据f1f2f3f4classtextread39trainDatatxt393...

神经网络数学建模实验报告

云南财经大学实验报告系院统计与数学学院专业信息与计算科学班级信计091学号20xx05001465姓名课程名称数学建模实验时间20xx年6月20日指导教师云南财经大学教务处制123456

实验二 基于BP神经网络自整定PID控制仿真

实验二基于BP神经网络自整定PID控制仿真一实验目的熟悉神经网络的特征结构以及学习算法通过实验掌握神经网络自整定PID的工作原理了解神经网络的结构对控制效果的影响掌握用MATLAB实现神经网络控制系统仿真的方法...

计算机网络实验报告

计算机网络实验报告学号0604305015姓名杨宁班级06计算机专业计算机科学与技术指导教师刘海雄实验名称IE及Outlook设置与应用实验目的使学生学会设置和使用IE浏览器以及outlook收发邮件实验内容与...

网络实验报告--常用网络命令

计算机网络课程常用网络命令实验报告

网络监测实验报告

南京邮电大学课程设计II报告20xx20xx学年第一学期题目专业信息安全学生姓名赢猛班级学号Q11010330指导教师孙国梓指导单位计算机学院信息安全系日期20xx年1月7日课程设计II报告网络服务监测系统一课...

网络编程实验报告

网络编程实验报告指导老师姓名学号班级实验题目网络文件传输实验目的了解网络文件传输的方法了解FTP协议基础学习使用WinSock实现网络文件的传输了解点对点P2P网络文件传输的方法学习使用WinSock实现P2P...

神经网络实验报告(18篇)