小波神经网络程序.docx

上传人:b****3 文档编号:4421910 上传时间:2022-12-01 格式:DOCX 页数:8 大小:18.22KB
下载 相关 举报
小波神经网络程序.docx_第1页
第1页 / 共8页
小波神经网络程序.docx_第2页
第2页 / 共8页
小波神经网络程序.docx_第3页
第3页 / 共8页
小波神经网络程序.docx_第4页
第4页 / 共8页
小波神经网络程序.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

小波神经网络程序.docx

《小波神经网络程序.docx》由会员分享,可在线阅读,更多相关《小波神经网络程序.docx(8页珍藏版)》请在冰豆网上搜索。

小波神经网络程序.docx

小波神经网络程序

主要思想:

用小波变换代替普通神经网络的激励函数

小波的参数b(平移因子)和a(伸缩因子)以及小波前的系数W

在网络中受到训练以逼近目标函数(信号)。

附件是我简单地画了一下流程图

%BP小波神经网络快速学习算法

clear

clc

SamIn=-10:

0.01:

10;

SamOut=2*sin(3*SamIn).*exp(-0.1*SamIn.*SamIn);

%figure;plot(SamIn,SamOut);

%pause

%Bp小波神经网络参数初始化

W=rand(15,1);

B=10*rands(15,1);

%对伸缩因子A进行初始化

temp=rand(15,1);

i=1;

while(i<=15)

  iftemp(i,1)<=0.5

      A(i,1)=2*temp(i,1);

  else

      A(i,1)=8*temp(i,1)-3;

  end

  i=i+1;

end

%BP算法训练小波神经网络

N=2001;

g=1.01;

l=0.0008;

t=SamIn;

study_rate=0.08;

count=0;

Err_NetworkOut_SamOuts=[];  %全局变量

NetworkOutSet=[];        %局部变量

  fori=1:

N

      NetworkOut=0;      %局部变量

      forj=1:

