?? p115bp.m
字號:
%BP網絡的第一階段學習期(訓練加權系數wki,wij)
%初始化
lr=0.01;err_goal=0.001; %lr為學習速率;err_goal為期望誤差最小值
max_epoch=10000;a=0.9; %max_epoch為訓練的最大次數;a為慣性系數
Oi=0;Ok=0; %置隱含層和輸出層各神經元輸出初值為零
%提供兩組訓練集和目標值(3輸入,2輸出)
X=[1 2;-1 1;1 3];
T=[1 1;1 1];
%初始化wki,wij(M為輸入節點j的數量;q為隱含層節點i的數量;L為輸出節點k的數量)
[M,N]=size(X);q=10;[L,N]=size(T);%N為訓練集對數量
wij=rand(q,M);
wki=rand(L,q);
wij0=zeros(size(wij));
wki0=zeros(size(wki));
for epoch=1:max_epoch
%計算隱含層各神經元輸出
NETi=wij*X;
for j=1:N
for i=1:q
Oi(i,j)=2/(1+exp(-NETi(i,j)))-1;
end
end
%計算輸出層各神經元輸出
NETk=wki*Oi;
for i=1:N
for k=1:L
Ok(k,i)=2/(1+exp(-NETk(k,i)))-1;
end
end
%計算誤差函數
E=((T-Ok)'*(T-Ok))/2;
if(E<err_goal)break;end
%調整輸出層加權系數
deltak=Ok.*(1-Ok).*(T-Ok);
w=wki;
wki=wki+lr*deltak*Oi'+a*(wki-wki0);
wki0=w;
%調整隱含層加權系數
deltai=Oi.*(1-Oi).*(deltak'*wki)';
w=wij;
wij=wij+lr*deltai*X'+a*(wij-wij0);
wij0=w;
end
epoch %顯示計算次數
%BP網絡的第二階段工作期(根據訓練好的wki,wij和給定的輸入計算輸出)
X1=X; %給定輸入
%計算隱含層各神經元輸出
NETi=wij*X1;
for j=1:N
for i=1:q
Oi(i,j)=2/(1+exp(-NETi(i,j)))-1;
end
end
%計算輸出層各神經元輸出
NETk=wki*Oi;
for i=1:N
for k=1:L
Ok(k,i)=2/(1+exp(-NETk(k,i)))-1;
end
end
Ok %顯示網絡輸出層的輸出
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -