小波神经网络程序.doc
文本预览下载声明
主要思想:用小波变换代替普通神经网络的激励函数小波的参数b(平移因子)和a(伸缩因子)以及小波前的系数W在网络中受到训练以逼近目标函数(信号)。附件是我简单地画了一下流程图%BP小波神经网络快速学习算法clearclcSamIn=-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)? ? if temp(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=[];? ?? ?? ?? ?% 局部变量? ? for i=1:N? ?? ???NetworkOut=0;? ?? ???% 局部变量? ?? ???for j=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=[NetworkOutSet NetworkOut];? ? end? ? % 计算误差函数和相对误差? ? count=count+1;? ? Err_NetworkOut_SamOut=(1/2)*sumsqr(NetworkOutSet-SamOut);? ?? ?% 误差函数? ? former=Err_NetworkOut_SamOut;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? % 记录前一次的误差? ? Err_NetworkOut_SamOuts=[Err_NetworkOut_SamOuts Err_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=[]; % 局部变量? ? for i=1:15? ?? ???for j=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
显示全部