三个输入一个输出的人工神经网络编程

上传人:go****e 文档编号:130741087 上传时间:2020-05-01 格式:DOCX 页数:10 大小:15.06KB
返回 下载 相关 举报
三个输入一个输出的人工神经网络编程_第1页
第1页 / 共10页
三个输入一个输出的人工神经网络编程_第2页
第2页 / 共10页
三个输入一个输出的人工神经网络编程_第3页
第3页 / 共10页
三个输入一个输出的人工神经网络编程_第4页
第4页 / 共10页
三个输入一个输出的人工神经网络编程_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《三个输入一个输出的人工神经网络编程》由会员分享,可在线阅读,更多相关《三个输入一个输出的人工神经网络编程(10页珍藏版)》请在金锄头文库上搜索。

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);%error数组初始化;

2、目的是预分配内存空间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);%10*1samplelist=1

3、: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=2&error(count)-error(count-1)=0.0001 o(k)=1/(1+exp(-net)/yyy);%平坦区加大学习率 %o(k)=1/(net

4、/yyy);%平坦区加大学习率 else o(k)=1/(1+exp(-net);%同上 %else o(k)=1/net;%同上 end end %BpError(c)反馈/修改 errortmp=0.0; for k=1:outputnums errortmp=errortmp+(d(k)-o(k)2;%第一组训练后的误差计算 end errorp(c)=0.5*errortmp;%误差E=(d(k)-o(k)2 * 1/2 %end %backward(); for k=1:outputnums yitao(k)=(d(k)-o(k)*o(k)*(1-o(k);%输出层误差偏导 end

5、for j=1:hidenums tem=0.0; for k=1:outputnums tem=tem+yitao(k)*w(j,k);%为了求隐层偏导,而计算的求和 end yitay(j)=tem*y(j)*(1-y(j);%隐层偏导 end %调整各层权值 for j=1:hidenums for k=1:outputnums deltw(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算法的一个改进措施-增加动量项

6、目的是提高训练速度 dw(j,k)=deltw(j,k); end end for i=1:inputnums for j=1:hidenums deltv(i,j)=alpha*yitay(j)*x(i);%同上deltw v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j); dv(i,j)=deltv(i,j); end end c=c+1; end%第二个while结束;表示一次BP训练结束 double tmp; tmp=0.0; for i=1:samplenum tmp=tmp+errorp(i)*errorp(i);%误差求和 end tmp=tmp/c; er

7、ror(count)=sqrt(tmp);%误差求均方根,即精度 if(error(count)precision)%求另一个结束条件 break; end count=count+1;%训练次数加1end%第一个while结束error(maxcount+1)=error(maxcount);p=1:count-1;plot(p,error(p),-);%显示误差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:10 x=pn(i);%获得输入的向量数据 fo

8、r j=1:hidenums net=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函数 end net=0.0; for k=1:hidenums net=net+y(k)*w(k,1); end o=1/(1+exp(-net); simt(i)=o; end % simt=postmnmx(simt,mint,maxt);figure;plot(p,t,*,p,s

9、imt,-);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: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频率之

10、前随频率变化的振幅xlabel(频率/Hz);ylabel(振幅);title(FFT采样);grid on; % BP神经网络初始化inputNums=1;%输入层节点outputNums=1;%输出层节点hideNums=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=m

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号