神经网络设计及MATLAB仿真实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实用文案
标准文档 昆明理工大学信息工程与自动化学院学生实验报告
( 20 —20 学年第 学期 )
课程名称:智能控制导论 开课实验室:自动化系机房 2013 年 5月 29日
年级、专业、班 20101级测控101班 学号 姓名 成绩
实验项目名称 模糊控制系统设计及MATLAB仿真研究 指导教师
教师评语
教师签名:
年 月 日
一、实验目的
通过上机实习,熟悉MATLAB的基本操作命令和神经网络工具箱的使用,掌握MATLAB编程或神经网络编辑器等方法,进行BP神经网络设计的基本方法和步骤,为以后利用计算机进行神经网络控制系统分析与设计打下良好的基础。
二、实验内容
试设计BP神经网络来实现正弦函数的逼近。
输入矢量 X= -1: 0.1: 1; 实用文案
标准文档 相对应的目标矢量)sin(XY
三、所用仪器、材料(设备名称、型号、规格等)
装有MATLAB的电脑或者个人计算机
四、实验方法、步骤
1、方法一:MATLAB程序仿真实现(本次试验采用方法一)
2、方法二:神经网络工具箱实现
五、实验过程原始记录(数据、图表、计算等)
1、利用两层BP网络完成函数逼近,隐含层激活函数为S型函数,输出层的激活函数为线性函数
(程序)clear all;
clc;
NNTWARN OFF;
X=-1:0.05:1;
T=sin(pi*X);
plot(X,T,'+b'); 实用文案
标准文档 pause
2、建立BP网络,并初始化权值和阈值
(程序)[R,N]=size(X);
[S2,N]=size(T);
S1=5;
[w11,b11,w12,b12]=initff(X,S1,'tansig',S2,'purelin');
[y1,y21]=simuff(X,w11,b11,'tansig',w12,b12,'purelin');
(训练前BP网络的函数逼近效果) 实用文案
标准文档
3、利用不含噪声的理想输入数据训练网络
(程序)disp_freq=5;
max_epoch=1000; % 训练次数
err_goal=0.02; % 训练误差
lr=0.01; %学习速率
tp=[disp_freq max_epoch err_goal lr];
[w21,b21,w22,b22,te,tr]=trainbpx(w11,b11,'tansig',w12,b12,'purelin',X,T,tp);
(BP网络训练过程参数显示)
TRAINBPX: 0/1000 epochs, lr = 0.01, SSE = 122.631.
TRAINBPX: 5/1000 epochs, lr = 0.00567236, SSE = 11.7777.
TRAINBPX: 10/1000 epochs, lr = 0.00723953, SSE = 9.15102.
TRAINBPX: 15/1000 epochs, lr = 0.00923968, SSE = 6.89626. 实用文案
标准文档 TRAINBPX: 20/1000 epochs, lr = 0.0117924, SSE = 4.92212.
TRAINBPX: 25/1000 epochs, lr = 0.0150505, SSE = 3.47479.
TRAINBPX: 30/1000 epochs, lr = 0.0192086, SSE = 2.43021.
TRAINBPX: 35/1000 epochs, lr = 0.0245156, SSE = 1.77321.
TRAINBPX: 40/1000 epochs, lr = 0.0312888, SSE = 1.41395.
TRAINBPX: 45/1000 epochs, lr = 0.0399334, SSE = 1.23208.
TRAINBPX: 50/1000 epochs, lr = 0.0509662, SSE = 1.13685.
TRAINBPX: 55/1000 epochs, lr = 0.0650472, SSE = 1.03322.
TRAINBPX: 60/1000 epochs, lr = 0.0830186, SSE = 0.860574.
TRAINBPX: 65/1000 epochs, lr = 0.105955, SSE = 0.651445.
TRAINBPX: 70/1000 epochs, lr = 0.135229, SSE = 0.435468.
TRAINBPX: 75/1000 epochs, lr = 0.17259, SSE = 0.232097.
TRAINBPX: 80/1000 epochs, lr = 0.220273, SSE = 0.0919917.
TRAINBPX: 85/1000 epochs, lr = 0.28113, SSE = 0.0244567.
TRAINBPX: 86/1000 epochs, lr = 0.295187, SSE = 0.0177537
plot(X,y21,'--g',X,y22,'or')
disp('网络训练步数为:')
te
pause
figure(2); %网络训练记录tr(1,:)为训练误差,tr(2,:)为训练过程中的学习速率
plottr(tr)
网络训练步数为: 实用文案
标准文档 te =
86
(BP网络训练过程的误差及学习速率变化曲线)
(训练后BP网络的函数逼近效果) 实用文案
标准文档
4、检验训练后BP网络的泛化能力
(程序)x1=[-0.24,-0.55,0,0.15,0.43,0.76,0.98];
y2=simuff(x1,w21,b21,'tansig',w22,b22,'purelin');
figure(3);
plot(X,T,x1,y2,'cs')
(所得曲线) 实用文案
标准文档
六、实验结果、分析和结论(误差分析与数据处理、成果总结等)
实验结果如上检验训练后BP网络的泛化能力所的图像,本次试验中,前面的步骤一直很顺利,到最后一步走了好多曲折:
1) 首先是输入的程序不对,导致图形覆盖在BP网络训练过程的误差及学习速率变化曲线上:
(程序)x1=[-0.24,-0.55,0,0.15,0.43,0.76,0.98];
y2=simuff(x1,w21,b21,'tansig',w22,b22,'purelin');
plot(x1,y2,'cs')
比起上面的程序,少了一个figure(3);语句 实用文案
标准文档 (所得曲线)
2) 经过上一步的失败,加上figure(3);语句后,出现了一个单独的曲线,但是只有泛化,没有与期望相比较,因而不能看出泛化能力。
(程序)x1=[-0.24,-0.55,0,0.15,0.43,0.76,0.98];
y2=simuff(x1,w21,b21,'tansig',w22,b22,'purelin');
figure(3);
plot(x1,y2,'cs')
(所得曲线) 实用文案
标准文档
3) 后来经过老师指导后,在泛化结果基础上加上了原有期望,就能很好的看出泛化能力了。
(程序)x1=[-0.24,-0.55,0,0.15,0.43,0.76,0.98];
y2=simuff(x1,w21,b21,'tansig',w22,b22,'purelin');
figure(3);
plot(X,T,x1,y2,'cs')
(所得曲线) 实用文案
标准文档
实验总结:
通过本次试验,我对BP神经网络的了解更加深入,它是一个多层网络(输入层、隐含层、输出层),层与层之间采用互连方式,同层之间不连接,并且隐含层是S函数的一个网络。BP网络具有很好的逼近非线性映射的能力,在模式识别、图像处理、系统辨识、函数模拟、优化计算、最优预测和自适应控制领域有着较为广泛的应用。