声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 10085|回复: 28

[共享资源] 小波神经网络程序

[复制链接]
发表于 2006-9-8 15:55 | 显示全部楼层 |阅读模式

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

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

x
  1. clc
  2. clear
  3. %step 1=========================
  4. %定义输入样本;
  5. t=0:0.01:1.5;
  6. x=-sin(2*pi*t);
  7. targ=[0 0 1 1 0 0 ];
  8. eta=0.02;aerfa=0.935;
  9. %初始化连接权wjh(输出层和隐层的连接权);whi(隐层和输出层的连接权);
  10. %假设小波函数节点数为:H个;样本数为P;
  11. %输出节点数为:J个;输入节点数为:I个;
  12. H=15;P=2;
  13. I=length(t);
  14. J=length(targ);
  15. %初始化小波参数
  16. b=rand(H,1);
  17. a=rand(H,1);
  18. %初始化权系数;
  19. whi=rand(I,H);
  20. wjh=rand(H,J);
  21. %阈值初始化;
  22. b1=rand(H,1);
  23. b2=rand(J,1);
  24. p=0;
  25. %保存的误差;
  26. Err_NetOut=[];
  27. flag=1;count=0;
  28. while flag>0
  29. flag=0;
  30. count=count+1;

  31. %step 2=================================
  32. xhp1=0;
  33. for h=1:H
  34. for i=1:I
  35. xhp1=xhp1+whi(i,h)*x(i);
  36. end
  37. ixhp(h)=xhp1+b1(h);
  38. xhp1=0;
  39. end
  40. for h=1:H
  41. oxhp(h)=fai((ixhp(h)-b(h))/a(h));
  42. end
  43. %step 3====================================
  44. ixjp1=0;
  45. for j=1:J
  46. for h=1:H
  47. ixjp1=ixjp1+wjh(h,j)*oxhp(h);
  48. end
  49. ixjp(j)=ixjp1+b2(j);
  50. ixjp1=0;
  51. end
  52. for i=1:J
  53. oxjp(i)=fnn(ixjp(i));
  54. end
  55. %step 6==保存每次误差=====
  56. wuchayy=1/2*sumsqr(oxjp-targ);
  57. %E_x=1/2*sumsqr(x);
  58. Err_NetOut=[Err_NetOut wuchayy];%保存每次的误差;
  59. %Err_rate=Err_NetOut/E_x;

  60. %Err_rate

  61. %oxjp

  62. %求detaj ,detab2==================================
  63. for j=1:J
  64. detaj(j)=-(oxjp(j)-targ(j))*oxjp(j)*(1-oxjp(j));
  65. end

  66. for j=1:J
  67. for h=1:H
  68. detawjh(h,j)=eta*detaj(j)*oxhp(h);
  69. end
  70. end
  71. detab2=eta*detaj;

  72. %求detah, detawhi detab1 detab detaa;========================

  73. sum=0;
  74. for h=1:H
  75. for j=1:J
  76. sum=detaj(j)*wjh(h,j)*diffai((ixhp(h)-b(h))/a(h))/a(h)+sum;
  77. end
  78. detah(h)=sum;
  79. sum=0;
  80. end
  81. for h=1:H
  82. for i=1:I
  83. detawhi(i,h)=eta*detah(h)*x(i);
  84. end
  85. end
  86. detab1=eta*detah;
  87. detab=-eta*detah;
  88. for h=1:H
  89. detaa(h)=-eta*detah(h)*((ixhp(h)-b(h))/a(h));
  90. end

  91. %引入动量因子aerfa,修正各个系数==========================================
  92. wjh=wjh+(1+aerfa)*detawjh;
  93. whi=whi+(1+aerfa)*detawhi;
  94. a=a+(1+aerfa)*detaa';
  95. b=b+(1+aerfa)*detab';
  96. b1=b1+(1+aerfa)*detab1';
  97. b2=b2+(1+aerfa)*detab2';

  98. %======================================================
  99. %引入修正算法!!

  100. %判断所有的样本是否计算完==================================
  101. p=p+1;
  102. if p~=P
  103. flag=flag+1;
  104. else
  105. if Err_NetOut(end)>0.05
  106. flag=flag+1;

  107. else
  108. figure;
  109. plot(Err_NetOut);
  110. title('误差曲线');
  111. disp('目标达到');
  112. %disp(oxjp);
  113. end
  114. end
  115. if count>2000
  116. figure;
  117. plot(Err_NetOut);
  118. title('误差曲线');
  119. disp('目标未达到');
  120. disp(oxjp);
  121. break;
  122. end
  123. end
复制代码


这里还需要定义三个函数

1. diffai.m
  1. function y3=diffai(x);
  2.     y3=-0.75*sin(1.75*x)*exp(-x.^2/2)-cos(1.75*x)*exp(-x.^2/2)*x;
复制代码


