📄 wh_bp_main.m
字号:
%function wh_BP_main(Die_Dai_Shu,goal,Yin_1,Yin_2)
clear;clc;
[X,y,T]=Creat_Original_Data1;
%-------------------------------------------------
Die_Dai_Shu=3000;goal=0.01;Yin_1=5;Yin_2=5;aa=0.1;
%-------------------------------------------------
S_Rate_In=0.4;S_Rate_Yin=0.6;S_Rate_Out=0.8;
[LM,M]=size(X);%M=5;%输入点个数
[LP,P]=size(T);%P=5;%输出点个数
I=Yin_1;%第I曾神经元个数
J=Yin_2;%第J层神经元个数
N=Die_Dai_Shu;Goal=goal;
E=zeros(1,N);%误差能量
WMI=Creat_W_Matix(M,I);
WIJ=Creat_W_Matix(I,J);
WJP=Creat_W_Matix(J,P);
D_WMI=zeros(M,I);D_WIJ=zeros(I,J);D_WJP=zeros(J,P);
Chuan_Can=[M I J P S_Rate_In,S_Rate_Yin,S_Rate_Out,aa];
E_Now=zeros(1,LM);
for n=1:N
Site=randperm(LM);
flag=1;%用来标志每次的误差E_Now(i),为1说明训练周期所有的E_Now(i)<goal
for i=1:LM
[VI,VJ,y(Site(i),:)]=Cal_Parameter_Forward(WMI,WIJ,WJP,X(Site(i),:),Chuan_Can);
for p=1:P
E(n)=E(n)+0.5*(T(Site(i),p)-y(Site(i),p))^2;
E_Now(i)=E_Now(i)+0.5*(T(Site(i),p)-y(Site(i),p))^2;
end
if (E_Now(i)>goal) flag=0; end
[WMI,WIJ,WJP,D_WMI,D_WIJ,D_WJP]=Cal_Parameter_Back(WMI,WIJ,WJP,Chuan_Can,VI,VJ,y(Site(i),:),X(Site(i),:),T(Site(i),:),D_WMI,D_WIJ,D_WJP);
end
E(n)=E(n)/LM;
% if (E(n)<Goal) break; end
if (flag==1) break; end
end
save('W','WMI','WIJ','WJP');
if E(n)<Goal
disp('该网络收敛');
else
disp('该网络不收敛');
end
for i=1:n
EE(i)=E(i);
end
Space=1:1:n;
Space1=1:1:n+200;
hold on
plot(Space,EE,'-r');
plot(Space1,goal,'-b');
hold off
X
y
T
% Space=1:1:5;
% for i=1:M
% figure(i)
% hold on
% plot(Space,1,'-*b');
% plot(Space,T(i,:),'-*b');
% plot(Space,y(i,:),'-*r');
% hold off
% end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -