神经网络的BP算法C语言实现(共14页).docx
《神经网络的BP算法C语言实现(共14页).docx》由会员分享,可在线阅读,更多相关《神经网络的BP算法C语言实现(共14页).docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上/BP算法简单实现,C语言代码可运行,详细注释/代码存放文件本文用的绝对路径,会报错,请自行更改路径或者改成相对路径/#include #include #include #include #define input 2 /输入层 #define hidden 10 /隐层 #define output 1 /输出层 #define sampleNum 90 /样本容量 #define test 10 /测试集容量 #define nr 0.1 /学习效率 #define EPS 0.00001 float xsampleNuminput,dsampleNumoutp
2、ut,whiinputhidden,wijhiddenoutput,thihidden,thjoutput; /x是输入的值,d是输出的值,whi是权值, int h,i,j,k,ff; double testdata12;float xmininput,xmaxinput,dminoutput,dmaxoutput; FILE *fp1,*fp2,*fp3,*fp4; void init(void); void startleaning(void); void testsample(void); void readw(void); void readt(void); void writew(
3、void); float sigmoid(float a); double ranu(void); void init(void) int min,max; if(fp1=0) system(cls); printf(Can not find the learning sample file!n); exit(0); for(k=0;ksampleNum;k+) for(h=0;hinput;h+) fscanf(fp1,%f,&xkh); /神经网络输入 for(j=0;joutput;j+) fscanf(fp1,%f,&dkj); /神经网络输出 for(j=0;joutput;j+)
4、min=1;max=1; for(k=0;ksampleNum;k+) if(dkjdmaxj) max=k; dminj=dminj; dmaxj=dmaxj; for(k=0;ksampleNum;k+) /神经网络输出归一化 dkj=(dkj-dminj)/(dmaxj-dminj); void startlearning(void) long int nt,n; float t,errorsampleNum,gerror,xjoutput,xihidden,yjoutput,yihidden,pxihidden,pxjoutput; float u0=0,u1=0,u2=0,u3=0;
5、 float v0,v1,v2,v3; for(i=0;ihidden;i+) for(h=0;hinput;h+) whihi=-0.8+1.6*ranu(); /whi为输入到隐藏层的权值 for(j=0;joutput;j+) wijij=-0.8+1.6*ranu(); /wij为隐藏层到输出的权值 thii=-0.5+ranu(); /thi为输入到隐藏层的bias for(j=0;joutput;j+) thjj=-0.5+ranu(); /thj为隐藏层到输出的bias /学习开始 printf(tnPlease enter the learning times:n); scan
6、f(%ld,&nt); for(n=0;nnt;n+) /*nt为学习次数*/ gerror=0; for(k=0;ksampleNum;k+) /*单样本循环*/ for(i=0;ihidden;i+) t=0; for(h=0;hinput;h+) t+=whihi*xkh; xii=t+thii; /xi为输入层到隐藏层的权值和 yii=sigmoid(xii); /yi为函数变换后的输出层/隐层输出 for(j=0;joutput;j+) t=0; for(i=0;ihidden;i+) t+=wijij*yii; xjj=t+thjj; /xj为隐藏层到输出层的权值和 yjj=sig
7、moid(xjj); /yj为函数变换后的输出层 /输出层输出 for(j=0;joutput;j+) /pxj为输出层单样本点误差变化率 pxjj=yjj*(1-yjj)*(yjj-dkj); for(i=0;ihidden;i+) /pxi为隐层单样本点误差变化率 t=0; for(j=0;joutput;j+) t+=pxjj*wijij; pxii=yii*(1-yii)*t; for(j=0;joutput;j+) thjj=thjj-nr*pxjj; for(i=0;ihidden;i+) wijij=wijij-nr*pxjj*yii; /隐层到输出层权值修正,其中nr为步长 f
8、or(i=0;ihidden;i+) thii=thii-nr*pxii; for(h=0;hinput;h+) whihi=whihi-nr*pxii*xkh; /输入层到隐层权值修正,其中nr为步长 t=0; for(j=0;joutput;j+) t+=(yjj-dkj)*(yjj-dkj)/2.0; errork=t; gerror+=errork; /全局误差 g(lobal)error /单样本循环结束 if(gerrorEPS) break; writew(); fclose(fp2); int k=0; for(k=0;ksampleNum;k+) for(i=0;ihidde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 BP 算法 语言 实现 14
限制150内