?? bp9.m
字號:
% bp9.m
%
% 初始化
P=[-6.0 -6.1 -4.1 -4.0 5.0 -5.1 6.0 6.1];
T=[0 0 0.97 0.99 0.01 0.03 1.0 1.0];
[R,Q]=size(P);[S,Q]=size(T);
disp('The bias B is fixed at 3.0 and will not learn')
Z1=menu('Intialize Weight with:',... % 作菜單
'W0=[-0.9];B0=3;',... % 按給定的初始值
'Pick Values with Mouse/Arrow Keys',... % 用鼠標在圖商任點初始值
'Random Intial Condition [Defaut];') % 隨機初始值(缺省情況)
disp('')
B0=3;
if Z1==1
W0=[-0.9]
elseif Z1==3
W0=rand(S,R);
end
% 做權值-誤差關系圖并標注初始值
% 做網絡誤差曲線圖
error1=[];
net=newcf(minmax(P),[1],{'logsig'}); %創建非線性單層網絡
net.b{1}=B0;
j=[-1:0.1:1];
for i=1:21
net.iw{1,1}=j(i);
y=sim(net,P);
err=sumsqr(y-T);
error1=[error1 err];
end
plot(j,error1) %網絡誤差曲線圖
hold on
Z2=menu('Use momentium constant of:',... %作菜單
'0.0',...
'0.95 [Default]');
if Z1==2
[W0,dummy]=ginput(1);
end
disp('')
% 訓練網絡
if Z2==1
momentum=0;
else
momentum=0.95;
end
ls=[];error=[];w=[];
max_epoch=500;err_goal=0.01;
lp.lr=0.05;lp.mc=momentum; % 賦初值
err_ratio=1.04;
W=W0;B=B0;
A=logsig(W0*P+B0*ones(1,8));E=T-A;SSE=sumsqr(E);
for epoch=1:max_epoch
if SSE<err_goal
epoch=epoch-1;
break;
end
D = A.*(1-A).*E;
gW= D*P';
dw=learngdm([],[],[],[],[],[],[],gW,[],[],lp,ls);
% 權值的增量
ls.dw=dw; % 賦學習狀態中的權值增量
TW=W+dw; % 變化后的權值
TA=logsig(TW*P+B*ones(1,8));TE=T-TA;TSSE=sumsqr(TE);
% 求輸出結果
if TSSE>SSE*err_ratio % 判斷賦動量因子
mc=0;
elseif TSSE<SSE
mc=momentum;
end
W=TW;A=TA;E=TE;SSE=TSSE;
error=[error TSSE]; % 記錄誤差
w=[w W]; % 記錄權值
end
plot(w,error,'or'); % 做誤差隨權值的變化圖
hold off
disp('按任一鍵繼續')
pause
figure(2)
plot(error) % 訓練誤差圖
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -