三个输入一个输出的人工神经网络编程_第1页
三个输入一个输出的人工神经网络编程_第2页
三个输入一个输出的人工神经网络编程_第3页
三个输入一个输出的人工神经网络编程_第4页
三个输入一个输出的人工神经网络编程_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、三个输入一个输出的人工神经网络编程,隐含层为单隐层,为BP算法MATLAB写的:(输入输出隐层节点数都可以改的)clear allinputnums=3;% 输入层节点outputnums=1;% 输出层节点hidenums=7;% 隐层节点maxcount=50000;% 最大迭代次数samplenum=19;% 一个计数器,无意义precision=0.00001;% 预设精度yyy=1.3;%yyy 是帮助网络加速走出平坦区alpha=0.02;%学习率设定值a=0.9;%BP优化算法的一个设定值,对上组训练的调整值按比例修改error=zeros(1,maxcount+1);%erro

2、r 数组初始化;目的是预分配内存空间errorp=zeros(1,samplenum);% 同上v=rand(inputnums,hidenums);%1*10 ; v 初始化为一个1*10 的随机归一矩阵; v 表输入层到隐层的权值deltv=zeros(inputnums,hidenums);%1*10 ;内存空间预分配dv=zeros(inputnums,hidenums);%1*10;w=rand(hidenums,outputnums);%10*1deltw=zeros(hidenums,outputnums);%10*1dw=zeros(hidenums,outputnums);%

