?? seqlnok.m
字號:
% 驗證串行學習方式下神經網絡函數能否收斂到目標函數:目標函數和神經網絡均使用一個隱節點
% 目標函數為中心為原點的Gaussian函數,RBF網只有數據中心可調,其輸出權值和偏移固定為1
% 性能指標函數取目標函數和神經網絡函數之差的平方和
% 用三個訓練樣本,增量式學習,每個樣本訓練次數為MaxEpoch。此三個訓練樣本對應的目標函數只有一個局部最小點(原點)
% 結果:算法使數據中心離原點還有一定距離,甚至可能不收斂
clear,clc;
p = -4:.1:4;
[X,Y] = meshgrid(p);
Z = exp(-X.^2 - Y.^2);
mesh(X,Y,Z);
plot3(X,Y,Z);
title('Radial Basis Transfer Function');
xlabel('Input x1');
ylabel('Input x2');
zlabel('Output z');
% Define inputs and associated targets.
hold on
TrainDataIn = [0.5 0.4 -0.3;...
0.3 -0.6 0.5];
TrainDataOut = [.7118 .5945 .7118];
plot3(TrainDataIn(1,:),TrainDataIn(2,:),TrainDataOut,'.','markersize',20);
pause(3);grid;figure;
[InDim,TrainDataNum] = size(TrainDataIn);
UnitCenter = [0.9; 0.8];
lr = 0.3; % 隱節點數據中心梯度調節學習系數
MaxEpoch = 100; % 隱節點數據中心調節最大學習次數
ErrVect = [];
function
for index = 1:TrainDataNum
NewInput = TrainDataIn(:,index);
NewOutput = TrainDataOut(:,index);
for epoch = 1:MaxEpoch
AllDist = dist(UnitCenter',NewInput);
NetOut = radbas(AllDist);
Error = NewOutput-NetOut;
CentGrad = (Error*NetOut)*(NewInput-UnitCenter);
UnitCenter = UnitCenter + lr*CentGrad;
ZZ = exp(-(X-UnitCenter(1,1)).^2 - (Y-UnitCenter(2,1)).^2);
GenError = sqrt(sumsqr(Z-ZZ)/(81*81));
ErrVect = [ErrVect GenError];
UnitCenter';
end
end
epoch
UnitCenter
hold off
plot(1:TrainDataNum*MaxEpoch,ErrVect,'k-');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -