bp-matlab-code.txt

来自「BP神经网络 MATLAB源码 没有用到神经网络工具箱」· 文本 代码 · 共 80 行

TXT
80
字号
clear
%数据输入
huanghe_p=[370	503	434	575	490	420	560	640	558	343	326	405	446	423	422	697	598	377	435	472	451	667	601	689	541	485	425	389	382	707	422];
huanghe_t=[515	713	586	753	720	567	717	987	810	489	453	589	639	568	595	982	849	519	615	652	599	941	893	999	758	701	630	561	520	1040 535];

%归一化处理
p=(huanghe_p-min(huanghe_p))/(max(huanghe_p)-min(huanghe_p));
t=(huanghe_t-min(huanghe_t))/(max(huanghe_t)-min(huanghe_t));

%数据输入2:网络有关参数
EPOCHS=10000;
GOAL=0.000005;

%建立bp神经网络,并训练,仿真。其中输入为p,输出为t

%-------------------------隐层神经元确定-----------------------------

s=3:15;%s 为常向量,表示神经元的个数
res=zeros(size(s));%res将要存储误差向量,这里先置零

pn=[p(1:5);p(6:10);p(11:15);p(16:20)];
tn=[t(1:5);t(6:10);t(11:15);t(16:20)];
for i=1:length(s)           
    net=newff(minmax(pn),[s(i),4],{'tansig','purelin'},'trainlm');
    net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;
    net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;
    net.b{1,1}=zeros(size(net.b{1,1}))+0.5;
    net.b{2,1}=zeros(size(net.b{2,1}));
    net.trainParam.epochs=EPOCHS;
    net.trainParam.goal =GOAL;
    net=train(net,pn,tn);
    y=sim(net,pn);
e=tn-y;
error=mse(e,net);
res(i)=norm(error);
    
end
%选取最优神经元数,number为使得误差最小的隐层神经元个数
number=find(res==min(res));
if(length(number)>1) no=number(1)
else no=number
end

clear error,res
%选定隐层神经元数目后,建立网络,训练仿真。
net=newff(minmax(pn),[no,4],{'tansig','purelin'},'trainlm');
    net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;
    net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;
    net.b{1,1}=zeros(size(net.b{1,1}))+0.5;
    net.b{2,1}=zeros(size(net.b{2,1}));
    net.trainParam.epochs=EPOCHS;
    net.trainParam.goal =GOAL;
net=train(net,pn,tn);
y=sim(net,pn);
e=tn-y;
error=mse(e,net)%error为网络的误差向量
r=norm(error);%r为网络的整体误差
save net                      %保存最好的网络

%预测
input=[p(11:15);p(16:20);p(21:25);p(26:30)];
yuce=sim(net,input);

%结果反归一化
y1=[y(1,:) y(2,:) y(3,:) y(4,:)];
yuce1=[yuce(1,:) yuce(2,:) yuce(3,:) yuce(4,:)];
t1=y1*(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+min(huanghe_t(1:20));
yuce2=yuce1*(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+min(huanghe_t(1:20));

%计算误差
wucha=abs(t1-huanghe_t(1:20))./huanghe_t(1:20)
b=minmax(wucha);
average_wucha=mean(wucha);
%作图
figure(1)
plot(1:20,huanghe_t(1:20),'*-',1:20,t1,'o:')

figure(2)
plot(1:20,huanghe_t(11:30),'*-',1:20,yuce2,'o:')

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?