1、这是一个小波神经网络程序,作者 judyever %参考 2001 年第 1 期 一种基于 BP 算法学习的小波神经网络%step1-网络初始化-clc;clear all;%设定期望的误差最小值err_goal=0.001;%设定最大循环次数max_epoch=50;%设定修正权值的学习速率 0.01-0.7lr=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;%隐形节点的个数%这个地方需要改进,由于实际上隐形节点的个数可以通过小波的时
2、频分析确定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(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:Nfor j=1:1:nfor
3、k=1:1:Mnet(j)=net(j)+Wjk(j,k)*x(k);net_ab(j)=(net(j)-b(j)/a(j);endy(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j);%mymorlet 是 judyever 编写的小波函数,以后可以扩展成输入不同的小波名字即可% y(i)=mysigmoid(2,y(i);endend% plot(x,d,r,x,y); % title(训练前的目标序列和实际输出序列);err=d-y;SSE=err*err;%step3-调整各个参数-while (SSEerr_goal d_Wij=zeros(N,n);d_a=z
4、eros(1,n);d_b=zeros(1,n);for i=1:1:Nfor j=1:1:nd_Wij(i,j)=-(d(i)-y(i)*mymorlet(net_ab(j);%调整 d_Wij(i,j)for k=1:1:Md_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)*
5、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)endend%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)
6、;%隐形节点初始化for i=1:1:Nfor j=1:1:nfor k=1:1:Mnet(j)=net(j)+Wjk(j,k)*x(k);net_ab(j)=(net(j)-b(j)/a(j);endy(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j);%mymorlet 是 judyever 编写的小波函数,以后可以扩展成输入不同的小波名字即可% y(i)=mysigmoid(2,y(i);endendepoch=epoch+1;err=d-y;SSE=err*err/M; epoch SSEend%step5-输出-plot(x,d,r,x,y,:); title(
7、训练后的目标序列和实际输出序列);% 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);这里面用到的两个子程序分别是:function y=mymorlet(t)y = exp(-(t.2)/2) * cos(1.75*t);%555function y=d_mymorlet(t)y = -1.75*sin(1.75*t).*exp(-(t.2)/2)-t* cos(1.75*t).*exp(-(t.2)/2) ;