📄 bp神经网络预测程序.m
字号:
x=xlsread('nn')
x1=x'
m=x1(:,1:288)
n=x1(:,289:576)
p=m;
t=n;
for i=1:2
p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
for i=1:2
t(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)));
end
%归一化
%训练样本,P_train为输入向量,T_train为目标向量
%训练样本,P_train为输入向量,T_train为目标向量
P_train=m(:,1:144);
T_train=n(:,1:144);
%测试样本,P_train为输入向量,T_train为目标向量
P_test=m(:,145:288);
T_test=n(:,145:288);
net=newff(minmax(p),[8,2],{'tansig','purelin'},'trainlm')%minmax(p)是说p输入的最大值和最小值;[no(i),6]:Size of ith layer, for Nl layers;\'traingdm\':利用梯度下降法训练功能;
%{\'logsig\',\'purelin\'}:转移函数
s1=2;s2=8;s3=2;
[R,Q]=size(p);
[S,Q]=size(t);
[inputWeights,inputbias]=rands(s2,R);
inputbias=ones(8,1);
[layerWeights,layerbias]=rands(s3,s2);
layerbias=ones(2,1);
%设置训练参数
net.trainParam.show=50;%每隔1000次显示一次
net.trainParam.lr=0.3;%lr表示学习速率
net.trainParam.mc=0.8;%mc表示动量系数
net.trainParam.epochs=100;%训练次数
net.trainParam.goal=0.01;%目标误差
[inputWeights,inputbias,layerWeights,layerbias]=initff(p,8,'tansig',2,'purelin')
for epoch=1:net.trainParam.epochs
Oi=tansig(inputWeights*p,inputbias); %隐层神经元的输出
Ok=purelin(layerWeights*Oi,layerbias) %输出层神经元的输出
E=t-Ok
A1 = purelin(Ok)
deltak=dpurelin(Ok,A1)
A2 = tansig(Oi)
deltai=dtansig(Oi,A2)
%调整输出层权值
[dWki,db2]=learnbp(Oi,deltak,0.8)
% [dWki,db2]=learnlm(Oi,deltak)
layerWeights=layerWeights+dWki
layerbias=layerbias+db2
%调整输出层权值
[dWij,db1]=learnbp(p,deltai,0.8)
% [dWij,db1]=learnlm(p,deltai)
inputWeights=inputWeights+dWij
inputbias=inputbias+db1
end
% % % net = nnt2ff(minmax(p),{inputWeights layerWeights},{inputbias layerbias},{tansig purelin},trainlm,learnbp,mse) %仿真函数
net = train(net,P_test,T_test)
%
Y=sim(net,P_test)%对BP网络进行仿真
%反归一
for i=1:2
Y(i,:)=(max(t(i,:))-min(t(i,:)))*Y(i,:)+min(t(i,:))
end
% figure(1)
% plot(P_test(1,:),T_test(1,:),'r-',P_test(1,:),Y(1,:))
% figure(2)
% plot(P_test(2,:),T_test(2,:),'r-',P_test(2,:),Y(2,:))
% subplot(2,1,1);
% plot(P_test,Y,'*-','color',[1.0,0,1.0],'markersize',3,'linewidth',2);
% hold on;
% plot(P_test,T_test,'k * -','markersize',3,'linewidth',1.3);
% title('comparision of the predictive and actual volume','fontsize',10);
%计算仿真误差
E=T_test-Y
MSE=mse(E)
tt=mse(T_test)
e=MSE/tt
T_test1=[T_test(1,:) T_test(2,:)];
Y1=[Y(1,:) Y(2,:)];
E1=[E(1,:) E(2,:)];
J=0.5:0.5:144;
% subplot(2,1,2)
% plot(P_test,E,'* -','color',[1.0,0,1.0],'markersize',3,'linewidth',1.3);
figure(1)
plot(J,T_test1,'*-','color',[1.0,0,1.0],'markersize',3,'linewidth',2)
hold on;
plot(J,Y1,'k * -','markersize',3,'linewidth',1.3);
title('comparision of the predictive and actual volume','fontsize',10);
figure(2)
plot(J,E1,'* -','color',[1.0,0,1.0],'markersize',3,'linewidth',1.3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -