⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp神经网络预测程序.m

📁 神经网络预测的源程序
💻 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 + -