小波神经网络.zip

  • 疯兔子123
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 1
    下载次数
  • 2020-08-13 14:28
    上传日期
一些基础的小波神经网络用于基础的分类代码,不是很复杂
小波神经网络.zip
  • 新建文件夹 (2)
  • mymorlet.m
    86B
  • d_mymorlet.m
    101B
  • main.m
    2.8KB
内容介绍
%这是一个小波神经网络程序 %参考 <青岛海洋大学学报> 2001年第1期 一种基于BP算法学习的小波神经网络%% %step1--------网络初始化------------------------------------------- clc; clear all; %设定期望的误差最小值 err_goal=0.001; %设定最大循环次数 max_epoch=50; %设定修正权值的学习速率0.01-0.7 lr=0.7; epoch=0; x=0:0.01:0.3;%输入时间序列 d=sin(8*pi*x)+sin(16*pi*x);%目标输出序列 M=size(x,2);%输入节点的个数 N=M;%输出节点的个数 n=10;%隐形节点的个数 %这个地方需要改进,由于实际上隐形节点的个数可以通过小波的时频分析确定 Wjk=randn(n,M); Wij=randn(N,n); % a=randn(1,n); a=1:1:n; b=randn(1,n); % stepa=0.2*(x(M)-x(1)); % a=stepa:1 n-1)+stepa; % step=(x(M)-x(1))/n; % b=x(1)+step:step:x(1)+n*step; % y=zeros(1,N);%输出节点初始化 y=zeros(1,N);%输出节点初始化 net=zeros(1,n);%隐形节点初始化 net_ab=zeros(1,n);%隐形节点初始化 %step2--------对网络进行训练------------------------------------------- for i=1:1:N for j=1:1:n for k=1:1:M net(j)=net(j)+Wjk(j,k)*x(k); net_ab(j)=(net(j)-b(j))/a(j); end y(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j)); %mymorlet是judyever编写的小波函数,以后可以扩展成输入不同的小波名字即可 % y(i)=mysigmoid(2,y(i)); end end % plot(x,d,'r',x,y); % title('训练前的目标序列和实际输出序列'); err=d-y; SSE=err*err'; %step3--------调整各个参数------------------------------------------- while (SSE>err_goal & epoch<max_epoch) d_Wjk=zeros(n,M); d_Wij=zeros(N,n); d_a=zeros(1,n); d_b=zeros(1,n); for i=1:1:N for j=1:1:n d_Wij(i,j)=-(d(i)-y(i))*mymorlet(net_ab(j)); %调整d_Wij(i,j) for k=1:1:M d_Wjk(j,k)=d_Wjk(j,k)+ (d(i)-y(i)) * Wij(i,j) ;%计算还没有结束 d_Wjk(j,k)=-d_Wjk(j,k)*d_mymorlet(net_ab(j))*x(k)/a(j);%计算结束 end %调整d_Wjk(j,k) d_b(j)=d_b(j)+(d(i)-y(i))*Wij(i,j);%计算还没有结束 d_b(j)=d_b(j)*d_mymorlet(net_ab(j))/a(j);%计算结束 %调整d_b(j) d_a(j)=d_a(j)+(d(i)-y(i))*Wij(i,j);%计算还没有结束 d_a(j)=d_a(j)*d_mymorlet(net_ab(j))*((net(j)-b(j))/b(j))/a(j);%计算结束 %调整d_a(j) end end %step4--------网络重新计算------------------------------------------- Wij=Wij-lr*d_Wij; Wjk=Wjk-lr*d_Wjk; b=b-lr*d_b; a=a-lr*d_a; %修正各个权值 y=zeros(1,N);%输出节点初始化 net=zeros(1,n);%隐形节点初始化 net_ab=zeros(1,n);%隐形节点初始化 for i=1:1:N for j=1:1:n for k=1:1:M net(j)=net(j)+Wjk(j,k)*x(k); net_ab(j)=(net(j)-b(j))/a(j); end y(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j)); %mymorlet是judyever编写的小波函数,以后可以扩展成输入不同的小波名字即可 % y(i)=mysigmoid(2,y(i)); end end epoch=epoch+1; err=d-y; SSE=err*err'/M; [ epoch SSE] end %step5--------输出------------------------------------------- plot(x,d,'r',x,y,':'); title('训练后的目标序列和实际输出序列'); % gtext({'This is the first line','This is the second line'}) % gtext({'First line','Second line'},'FontName','Times','Fontsize',12) legend('target output','WNN output',1);
评论
    相关推荐