声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2733|回复: 3

[共享资源] RBF源程序

[复制链接]
发表于 2006-11-6 23:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  1. clear,clc;
  2. SamNum = 100;                       % 训练样本数
  3. %TargetSamNum = length(TargetIn);                 % 测试样本数
  4. InDim = 1;                          % 样本输入维数
  5. UnitNum = 10;                       % 隐节点数
  6. MaxEpoch = 2500;                    % 最大训练次数
  7. E0 = 0.9;                           %目标误差

  8. % 根据目标函数获得样本输入输出
  9. rand('state',sum(100*clock))
  10. NoiseVar = 0.1;
  11. Noise = NoiseVar*randn(1,SamNum);
  12. SamIn = 8*rand(1,SamNum)-4;
  13. SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);
  14. SamOut = SamOutNoNoise + Noise;

  15. TargetIn = -4:0.08:4;
  16. TargetOut = 1.1*(1-TargetIn+2*TargetIn.^2).*exp(-TargetIn.^2/2);

  17. TargetSamNum = length(TargetIn);                 % 测试样本数

  18. figure
  19. hold on
  20. grid
  21. plot(SamIn,SamOut,'b+')
  22. plot(TargetIn,TargetOut,'r--')
  23. xlabel('Input x');
  24. ylabel('Output y');

  25. Center = 8*rand(InDim,UnitNum)-4;      %Data Center
  26. SP = 0.2*rand(1,UnitNum)+0.1;          %Spread Constant
  27. W = 0.2*rand(1,UnitNum)-0.1;           %Weigh Matrix

  28. lrCent = 0.001;                                                        % 隐节点数据中心学习系数
  29. lrSP = 0.001;                                                        % 隐节点扩展常数学习系数
  30. lrW = 0.001;                                                        % 隐节点输出权值学习系数
  31. ErrHistory = [];                            % 用于记录每次参数调整后的训练误差
  32. for epoch = 1:MaxEpoch
  33.     AllDist = dist(Center',SamIn);
  34.     SPMat = repmat(SP',1,SamNum);
  35.     UnitOut = radbas(AllDist./SPMat);
  36.     NetOut = W*UnitOut;
  37.     Error = SamOut-NetOut;
  38.    
  39.     %停止学习判断
  40.     SSE = sumsqr(Error);

  41.     % 记录每次权值调整后的训练误差
  42.     ErrHistory = [ErrHistory SSE];

  43.     if SSE<E0, break, end
  44.    
  45.     for i = 1:UnitNum
  46.         CentGrad = (SamIn-repmat(Center(:,i),1,SamNum))...
  47.                   *(Error.*UnitOut(i,:)*W(i)/(SP(i)^2))';
  48.         SPGrad = AllDist(i,:).^2*(Error.*UnitOut(i,:)*W(i)/(SP(i)^3))';
  49.         WGrad = Error*UnitOut(i,:)';

  50.         Center(:,i) = Center(:,i) + lrCent*CentGrad;
  51.         SP(i) = SP(i) + lrSP*SPGrad;
  52.         W(i) = W(i) + lrW*WGrad;
  53.     end
  54. end

  55. % 测试
  56. TestDistance = dist(Center',TargetIn);
  57. TestSpreadsMat = repmat(SP',1,TargetSamNum);
  58. TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat);
  59. TestNNOut = W*TestHiddenUnitOut;
  60. plot(TargetIn,TestNNOut,'k-');legend('Sample Data','Desired Curve','RBF NN Curve');

  61. % 绘制学习误差曲线
  62. figure
  63. hold on
  64. grid
  65. [xx,Num] = size(ErrHistory);
  66. plot(1:Num,ErrHistory,'k-');
复制代码

[ 本帖最后由 suffer 于 2006-11-20 08:14 编辑 ]

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2008-4-1 16:12 | 显示全部楼层
楼主能详细解释一下么?我是新手有点看不懂哦:@Q
发表于 2008-7-16 08:51 | 显示全部楼层

回复 2楼 的帖子

该程序是魏海坤编著的《神经网络结构设计的理论与方法》(国防工业出版社)一书后附的程序,你可以参考这本书,里面有详细的解释。谢谢楼主分享。

[ 本帖最后由 civilkf 于 2008-7-16 09:01 编辑 ]
发表于 2009-4-15 23:27 | 显示全部楼层

rbf

:handshake :
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-18 11:31 , Processed in 0.117613 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表