神经网络的BP算法C语言实现(共14页)

上传人:des****85 文档编号:214382363 上传时间:2021-11-23 格式:DOCX 页数:14 大小:17.79KB
返回 下载 相关 举报
神经网络的BP算法C语言实现(共14页)_第1页
第1页 / 共14页
神经网络的BP算法C语言实现(共14页)_第2页
第2页 / 共14页
神经网络的BP算法C语言实现(共14页)_第3页
第3页 / 共14页
神经网络的BP算法C语言实现(共14页)_第4页
第4页 / 共14页
神经网络的BP算法C语言实现(共14页)_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《神经网络的BP算法C语言实现(共14页)》由会员分享,可在线阅读,更多相关《神经网络的BP算法C语言实现(共14页)(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;ihidden;i+) t=0; for(h=0;hinput;h+) t+=whihi*xkh; xii=t+thii; /xi为输入层到隐藏层的权值和 yii=sigmoid(xii); /yi为函数变换后的输出层/隐层输出

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

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