?? wf4.m
字號:
% wf4.m
%
P = [1 -1.2];
T = [0.5 1];
[R,Q] = size(P);
[S,Q] = size(T);
[W,B] = rands(S,R);
% 畫誤差曲面圖
Wrange = -2:0.1:2;Brange = -2:0.1:2; % 限定W和B值的坐標范圍
ES = errsurf(P,T,Wrange,Brange,'purelin'); % 求神經元的誤差平面
mesh(ES,[60,30]); %作三維網狀面,視角【60,30】
title('Error Surface Graph')
disp('按任一鍵繼續')
pause
% 設計網絡權值并畫出投影圖
figure(2); %作第二個圖
net = newlind(P,T); %求理想的權值和偏差
DW = net.iw{1,1};DB = net.b{1}; %賦理想的權值和偏差
[C,h] = contour(Wrange,Brange,ES); %作等高線圖,ES為高
%返回等高線矩陣C,列向量h是線或對象的句柄,
%一條線一個句柄,這些被用作CLABEL的輸入,
%每個對象包含每個等高線的高度
clabel(C,h) %標上高度值
colormap cool %桌面的顏色cool(青和洋紅)
axis('equal')
hold on
plot(DW,DB,'ob');
xlabel('W'),ylabel('B')
disp('按任一鍵繼續')
pause
LR = menu('Use a learning rate of; ',... %選擇學習速率
'1.7*maxlinr',...
'2.5*maxlinr');
disp('')
% 訓練權值
disp_freq=1;
max_epoch=30;
err_goal=0.001;
if LR==1
lp.lr=1.7*maxlinlr(P,'bias');
else
lp.lr=2.5*maxlinlr(P,'bias');
end
a = W*P+B;
A = purelin(a);
E=T-A;SSE=sumsqr(E); %求誤差矩陣元素的平方和
errors = [SSE];
for epoch = 1: max_epoch %訓練權值
if SSE<err_goal
epoch = epoch-1;
break
end
LW = W;LB = B;
dw = learnwh([],P,[],[],[],[],E,[],[],[],lp,[]);
db=learnwh(B,ones(1,Q),[],[],[],[],E,[],[],[],lp,[]);
W = W+dw;B = B+db;
a = W*P+B;
A = purelin(a);
E=T-A;SSE=sumsqr(E);
errors=[errors SSE]; %把誤差變為一個行向量
if rem(epoch,disp_freq)==0
plot([LW W],[LB B],'r-'); %顯示權值和偏差向量訓練圖
drawnow %刷新
end
end
hold off
figure(3);
m=W*P+B;
a=purelin(m);
plot(errors); %作每次訓練的誤差圖
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -