?? bp1.m
字號(hào):
%BP neural network
clear;
clc;
close all;
% inputNums=k;%輸入層、隱含層、輸出層數(shù)
% outputNums=n;
% hideNums=m;
k=0.5;
x=[14 1.5 -0.2 -0.2
25 4.5 0 1
68 14 0.1 1.4
32 7 0.1 0.7
56 12 0.2 1.2
10 2.4 0.1 0.3
17 3.8 0.2 0.1
6 1.5 0.1 0
-3 -0.3 0 -0.8
3 0.3 0 0.8];
for i=1:4
x=[x;x];
end
fc=[2*k*(0.5-rand(1,1))*7 2*k*(0.5-rand(1,1))*2 2*k*(0.5-rand(1,1))*0.4 2*k*(0.5-rand(1,1))*0.4];
for i=1:159
fc=[fc;2*(0.5-rand(1,1))*k*7 2*k*(0.5-rand(1,1))*2 2*k*(0.5-rand(1,1))*0.4 2 *k*(0.5-rand(1,1))*0.4];
end
F=x+fc;
d=eye(10);
for i=1:4
d=[d;d];
end
inputNums=4;%輸入層、隱含層、輸出層數(shù)
outputNums=10;
hideNums=19;
maxcount=3000;%最大訓(xùn)練次數(shù)
samplenum=160;%樣本數(shù)
precision=0.01;
yitanet=0.001;
yitaUL=0.001;
yitaT=0.001;
alphanet=0.99;
alphaUL=0.99;
alphaT=0.99;%%學(xué)習(xí)率及動(dòng)量因子的初始化
count=1;
error=zeros(1,count);
errorp=zeros(1,samplenum);
%%%權(quán)值初始化
v=rand(inputNums,hideNums);
deltv=zeros(inputNums,hideNums);
dv=zeros(inputNums,hideNums);
st1=zeros(1,hideNums);
deltst1=zeros(1,hideNums);
dst1=zeros(1,hideNums);
w=rand(hideNums,outputNums);
deltw=zeros(hideNums,outputNums);
dw=zeros(hideNums,outputNums);
st2=zeros(1,outputNums);
deltst2=zeros(1,outputNums);
dst2=zeros(1,outputNums);
Ui=ones(1,hideNums);
Uj=ones(1,outputNums);
Ti=ones(1,hideNums);
Tj=ones(1,outputNums);
Li=zeros(1,hideNums);
Lj=zeros(1,outputNums);
% samplelist=[1,0,0;0,1,0;0,0,1];
% expectlist=[1,0,0;0,1,1;0,0,1];
samplelist=F;
expectlist=d;
while (count<=maxcount)
c=1;
while (c<=samplenum)
for j=1:outputNums
Y(j)=expectlist(c,j);%獲得期望輸出的向量
end
for l=1:inputNums
I(l)=samplelist(c,l);%獲得輸入的向量(數(shù)據(jù))
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%前向Forward();
%隱含層
tic;
for i=1:hideNums
neti(i)=0.0;
for l=1:inputNums
neti(i)=neti(i)+I(l)*v(l,i);
end
neti(i)=neti(i)+st1(i);
H(i)=(Ui(i)-Li(i))/(1+exp(-neti(i)/Ti(i)))+Li(i);
end
%輸出層
for j=1:outputNums
netj(j)=0.0;
for i=1:hideNums
netj(j)=netj(j)+H(i)*w(i,j);
end
netj(j)=netj(j)+st2(j);
O(j)=(Uj(j)-Lj(j))/(1+exp(-netj(j)/Tj(j)))+Lj(j);
end
%BpError(c);
errortmp=0.0;
for j=1:outputNums
errortmp=errortmp+((Y(j)-O(j))^2);
end
errorp(c)=1/10*errortmp;
%end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%反向%Backward();
for j=1:outputNums
deltnetj(j)=-(O(j)-Uj(j))*(O(j)-Lj(j))/(Tj(j)*(Uj(j)-Lj(j)))*(Y(j)-O(j));
deltUj(j)=1/(1+exp(-netj(j)/Tj(j)))*(Y(j)-O(j));
deltLj(j)=(1-1/(1+exp(-netj(j)/Tj(j))))*(Y(j)-O(j));
deltTj(j)=netj(j)*(O(j)-Uj(j))*(O(j)-Lj(j))/((Tj(j)^2)*(Uj(j)-Lj(j)))*(Y(j)-O(j));
end
double tem1;double tem2;double tem3;double tem4;
tem1=0.0;tem2=0.0;tem3=0.0;tem4=0.0;
for i=1:hideNums
for j=1:outputNums
tem1=tem1+deltnetj(j)*w(i,j);
tem2=tem2+deltUj(j)*w(i,j);
tem3=tem3+deltLj(j)*w(i,j);
tem4=tem4+deltTj(j)*w(i,j);
end
deltneti(i)=-tem1*(H(i)-Ui(i))*(H(i)-Li(i))/(Ti(i)*(Ui(i)-Li(i)));
deltUi(i)=tem2*1/(1+exp(-neti(i)/Ti(i)));
deltLi(i)=tem3*(1-1/(1+exp(-neti(i)/Ti(i))));
deltTi(i)=tem4*neti(i)*(H(i)-Ui(i))*(H(i)-Li(i))/((Ti(i)^2)*(Ui(i)-Li(i)));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%調(diào)整各層權(quán)值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%輸出層調(diào)整
%%%%%%%%%%%%%%%%權(quán)值調(diào)整
for i=1:hideNums
for j=1:outputNums
deltw(i,j)=yitanet*deltnetj(j)*H(i);
w(i,j)=w(i,j)+deltw(i,j)+alphanet*dw(i,j);
dw(i,j)=deltw(i,j);
end
end
%%%%%%%%%%%%%%閾值調(diào)整
for j=1:outputNums
deltst2(j)=yitanet*deltnetj(j);
st2(j)=st2(j)+deltst2(j)+alphanet*dst2(j);
dst2(j)=deltst2(j);
end
%%%%%%%%%%%%%U,L,T調(diào)整
%調(diào)整U
for j=1:outputNums
deltUj(j)=yitaUL*deltUj(j);
dUj(j)=deltUj(j);
Uj(j)=Uj(j)+deltUj(j)+alphaUL*dUj(j);
end
%調(diào)整L
for j=1:outputNums
deltLj(j)=yitaUL*deltLj(j);
dLj(j)=deltLj(j);
Lj(j)=Lj(j)+deltLj(j)+alphaUL*dLj(j);
end
%調(diào)整T
for j=1:outputNums
deltTj(j)=yitaT*deltTj(j);
dTj(j)=deltTj(j);
Tj(j)=Tj(j)+deltTj(j)+alphaT*dTj(j);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%隱含層調(diào)整
%%%%%權(quán)值調(diào)整
for l=1:inputNums
for i=1:hideNums
deltv(l,i)=yitanet*deltneti(i)*I(l);
v(l,i)=v(l,i)+deltv(l,i)+alphanet*dv(l,i);
dv(l,i)=deltv(l,i);
end
end
%%%%%閾值調(diào)整
for i=1:hideNums
deltst1(i)=yitanet*deltneti(i);
st1(i)=st1(i)+deltst1(i)+alphanet*dst1(i);
dst1(i)=deltst1(i);
end
%調(diào)整U
for i=1:hideNums
deltUi(i)=yitaUL*deltUi(i);
dUi(i)=deltUi(i);
Ui(i)=Ui(i)+deltUi(i)+alphaUL*dUi(i);
end
%調(diào)整L
for i=1:hideNums
deltLi(i)=yitaUL*deltLi(i);
dLi(i)=deltLi(i);
Li(i)=Li(i)+deltLi(i)+alphaUL*dLi(i);
end
%調(diào)整T
for i=1:hideNums
deltTi(i)=yitaT*deltTi(i);
dTi(i)=deltTi(i);
Ti(i)=Ti(i)+deltTi(i)+alphaT*dTi(i);
end
%end
c=c+1;
end
double tmp;
tmp=0.0;
for i=1:samplenum
tmp=tmp+errorp(i);%*errorp(i)
end
tmp=tmp/c;
error(count)=1/2*sqrt(tmp);
if (error(count)<precision)
break;
end
count=count+1;%訓(xùn)練次數(shù)加1
end
toc;
p=1:count-1;
plot(p,error(p),'-');
%網(wǎng)絡(luò)測(cè)試
X_test=[14 1.5 -0.2 -0.2
25 4.5 0 1
68 14 0.1 1.4
32 7 0.1 0.7
56 12 0.2 1.2
10 2.4 0.1 0.3
17 3.8 0.2 0.1
6 1.5 0.1 0];
[p,q]=size(X_test);
for m=1:p
for l=1:q
A(l)=X_test(m,l);
end
%隱含層
for i=1:hideNums
neti(i)=0.0;
for l=1:q
neti(i)=neti(i)+A(l)*v(l,i);
end
neti(i)=neti(i)+st1(i);
H(i)=(Ui(i)-Li(i))/(1+exp(-neti(i)/Ti(i)))+Li(i);
end
%輸出層
for j=1:outputNums
netj(j)=0.0;
for i=1:hideNums
netj(j)=netj(j)+H(i)*w(i,j);
end
netj(j)=netj(j)+st2(j);
O(j)=(Uj(j)-Lj(j))/(1+exp(-netj(j)/Tj(j)))+Lj(j);
end
j=1;
for i=1:outputNums
if O(1)<O(i)
j=i;
O(1)=O(i);
end
end
disp('The trouble is:');
if j==1
disp(' TCC SYSTEM OFF ');
end
if j==2
disp(' 3.0 BLEED OPEN ');
end
if j==3
disp(' TWO 3.5 BLEED OPEN ');
end
if j==4
disp(' ONE 3.5 BLEED OPEN ');
end
if j==5
disp(' 3.0 AND ONE 3.5 OPEN ');
end
if j==6
disp(' +2% 8TH STAGE BLEED LEAK ');
end
if j==7
disp(' +2% 15TH STAGE BLEED LEAK ');
end
if j==8
disp(' COWL AND ENGINE ANTI-ICE "ON" ');
end
if j==9
disp(' +2 DEG BETA ANGLE SHIFT ');
end
if j==10
disp(' -2 DEG BETA ANGLE SHIFT ');
end
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -