bp神经网络matlab 调用netff函数示例

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'},'traincgf');
    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:')

See Also