BP神经网络实验报告.doc
智能控制实验报告
学院:电气工程学院
班级:电气F1104
姓名:姜冲
学号:201123910909
老师:石庆升
时间:2014.11.10
BP神经网络设计
一、实验目的
1.初步熟悉MATLAB工作环境,熟悉命令窗口。
2.学习并了解BP神经网络的结构及学习算法。
二、实验设备
1.计算机
2.Matlab软件
三、实验内容和步骤
要求设计一个简单的BP网络,实现对非线性函数的逼近,通过改变该函数的参数以及BP网络隐层神经元的数目,来观察训练时间以及训练误差的变化情况。
1.将要逼近的非线性函数设为正弦函数
k=1;
p=[-1:.05:1];
t=sin(k*pi*p);
plot(p,t,-)
title(要逼近的非线性函数);
xlabel(时间);
ylabel(非线性函数);
仿真结果如图1
图1
2.网络建立
应用函数newff()建立BP网络结构,为二层BP网络。隐层神经元数目n可以改变,暂设为10,输出层有一个神经元。选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练算法采用trainlm
n=10;
net=newff(minmax(p),[n,1],{tansigpurelin},trainlm);
%对于该初始网络,可以应用sim()函数观察网络输出
y1=sim(net,p);
%同时绘制网络输出曲线,并与原函数相比拟
figure;
plot(p,t,-,p,y1,--)
title(未训练网络的输出结果);
xlabel(时间);
ylabel(仿真输出--原函数-);
仿真结果如图2,因为使用newff()函数建立网络时,权值和阈值的初始化是随机的,所以网络输出的结果很差,根本达不到函数逼近的目的,并且每次运行结果也有所不同。
图2
3.网络训练
应用函数train()对网络进行训练之前,要先设置训练参数。将训练时间设置为50,精度设置为0.01,其余用缺省值。
训练后得到的误差变化过程如图:
net.trainParam.epochs=50;
net.trainParam.goal=0.01;
net=train(net,p,t);
仿真结果如图3,图4
图3
图4
4.网络测试
对于训练好的网络进行仿真
并绘制网络输出曲线,与原始非线性函数曲线以及未训练网络的输出结果曲线相比拟
net.trainParam.epochs=50;
net.trainParam.goal=0.01;
net=train(net,p,t);
y2=sim(net,p);
figure;
plot(p,t,-,p,y1,--,p,y2,-.)
title(训练后网络的输出结果);
xlabel(时间);
ylabel(仿真输出);
仿真结果如图5,从图中可以看出,得到的曲线和原始的非线性函数曲线很接近。这说明经过训练后,BP网络对非线性函数的逼近效果相当好。
图5
四、实验总结