📄 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 + -