声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1928|回复: 2

[共享资源] 基于梯度法的RBF 网设计算法

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

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

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

x
  1. SamNum = 100; % 训练样本数
  2. TargetSamNum = 101; % 测试样本数
  3. InDim = 1; % 样本输入维数
  4. UnitNum = 10; % 隐节点数
  5. MaxEpoch = 5000; % 最大训练次数
  6. E0 = 0.9; % 目标误差
  7. % 根据目标函数获得样本输入输出
  8. rand('state',sum(100*clock))
  9. NoiseVar = 0.1;
  10. Noise = NoiseVar*randn(1,SamNum);
  11. SamIn = 8*rand(1,SamNum)-4;
  12. SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);
  13. SamOut = SamOutNoNoise + Noise;
  14. TargetIn = -4:0.08:4;
  15. TargetOut = 1.1*(1-TargetIn+2*TargetIn.^2).*exp(-TargetIn.^2/2);
  16. figure
  17. hold on
  18. grid
  19. plot(SamIn,SamOut,'k+')
  20. plot(TargetIn,TargetOut,'k--')
  21. xlabel('Input x');
  22. ylabel('Output y');
  23. Center = 8*rand(InDim,UnitNum)-4;
  24. SP = 0.2*rand(1,UnitNum)+0.1;
  25. W = 0.2*rand(1,UnitNum)-0.1;
  26. lrCent = 0.001; % 隐节点数据中心学习系数
  27. lrSP = 0.001; % 隐节点扩展常数学习系数
  28. lrW = 0.001; % 隐节点输出权值学习系数
  29. ErrHistory = []; % 用于记录每次参数调整后的训练误差
  30. for epoch = 1:MaxEpoch
  31. AllDist = dist(Center',SamIn);
  32. SPMat = repmat(SP',1,SamNum);
  33. UnitOut = radbas(AllDist./SPMat);
  34. NetOut = W*UnitOut;
  35. Error = SamOut-NetOut;
  36. %停止学习判断
  37. SSE = sumsqr(Error)
  38. % 记录每次权值调整后的训练误差
  39. ErrHistory = [ErrHistory SSE];
  40. if SSE<E0, break, end
  41. for i = 1:UnitNum
  42. CentGrad = (SamIn-repmat(Center(:,i),1,SamNum))...
  43. *(Error.*UnitOut(i,*W(i)/(SP(i)^2))';
  44. SPGrad = AllDist(i,.^2*(Error.*UnitOut(i,*W(i)/(SP(i)^3))';
  45. WGrad = Error*UnitOut(i,';
  46. Center(:,i) = Center(:,i) + lrCent*CentGrad;
  47. SP(i) = SP(i) + lrSP*SPGrad;
  48. W(i) = W(i) + lrW*WGrad;
  49. end
  50. end
  51. % 测试
  52. TestDistance = dist(Center',TargetIn);
  53. TestSpreadsMat = repmat(SP',1,TargetSamNum);
  54. TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat);
  55. TestNNOut = W*TestHiddenUnitOut;
  56. plot(TargetIn,TestNNOut,'k-')
  57. % 绘制学习误差曲线
  58. figure
  59. hold on
  60. grid
  61. [xx,Num] = size(ErrHistory);
  62. plot(1:Num,ErrHistory,'k-');
复制代码

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2007-1-31 15:43 | 显示全部楼层

运行出错!

??? Error: File: C:\MATLAB7\work\jiyutidufaderbf.m Line: 43 Column: 20
Missing variable or function.
*(Error.*UnitOut(i,*W(i)/(SP(i)^2))';

新手,想从你这里学学。不知道错哪了?
发表于 2008-7-16 09:58 | 显示全部楼层
程序中如下内容有错误:
CentGrad = (SamIn-repmat(Center(:,i),1,SamNum))...
*(Error.*UnitOut(i,*W(i)/(SP(i)^2))';
SPGrad = AllDist(i,.^2*(Error.*UnitOut(i,*W(i)/(SP(i)^3))';
WGrad = Error*UnitOut(i,';
应改为:
    CentGrad = (SamIn-repmat(Center(:,i),1,SamNum))...
                  *(Error.*UnitOut(i,:)*W(i)/(SP(i)^2))';
        SPGrad = AllDist(i,:).^2*(Error.*UnitOut(i,:)*W(i)/(SP(i)^3))';
        WGrad = Error*UnitOut(i,:)';
可参考魏海坤编著的《神经网络结构设计的理论与方法》(国防工业出版社)一书


[ 本帖最后由 civilkf 于 2008-7-16 10:00 编辑 ]

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-6-17 01:07 , Processed in 0.072861 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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