2. fai.m
  1. function yl=fai(x)
  2.     yl=cos(0.75.*x)+exp(-x.^2/2);
复制代码

3. fnn.m
  1. function y2=fnn(x)
  2.     y2=1/(1+exp(-x));
复制代码

点评

赞成: 5.0
赞成: 5
谢谢分享!!  发表于 2014-3-27 21:36

评分

2

查看全部评分

回复
分享到:

使用道具 举报

发表于 2006-10-11 19:27 | 显示全部楼层
请问怎么在MATLAB中用训练好的小波神经网络来预测呢?
本人是新手,请多多包涵!
发表于 2006-10-12 21:08 | 显示全部楼层
同问,请楼主解答~~~~~~~~~~
发表于 2006-10-13 17:43 | 显示全部楼层
还有一个问题,楼主的程序好像是以单输入单输出的。
能提供多输入单输出的程序吗?
小弟先谢了!

[ 本帖最后由 橄榄石 于 2006-10-13 17:50 编辑 ]
发表于 2006-10-20 15:01 | 显示全部楼层
原帖由 橄榄石 于 2006-10-13 17:43 发表
还有一个问题,楼主的程序好像是以单输入单输出的。
能提供多输入单输出的程序吗?
小弟先谢了!



请看说明“%输出节点数为:J个;输入节点数为:I个;”
发表于 2006-10-20 15:03 | 显示全部楼层
原帖由 橄榄石 于 2006-10-11 19:27 发表
请问怎么在MATLAB中用训练好的小波神经网络来预测呢?
本人是新手,请多多包涵!


不是可以输出权值吗?
发表于 2006-10-20 16:32 | 显示全部楼层
不好意思,新手,见笑了!
请多多指教!
发表于 2006-10-20 16:48 | 显示全部楼层
输入节点数跟输入层维数好像不是一个概念吧
发表于 2006-10-21 07:57 | 显示全部楼层
原帖由 橄榄石 于 2006-10-20 16:48 发表
输入节点数跟输入层维数好像不是一个概念吧



输入层和输出层节点数选择由应用要求而定:输入节点数一般等于要训练的样本矢量维数,可以是原始数据维数或提取的特征维数;输出单元数在分类网络中取类别数M或log2m,在逼近网络中取要逼近的函数输出空间维数。当网络用于工业过程辨识或时间序列预测建模时,输入节点数的选择应由非线性系统定阶的结果确定。

点评

赞成: 4.0
赞成: 4
  发表于 2014-3-27 21:37

评分

1

查看全部评分

发表于 2006-10-23 22:17 | 显示全部楼层
0.38 37 526 47.6 56.9
0.38 43 526 47.6 58.1
0.49 43 408 47.6 46.5
0.49 31 408 47.6 46.4
0.57 31 351 47.6 32.6
0.57 37 351 47.6 34.7
0.33 32 606 48.9 68.5
0.33 38 606 48.9 72.3
0.43 38 465 48.9 56.5
0.43 26 465 48.9 53.0
0.64 26 313 48.9 29.2
0.64 32 313 48.9 30.8
0.43 32 449 40.4 44.1
0.69 35 283 48.9 27.1
0.43 32 465 48.9 50.7
0.60 36 325 48.9 35.6
0.67 45 289 48.9 32.1
0.54 43 361 48.9 43.3
0.54 43 380 48.9 38.6
0.43 40 436 48.9 57.9
suffer,您好!
我有以上一个训练样本集,其中前4列的数据为输入,后一列数据为输出用小波网络进行训练,网络训练好之后,输入一组数据如:0.41 42 444 48.9,希望得出它对应的输出值。
请问用上面的程序能实现吗?谢谢!
发表于 2006-10-24 15:46 | 显示全部楼层
应该是可以的,你试试吧,这个程序我也没用过,只是简单的看了看
发表于 2006-11-1 17:00 | 显示全部楼层
先顶起
这个看起来还是不错的
希望更多人看到
学些一下
发表于 2006-11-2 22:34 | 显示全部楼层
原帖由 橄榄石 于 2006-10-23 22:17 发表
0.38 37 526 47.6 56.9
0.38 43 526 47.6 58.1
0.49 43 408 47.6 46.5
0.49 31 408 47.6 46.4
0.57 31 351 47.6 32.6
0.57 37 351 47.6 34.7
0.33 32 606 48.9 68.5
0.33 38 606 48.9 72.3
0.43  ...

就是,最好能有 个计算实例就好了
发表于 2006-11-2 22:36 | 显示全部楼层
程序中的
eta=0.02;aerfa=0.935
代表什么意思?
发表于 2006-11-7 11:04 | 显示全部楼层
原帖由 wateropt 于 2006-11-2 22:36 发表
程序中的
eta=0.02;aerfa=0.935
代表什么意思?



参考改进型bp算法

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-24 00:50 , Processed in 0.098947 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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