15

        tao=(t(i)-B(j,1))/A(j,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        NetworkOut=NetworkOut+h*W(j,1);

      end

      NetworkOutSet=[NetworkOutSetNetworkOut];

  end

  %计算误差函数和相对误差

  count=count+1;

  Err_NetworkOut_SamOut=(1/2)*sumsqr(NetworkOutSet-SamOut);    %误差函数

  former=Err_NetworkOut_SamOut;                      %记录前一次的误差

  Err_NetworkOut_SamOuts=[Err_NetworkOut_SamOutsErr_NetworkOut_SamOut];%误差函数集合

  Err_SamOut=(1/2)*sumsqr(SamOut);                          %函数平方和

  ErrRate=Err_NetworkOut_SamOut/Err_SamOut;                    %相对误差

  %计算增加量

  E_diff_W=0;%局部变量

  E_diff_B=0;%局部变量

  E_diff_A=0;%局部变量

  E_diff_W1=[];%局部变量

  E_diff_B1=[];%局部变量

  E_diff_A1=[];%局部变量

  fori=1:

15

      forj=1:

N

        tao=(t(j)-B(i,1))/A(i,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        f=1.75*sin(1.75*tao)+tao*cos(1.75*tao);

        s1=SamOut(j)-NetworkOutSet(j);

        s2=s1*h;

        s3=s1*(W(i,1)/A(i,1))*exp(-tao^2/2).*f;

        E_diff_W=E_diff_W+s2;

        E_diff_B=E_diff_B+s3;

        E_diff_A=E_diff_A+s3*tao;

      end

      E_diff_W=-E_diff_W;

      E_diff_B=-E_diff_B;

      E_diff_A=-E_diff_A;

      E_diff_W1=[E_diff_W1,E_diff_W];

      E_diff_B1=[E_diff_B1,E_diff_B];

      E_diff_A1=[E_diff_A1,E_diff_A];

  end

  W=W-study_rate*E_diff_W1';

  B=B-study_rate*E_diff_B1';

  A=A-study_rate*E_diff_A1';

  

  ErrRate

  

  

  

whileErrRate>=0.005

%计算前向传播网络

%采用小波函数h(t)=cos(1.75t).*exp(-t^2/2);

  NetworkOutSet=[];

  fori=1:

N

      NetworkOut=0;

      forj=1:

15

        tao=(t(i)-B(j,1))/A(j,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        NetworkOut=NetworkOut+h*W(j,1);

      end

      NetworkOutSet=[NetworkOutSetNetworkOut];

  end

  %计算误差函数和相对误差

  count=count+1;

  Err_NetworkOut_SamOut=(1/2)*sumsqr(NetworkOutSet-SamOut);  %误差函数

  Err_NetworkOut_SamOuts=[Err_NetworkOut_SamOutsErr_NetworkOut_SamOut];%误差函数集合

  ErrRate=Err_NetworkOut_SamOut/Err_SamOut;%相对误差

  now=Err_NetworkOut_SamOut;

  

  Err_NetworkOut_SamOut

  ErrRate

  pause

%计算增加量

  E_diff_W=0;

  E_diff_B=0;

  E_diff_A=0;

  E_diff_W1=[];

  E_diff_B1=[];

  E_diff_A1=[];

  fori=1:

15

      forj=1:

N

        tao=(t(j)-B(i,1))/A(i,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        f=1.75*sin(1.75*tao)+tao*cos(1.75*tao);

        s1=SamOut(j)-NetworkOutSet(j);

        s2=s1*h;

        s3=s1*(W(i,1)/A(i,1))*exp(-tao^2/2).*f;

        E_diff_W=E_diff_W+s2;

        E_diff_B=E_diff_B+s3;

        E_diff_A=E_diff_A+s3*tao;

      end

      E_diff_W=-E_diff_W;

      E_diff_B=-E_diff_B;

      E_diff_A=-E_diff_A;

      E_diff_W1=[E_diff_W1,E_diff_W];

      E_diff_B1=[E_diff_B1,E_diff_B];

      E_diff_A1=[E_diff_A1,E_diff_A];

  end

  if(now>former)

      study_rate=l*study_rate;

  else

      study_rate=g*study_rate;

  end

  former=now;

  W=W-study_rate*E_diff_W1';

  B=B-study_rate*E_diff_B1';

  A=A-study_rate*E_diff_A1';

end

W

B

A

ErrRate

count

plot(1:

count,Err_NetworkOut_SamOuts)%误差曲线

%end

Doc1.doc(22.5KB)

 

改进

申请开设新版须知

Re:

【讨论】小波神经网络的程序流程图

看看改进的程序:

%BP小波神经网络快速学习算法

clear

clc

SamIn=-1:

0.001:

1;

SamOut=2*sin(3*SamIn).*exp(-0.1*SamIn.*SamIn);

%figure;plot(SamIn,SamOut);

%pause

%Bp小波神经网络参数初始化

W=rand(15,1);

B=10*rands(15,1);

%对伸缩因子A进行初始化

temp=rand(15,1);

i=1;

while(i<=15)

  iftemp(i,1)<=0.5

      A(i,1)=2*temp(i,1);

  else

      A(i,1)=8*temp(i,1)-3;

  end

  i=i+1;

end

%BP算法训练小波神经网络

N=2001;

g=1.55;

l=0.0008;

t=SamIn;

study_rate=0.0002;

m=0.2;%动量系数

count=0;

Err_NetworkOut_SamOuts=[];  %全局变量

NetworkOutSet=[];        %局部变量

  fori=1:

N

      NetworkOut=0;      %局部变量

      forj=1:

15

        tao=(t(i)-B(j,1))/A(j,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        NetworkOut=NetworkOut+h*W(j,1);

      end

      NetworkOutSet=[NetworkOutSetNetworkOut];

  end

  %计算误差函数和相对误差

  count=count+1;

  Err_NetworkOut_SamOut=(1/2)*sumsqr(NetworkOutSet-SamOut);    %误差函数

  former=Err_NetworkOut_SamOut;                      %记录前一次的误差

  Err_NetworkOut_SamOuts=[Err_NetworkOut_SamOutsErr_NetworkOut_SamOut];%误差函数集合

  Err_SamOut=(1/2)*sumsqr(SamOut);                          %函数平方和

  ErrRate=Err_NetworkOut_SamOut/Err_SamOut;                    %相对误差

  %计算增加量

  E_diff_W=0;%局部变量:

梯度

  E_diff_B=0;%局部变量:

梯度

  E_diff_A=0;%局部变量:

梯度

  E_diff_W1=[];%局部变量:

梯度集合

  E_diff_B1=[];%局部变量:

梯度集合

  E_diff_A1=[];%局部变量:

梯度集合

  delt_w=0;

  delt_b=0;

  delt_a=0;    %增加量

  deltW=[];

  deltB=[];

  deltA=[];%增加量集合

  fori=1:

15

      forj=1:

N

        tao=(t(j)-B(i,1))/A(i,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        f=1.75*sin(1.75*tao)+tao*cos(1.75*tao);

        s1=SamOut(j)-NetworkOutSet(j);

        s2=s1*h;

        s3=s1*(W(i,1)/A(i,1))*exp(-tao^2/2).*f;

        E_diff_W=E_diff_W+s2;

        E_diff_B=E_diff_B+s3;

        E_diff_A=E_diff_A+s3*tao;

      end

      E_diff_W=-E_diff_W;

      E_diff_B=-E_diff_B;

      E_diff_A=-E_diff_A;

      E_diff_W1=[E_diff_W1,E_diff_W];

      E_diff_B1=[E_diff_B1,E_diff_B];

      E_diff_A1=[E_diff_A1,E_diff_A];

  end

  delt_w=-((1-m)*study_rate*E_diff_W1');

  delt_b=-((1-m)*study_rate*E_diff_B1');

  delt_a=-((1-m)*study_rate*E_diff_A1');

  deltW=[deltW,delt_w];

  deltB=[deltB,delt_b];

  deltA=[deltA,delt_a];

  W=W+delt_w;

  B=B+delt_b;

  A=A+delt_a;

  

  

  ErrRate

  

  

  

whileErrRate>=0.0005

%计算前向传播网络

%采用小波函数h(t)=cos(1.75t).*exp(-t^2/2);

  NetworkOutSet=[];

  fori=1:

N

      NetworkOut=0;

      forj=1:

15

        tao=(t(i)-B(j,1))/A(j,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        NetworkOut=NetworkOut+h*W(j,1);

      end

      NetworkOutSet=[NetworkOutSetNetworkOut];

  end

  %计算误差函数和相对误差

  

  Err_NetworkOut_SamOut=(1/2)*sumsqr(NetworkOutSet-SamOut);  %误差函数

  Err_NetworkOut_SamOuts=[Err_NetworkOut_SamOutsErr_NetworkOut_SamOut];%误差函数集合

  ErrRate=Err_NetworkOut_SamOut/Err_SamOut;%相对误差

  now=Err_NetworkOut_SamOut;

  

  Err_NetworkOut_SamOut

  ErrRate

  pause

%计算增加量

  E_diff_W=0;

  E_diff_B=0;

  E_diff_A=0;%初始化为0是为了计算各个参数的梯度;

  E_diff_W1=[];%局部变量:

梯度集合

  E_diff_B1=[];%局部变量:

梯度集合

  E_diff_A1=[];%局部变量:

梯度集合

  fori=1:

15

      forj=1:

N

        tao=(t(j)-B(i,1))/A(i,1);

        h=cos(1.75*tao).*exp(-tao^2/2);

        f=1.75*sin(1.75*tao)+tao*cos(1.75*tao);

        s1=SamOut(j)-NetworkOutSet(j);

        s2=s1*h;

        s3=s1*(W(i,1)/A(i,1))*exp(-tao^2/2).*f;

        E_diff_W=E_diff_W+s2;

        E_diff_B=E_diff_B+s3;

        E_diff_A=E_diff_A+s3*tao;

      end

      E_diff_W=-E_diff_W;

      E_diff_B=-E_diff_B;

      E_diff_A=-E_diff_A;

      E_diff_W1=[E_diff_W1,E_diff_W];

      E_diff_B1=[E_diff_B1,E_diff_B];

      E_diff_A1=[E_diff_A1,E_diff_A];

  end

  if(now>former)%如果这样,减少学习速度,并设动量系数为0

      study_rate=l*study_rate;

      delt_w=-study_rate*E_diff_W1';

      delt_b=-study_rate*E_diff_B1';

      delt_a=-study_rate*E_diff_A1';

  else%否则,增加学习速度,并恢复动量系数

      study_rate=g*study_rate;

      delt_w=m*deltW(:

count)-((1-m)*study_rate*E_diff_W1');

      delt_b=m*deltB(:

count)-((1-m)*study_rate*E_diff_B1');

      delt_a=m*deltA(:

count)-((1-m)*study_rate*E_diff_A1');

  end

  former=now;

  W=W+delt_w;

  B=B+delt_b;

  A=A+delt_a;

  deltW=[deltW,delt_w];

  deltB=[deltB,delt_b];

  deltA=[deltA,delt_a];

  count=count+1;

end

W

B

A

ErrRate

count

plot(1:

count,Err_NetworkOut_SamOuts)%误差曲线

%end

下载次数:

23124

2005-9-2006:

23

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1