BP系统建模.docx
《BP系统建模.docx》由会员分享,可在线阅读,更多相关《BP系统建模.docx(12页珍藏版)》请在冰点文库上搜索。
![BP系统建模.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/077b1afa-d871-4d04-959e-78e0a92763d8/077b1afa-d871-4d04-959e-78e0a92763d81.gif)
BP系统建模
采用BP神经网络:
所要拟合的非线性函数为:
其中:
x
(-44)
各个训练参数:
隐层神经元个数:
10设置输入范围:
(-44)学习步长:
lr=0.005
迭代结束条件:
E0=0.01初始权值和阈值选取:
(-0.10.1)
functionmain();
clearall;
closeall;
samnum=101;%用101个数据对来训练神经网络
testsamum=101;%用另外101个数据对来验证神经网络的学习效果
hiddenunitnum=10;%隐单元数目定义为10
indim=1;%输入层神经元数目定义为1
outdim=1;%输出层神经元数目定义为1
rand('state',sum(100*clock));%设置随机数产生的模式
samin=8*rand(1,samnum)-4;%设置输入为(-4,4)
samout=samin.*sin(samin)+4*exp(-samin.^2)+0.1*samin;%计算相应的输出
testsamin=-4:
0.08:
4;%生成用于检验的数据
testsamout=testsamin.*sin(testsamin)+4*exp(-testsamin.^2)+0.1*testsamin;
maxepochs=10000;%最大的迭代次数
lr=0.005;%学习步长
E0=0.01;%结束迭代的另一个条件,总误差
w1=0.2*rand(hiddenunitnum,indim)-0.1;%初始权值和阈值选取为(-0.1,0.1)
b1=0.2*rand(hiddenunitnum,1)-0.1;
w2=0.2*rand(outdim,hiddenunitnum)-0.1;
b2=0.2*rand(outdim,1)-0.1;
w1ex=[w1b1];
w2ex=[w2b2];
saminex=[samin'ones(samnum,1)]';
errorhistory=[];
fori=1:
maxepochs
hiddenout=logsig(w1ex*saminex);%前向计算(输入层至隐层,采用S函数
hiddenoutex=[hiddenout'ones(samnum,1)]';
networkout=w2ex*hiddenoutex;%计算系统输出
error=samout-networkout;%计算网络输出与期望输出误差
SSE=sumsqr(error);%计算二次总误差
errorhistory=[errorhistorySSE];
ifSSEdelta2=error;
delta1=w2'*delta2.*hiddenout.*(1-hiddenout);%根据权值修改公式,计算权值
%修改量
dw2ex=delta2*hiddenoutex';
dw1ex=delta1*saminex';
w1ex=w1ex+lr*dw1ex;%修改权值
w2ex=w2ex+lr*dw2ex;
w2=w2ex(:
1:
hiddenunitnum);
end;
testinex=[testsamin'ones(testsamum,1)]';
testhiddenout=logsig(w1ex*testinex);%应用测试数据测试
testhiddenoutex=[testhiddenout'ones(testsamum,1)]';%神经网络的泛化能力
testnnout=w2ex*testhiddenoutex;
figure
holdon
grid
plot(testsamin,testsamout,'r+');%输出测试曲线
plot(testsamin,testnnout,'k-');
figure%输出结果学习误差曲线
holdon
grid
[xx,num]=size(errorhistory);
plot(1:
num,errorhistory,'r-');
一.初始权值和学习步长不变,隐层神经元个数改变。
若w1=0.2*rand(hiddenunitnum,indim)-0.1;
b1=0.2*rand(hiddenunitnum,1)-0.1;
w2=0.2*rand(outdim,hiddenunitnum)-0.1;
b2=0.2*rand(outdim,1)-0.1;
(1)隐层神经元个数hiddenunitnum=5
仿真结果如下:
(2)隐层神经元个数hiddenunitnum=20
仿真结果如下:
二、隐层神经元个数和学习步长不变,初始权值改变
(1)初始权值如下:
w1=0.8*rand(hiddenunitnum,indim)-0.4;
b1=0.8*rand(hiddenunitnum,1)-0.4;
w2=0.8*rand(outdim,hiddenunitnum)-0.4;
b2=0.8*rand(outdim,1)-0.4;
仿真结果如下:
(2)、初始权值如下:
w1=0.1*rand(hiddenunitnum,indim)-0.05;
b1=0.1*rand(hiddenunitnum,1)-0.05;
w2=0.1*rand(outdim,hiddenunitnum)-0.05;
b2=0.1*rand(outdim,1)-0.05;
仿真结果如下:
三.隐层神经元个数和初始权值不变,学习步长改变
(1)学习步长lr=0.01
(2)学习步长lr=0.008
(3)学习步长lr=0.003