3、10*1samplelist=1:0.5:10;% 样本输入值expectlist=samplelist,(-1);% 期望输出值%expectlist=exp(-samplelist);samplelist,minp,maxp=premnmx(samplelist);%expectlist,mint,maxt=premnmx(expectlist);count=1;while(count<=maxcount)% 结束条件 1 迭代 20000 次c=1;while(c<=samplenum)for k=1:outputnumsd(k尸expectlist(c);%获得期望输出的向

4、量endfor i=1:inputnums x(i)=samplelist(c);%获得输入的向量数据end%forward();for j=1:hidenumsnet=0.0;for i=1:inputnumsnet=net+x(i)*v(i,j);% 输入层到隐层的加权和 endy(j)=1/(1+exp(-net);% 输出层处理f(x)=1/(1+exp(-x) ,单极性 sigmiod 函数%y(j)=1/net;% 输出层处理f(x)=1/(1+exp(-x) ,单极性 sigmiod 函数endfor k=1:outputnums net=0.0;for j=1:hidenums

5、 net=net+y(j)*w(j,k);endif count>=2&&error(count)-error(count-1)<=0.0001o(k)=1/(1+exp(-net)/yyy);% 平坦区加大学习率%o(k)=1/(net/yyy);% 平坦区加大学习率else o(k)=1/(1+exp(-net);% 同上%else o(k)=1/net;% 同上 endend%BpError(c)反馈/修改errortmp=0.0;for k=1:outputnumserrortmp=errortmp+(d(k)-o(k)42;% 第一组训练后的误差计算 en

6、derrorp(c)=0.5*errortmp;% 误差 E=E (d(k)-o(k)A2 *1/2 %end %backward();for k=1:outputnumsyitao(k)=(d(k)-o(k)*o(k)*(1-o(k);% 输出层误差偏导 end for j=1:hidenumstem=0.0;for k=1:outputnumstem=tem+yitao(k)*w(j,k);% 为了求隐层偏导,而计算的求和endyitay(j)=tem*y(j)*(1-y(j);% 隐层偏导 end%调整各层权值for j=1:hidenumsfor k=1:outputnumsdeltw

7、(j,k)=alpha*yitao(k)*y(j);% 权值 w 的调整量 deltw (已乘学习率)w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k);% 权值调整,这里的 dw=deltw (t-1 ) ,实际是 对BP算法的一个改进措施-增加动量项目的是提高训练速度dw(j,k)=deltw(j,k);endendfor i=1:inputnumsfor j=1:hidenumsdeltv(i,j)=alpha*yitay(j)*x(i);% 同上 deltwv(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);dv(i,j)=deltv(i,j);en

8、dendc=c+1;end%第二个 while结束;表示一次 BP训练结束double tmp;tmp=0.0;for i=1:samplenumtmp=tmp+errorp(i)*errorp(i);% 误差求和endtmp=tmp/c;error(count)=sqrt(tmp);% 误差求均方根,即精度if(error(count)<precision)% 求另一个结束条件break;endcount=count+1;% 训练次数加1end%第一个while结束error(maxcount+1)=error(maxcount);p=1:count-1;plot(p,error(p)

9、,'-');% 显示误差p=1:1:10;t=p,(-1);%t=exp(-p);pn,minpn,maxpn=premnmx(p);simt=zeros(1,10);%while(a<=9)for i=1:10x=pn(i);%获得输入的向量数据for j=1:hidenumsnet=0.0;net=net+x*v(1,j);% 输入层到隐层的加权和y(j)=1/(1+exp(-net);% 输出层处理f(x)=1/(1+exp(-x) ,单极性 sigmiod 函数%y(j)=1/net;% 输出层处理f(x)=1/(1+exp(-x) ,单极性 sigmiod 函数

10、endnet=0.0;for k=1:hidenumsnet=net+y(k)*w(k,1);endo=1/(1+exp(-net); simt(i)=o;end% simt=postmnmx(simt,mint,maxt);figure;plot(p,t,'*',p,simt,'-');clcclear all% FFT 采样fs=3200;N=64;据点数n=0:N-1;t=n/fs;x=0.8*sin(4.5*2*pi*50*t+pi/4)+0.3*sin(2*2*pi*50*t+pi/5);号y=fft(x,N);快速 Fourier 变换f=fs*(0

11、:length(y)/2)/length(y);z=angle(y)*180/pi;mag=abs(y);fz=mag(1:length(y)/2+1)*2/N;Fourier 变换后的振幅figure(1)plot(f,fz);Nyquist 频率之前随频率变化的振幅xlabel(' 频率/Hz' );ylabel(' 振幅' );title( 'FFT 采样 ' );grid on ;%采样频率和数%时间序列%对信号进行%求得%信% BP 神经网络初始化inputNums=1;%输入层节点outputNums=1;%输出层节点hideNums

12、=4;%隐层节点maxcount=3000;%最大迭代次数sampleNums=N;precision=1e-9;%预设精度xxl1=0.02; xxl2=250; count=1; error=zeros(1,count);errorp=zeros(1,sampleNums);w1=rand(inputNums,hideNums/2); w2=rand(inputNums,hideNums/2); b=1*pi*200,1*pi*120;% BP 神经网络训练while (count<=maxcount) c=1;while (c<=sampleNums)for j=1:hide

13、Nums/2net1(j)=cos(b(j)*t(c);net2(j)=sin(b(j)*t(c);endfor j=1:hideNums/2out(j)=net1(j)*w1(j)+net2(j)*w2(j);endsc(c)=sum(out);errortmp=0.0;errortmp=errortmp+(x(c)-sc(c)F2;e(c)=x(c)-sc(c);errorp(c)=0.5*errortmp;for i=1:hideNums/2dw1(i)=xxl1*e(c)*net1(i);dw2(i)=xxl1*e(c)*net2(i);db(i)=xxl2*e(c)*t(c)*(-w

14、1(i)*net2(i)+w2(i)*net1(i); endfor k=1:hideNums/2w1(k)=w1(k)+dw1(k);w2(k)=w2(k)+dw2(k); b(k)=b(k)+db(k);endc=c+1;enddouble tmp ;tmp=0.0;for i=1:sampleNumstmp=tmp+errorp(i)*errorp(i);endtmp=tmp/c;error(count)=sqrt(tmp);if (error(count)<precision) break ;endcount=count+1;end%误差精度曲线figure(2)p=1:count;plo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论