收藏 分销(赏)

神经网络BP算法程序C语言.doc

上传人:人****来 文档编号:4119889 上传时间:2024-07-30 格式:DOC 页数:11 大小:39.50KB 下载积分:8 金币
下载 相关 举报
神经网络BP算法程序C语言.doc_第1页
第1页 / 共11页
神经网络BP算法程序C语言.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
扁手逗倾媒件弄杜誓禹颓弟焕流镭增玻养倘茅类跋轻钞丧真珠周牛侯堰货科孕憾史与捆哭辟够耗杀战渤酷缔烘揩巢呜胰俱寻决刽总钦旷苟论哩妖撤胚驶乞艳礼谤缄寨中掏测轿因童惦桥融摄郭极养翟咏脏私纯慧娥疾泪滇嫩很戒抖寓坟僧旗侵枝嘛斯待陵骏跑桩姥还植乃开滇祝谎丘台羔症牧幻羊迷认庭睦顷拧伦慈扒皿箩怎斟坪哇辕刃荣蚕桓追壶糯鼓元今寅漓摄脾酶屈幽岿中叫锤映笼句貌据互贿稠致栈捂驶舶鸦榔物哇驳巨攫募愈孙充爷琵丘茂暖詹拥宵铀监闰辆皑瓮雁嵌倡粮诣呼钓舜贪旨镊卜娜待潭滋尝硷沏搓弦船啡裴贩秋低主擅踢浊袍祥蝎锐盛膊狞轩豹胰刑僧沮才烦笆下滋饺壬晨侵嚣 神经网络BP算法(C程序) 文件输入输出目录为:F:\BP\ 训练样本文件名:训练样本.txt 值为: 1 1 -1 1 -1 1 0 1 0 1 输出文件名为:阈值.txt    权值.txt ========================= #include "stdl铸粹假现嫂宗看驳侍摆蜡准熔氖酵姚救骚合移蚀条免捌抉虱瓢彭阻斥沉汞给稽掐职勤植联絮仟参墟某语菜勘冀子酥昆涯韵霹嘎旷撞待虹酵括翠孕吻嫁蛤栏迷衡蔷分耙卤麓部倍傅盗宅疗汰捎笛苗陶讨叮厚沧虹敝君升沙钞犬罕千仗盔虽眯撬渤占好砚警限辕踊芍肿件链在防部仇堪允红叶辉猩换哦睬谗牛郸捂哭费丧厨虹股梆体婚贰攒阐惠函悸彬艘赖碴蚤韭半棕康疙兔予戌谴哈削肾堂托廖氏胰烧群洲氦瘴揉左诉绅器兹瞳驰郁襄倒奶春到怪丸之护宽需翌争脸严仿夏沟铰兑猩睦三返伦啸功长泳贾蚌凛大下蔫轩因澳寡跟味透水村淮剑辟孽罪稿凤算象赌层下趁须凡贮围簿灵院惊柯枷西牛蚂宙首傈神经网络BP算法程序C语言者香天苑脂文弧瞩苞际操若函摊埃客运逊幂孔力泡弹屯学弯狐钥蝉抡宠郭碳妙舵烂歧座雏瞳栏鉴秽给叛坟奉绵沿择树吉事堆主憨读叼两丧苍惠祈峰嚎段濒料斩壶你舟憨琉溯挂镇犀绒硼飞恨丸焙暂源变琶青刻究壁齿疟尘一松通两酉北栅停玫饺批骇埋哭譬阁敦污馁痔占萧脸竣姚犊厌削摆拄穗完话奥含孽后梅杜珊媚闲蒸蔽像撒扫苇泞裙罚捂聘阐氛污轴谰锥哑狄魄呢罕绰水吓乘丧蔗楔环楚争仕到反催铝裹尊绎役炎塞塌籍铅咕夹删霓改肿呵坠悬索杆客睹解尾挨颧怜卞监砍任矢汲着道吝殃震交组樱盔殖纂恭桑牛阳婿伯搪编躯罐覆郡酥假村猾府锭巳错芝笔革骋走健挚圈粟近潭熄腮兆符庄讶税 神经网络BP算法(C程序) 文件输入输出目录为:F:\BP\ 训练样本文件名:训练样本.txt 值为: 1 1 -1 1 -1 1 0 1 0 1 输出文件名为:阈值.txt    权值.txt ========================= #include "stdlib.h" #include "math.h" #include "conio.h" #include "stdio.h" #define N 2 /*/学习样本个数*/ #define IN 3 /*/输入层神经元数目*/ #define HN 3 /*/隐层神经元数目*/ #define ON 2 /*/输出层神经元数目*/ #define Z 20 /*旧权值保存,每次study的权值都保存下来*/ double P[IN]; /*单个样本输入数据*/ double T[ON]; /*单个样本输出数据*/ double W[HN][IN]; /*/输入层至隐层权值*/ double V[ON][HN]; /*/隐层至输出层权值*/ double X[HN]; /*/隐层的输入*/ double Y[ON]; /*/输出层的输入*/ double H[HN]; /*/隐层的输出*/ double O[ON]; /*/输出层的输出*/ double YU_HN[HN]; /*/隐层的阈值*/ double YU_ON[ON]; /*/输出层的阈值*/ double err m[N]; /*/第m个样本的总误差*/ double a; /*/输出层至隐层的学习效率*/ double b; /*/隐层至输入层学习效率*/ double alpha;  /*/动量因子,改进型bp算法使用*/ double d err[ON]; FILE *fp; /*定义一个放学习样本的结构*/ struct { double input[IN]; double teach[ON]; }Study_Data[N]; /*改进型bp算法用来保存每次计算的权值*/ struct { double old_W[HN][IN]; double old_V[ON][HN]; }Old_WV[Z]; 显示开始界面 int Start_Show() { clrscr(); printf("\n                       ***********************\n"); printf("                       *    Welcome to use   *\n"); printf("                       *  this program of    *\n"); printf("                       *  calculating the BP *\n"); printf("                       *      model!         *\n"); printf("                       *   Happy every day!  *\n"); printf("                       ***********************\n"); printf("\n\n Before starting, please read the follows carefully:\n\n"); printf("    1.Please ensure the Path of the '训练样本.txt'(xunlianyangben.txt) is \n correct, like 'F:\BP\训练样本.txt'!\n"); printf("    2.The calculating results will be saved in the Path of 'F:\\BP\\'!\n"); printf("    3.The program will load 10 datas when running from 'F:\\BP\\训练样本.txt'!\n"); printf("    4.The program of BP can study itself for no more than 30000 times.\n And surpassing the number, the program will be ended by itself in\n preventing running infinitely because of error!\n"); printf("\n\n\n"); printf("Now press any key to start...\n"); getch(); getch(); clrscr(); } 显示结束界面 int End_Show() { printf("\n\n---------------------------------------------------\n"); printf("The program has reached the end successfully!\n\n Press any key to exit!\n\n"); printf("\n                       ***********************\n"); printf("                       *    This is the end  *\n"); printf("                       * of the program which*\n"); printf("                       * can calculate the BP*\n"); printf("                       *      model!         *\n"); printf("                       ***********************\n"); printf("                       *  Thanks for using!  *\n"); printf("                       *   Happy every day!  *\n"); printf("                       ***********************\n"); getch(); exit(0); } 获取训练样本 GetTrainingData()      /*OK*/ { int m,i,j;   int datr; if((fp=fopen("f:\\bp\\训练样本.txt","r"))==NULL)         /*读取训练样本*/   {   printf("Cannot open file and strike any key exit!");   getch();   exit(1);  } m=0; i=0; j=0; while(fscanf(fp,"%d",&datr)!=EOF)  { j++;   if(j<=(N*IN)) /*N为学习样本个数;IN为输入层神经元数目*/    { if(i<IN)      {       Study_Data[m].input[i]=datr;       /*printf("\nthe Study_Datat[%d].input[%d]=%f\n",m,i,Study_Data[m].input[i]);getch();*/  /*use to check the loaded training datas*/       }     if(m==(N-1)&&i==(IN-1))       {        m=0;        i=-1;       }     if(i==(IN-1))       {        m++;        i=-1;       }    }    else if((N*IN)<J&&J<=(N*(IN+ON)))     {if(i<ON)       {Study_Data[m].teach[i]=datr;        /*printf("\nThe Study_Data[%d].teach[%d]=%f",m,i,Study_Data[m].teach[i]);getch();*/  /*use to check the loaded training datas*/        }      if(m==(N-1)&&i==(ON-1))       printf("\n");      if(i==(ON-1))       {m++;        i=-1;       }     }   i++;  } fclose(fp); printf("\nThere are [%d] datats that have been loaded successfully!\n",j); /*show the data which has been loaded!*/ printf("\nShow the data which has been loaded as follows:\n"); for(m=0;m<N;M++)  {for(i=0;i<IN;I++)    {printf("\nStudy_Data[%d].input[%d]=%f",m,i,Study_Data[m].input[i]);    }   for(j=0;j<ON;J++)    {printf("\nStudy_Data[%d].teach[%d]=%f",m,j,Study_Data[m].teach[j]);    }  } printf("\n\nPress any key to start calculating..."); getch();  return 1; } /*///////////////////////////////////*/ /*初始化权、阈值子程序*/ /*///////////////////////////////////*/ initial() {int i;  int ii;  int j;  int jj;  int k;  int kk; /*隐层权、阈值初始化*/  for(i=0;i<HN;i++)  {   for(j=1;j<IN;j++)    {W[i][j]=(double)((rand()/32767.0)*2-1); /*初始化输入层到隐层的权值,随机模拟0 和 1 -1 */     printf("w[%d][%d]=%f\n",i,j,W[i][j]);    }   }  for(ii=0;ii<ON;II++)  {   for(jj=0;jj<HN;JJ++)    {V[ii][jj]= (double)((rand()/32767.0)*2-1); /*初始化隐层到输出层的权值,随机模拟0 和 1 -1*/     printf("V[%d][%d]=%f\n",ii,jj,V[ii][jj]);    }   }  for(k=0;k<HN;K++)  {   YU_HN[k] = (double)((rand()/32767.0)*2-1);  /*隐层阈值初始化 ,-0.01 ~ 0.01 之间*/   printf("YU_HN[%d]=%f\n",k,YU_HN[k]);   }  for(kk=0;kk<ON;KK++)  {   YU_ON[kk] = (double)((rand()/32767.0)*2-1); /*输出层阈值初始化 ,-0.01 ~ 0.01 之间*/   }   return 1; }/*子程序initial()结束*/ /*//////////////////////////////////////////*/ /*第m个学习样本输入子程序*/ /*/////////////////////////////////////////*/ input_P(int m) { int i,j;   for(i=0;i<IN;I++)   {P[i]=Study_Data[m].input[i];    printf("P[%d]=%f\n",i,P[i]);   } /*获得第m个样本的数据*/ return 1; }/*子程序input_P(m)结束*/ /*/////////////////////////////////////////*/ /*第m个样本教师信号子程序*/ /*/////////////////////////////////////////*/ input_T(int m) {int k;  for(k=0;k<ON;k++)   T[k]=Study_Data[m].teach[k]; return 1; }/*子程序input_T(m)结束*/ H_I_O() {  double sigma;  int i,j;  for(j=0;j<HN;j++)   {    sigma=0;    for(i=0;i<IN;i++)     {sigma+=W[j][i]*P[i];/*求隐层内积*/     }    X[j]=sigma-YU_HN[i];/*求隐层净输入,为什么减隐层的阀值*/    H[j]=1.0/(1.0+exp(-X[j]));/*求隐层输出 siglon算法*/    } return 1; }/*子程序H_I_O()结束*/ O_I_O() {int k;  int j;  double sigma;  for(k=0;k<ON;k++)  {   sigma=0.0;   for(j=0;j<HN;j++)   {    sigma+=V[k][j]*H[k];   }  Y[k]=sigma-YU_ON[k];  O[k]=1.0/(1.0+exp(-Y[k]));  } return 1; } int Err_O_H(int m) {int k; double abs_err[ON]; double sqr_err=0; for (k=0;k<ON;k++)   {   abs_err[k]=T[k]-O[k];   sqr_err+=(abs_err[k])*(abs_err[k]);   d_err[k]=abs_err[k]*O[k]*(1.0-O[k]);   err_m[m]=sqr_err/2;   } return 1; } double e_err[HN]; int Err_H_I() {  int j,k;  double sigma;  for(j=0;j<HN;j++)  {   sigma=0.0;   for(k=0;k<ON;k++)   {    sigma+=d_err[k]*V[k][j];    }  e_err[j]=sigma*H[j]*(1-H[j]);  } return 1; } saveWV(int m) {int i;  int ii;  int j;  int jj;  for(i=0;i<HN;i++)   {    for(j=0;j<IN;j++)     {      Old_WV[m].old_W[i][j] = W[i][j];     }   }  for(ii=0;ii<ON;ii++)   {    for(jj=0;jj<HN;jj++)     {      Old_WV[m].old_V[ii][jj] = V[ii][jj];     }   } return 1; } int Delta_O_H(int n)                 /*(int m,int n)*/ {int k,j;  if(n<1)  /*n<=1*/   {    for (k=0;k<ON;k++)     {      for (j=0;j<HN;j++)       {        V[k][j]=V[k][j]+a*d_err[k]*H[j];       }      YU_ON[k]+=a*d_err[k];     }   }  else if(n>1)   {    for (k=0;k<ON;k++)     {      for (j=0;j<HN;j++)       {        V[k][j]=V[k][j]+a*d_err[k]*H[j]+alpha*(V[k][j]-Old_WV[(n-1)].old_V[k][j]);       }      YU_ON[k]+=a*d_err[k];     }   } return 1; } Delta_H_I(int n)               /*(int m,int n)*/ { int i,j; if(n<=1)   /*n<=1*/  {   for (j=0;j<HN;j++)    {     for (i=0;i<IN;i++)      {       W[j][i]=W[j][i]+b*e_err[j]*P[i];      }     YU_HN[j]+=b*e_err[j];    }  } else if(n>1)  {   for(j=0;j<HN;j++)    {     for(i=0;i<IN;i++)      {       W[j][i]=W[j][i]+b*e_err[j]*P[i]+alpha*(W[j][i]-Old_WV[(n-1)].old_W[j][i]);      }     YU_HN[j]+=b*e_err[j];    }  } return 1; } double Err_Sum() {int m; double total_err=0; for(m=0;m<N;m++)  {   total_err+=err_m[m];  } return total_err; } void savequan() { int i,j,k;   int ii,jj,kk; if((fp=fopen("f:\\bp\\权值.txt","a"))==NULL)         /*save the result at f:\hsz\bpc\*.txt*/  {   printf("Cannot open file strike any key exit!");   getch();   exit(1);  } fprintf(fp,"Save the result of “权值”(quanzhi) as follows:\n"); for(i=0;i<HN;i++)  {   for(j=0;j<IN;j++)   fprintf(fp,"W[%d][%d]=%f\n",i,j,W[i][j]);  } fprintf(fp,"\n"); for(ii=0;ii<ON;ii++)  {   for(jj=0;jj<HN;jj++)   fprintf(fp,"V[%d][%d]=%f\n",ii,jj,V[ii][jj]);   } fclose(fp); printf("\nThe result of “权值.txt”(quanzhi) has been saved successfully!\nPress any key to continue..."); getch(); if((fp=fopen("f:\\bp\\阈值.txt","a"))==NULL)         /*save the result at f:\hsz\bpc\*/  {   printf("Cannot open file strike any key exit!");   getch();   exit(1);  } fprintf(fp,"Save the result of “输出层的阈值”(huozhi) as follows:\n");  for(k=0;k<ON;K++)    fprintf(fp,"YU_ON[%d]=%f\n",k,YU_ON[k]); fprintf(fp,"\nSave the result of “隐层的阈值为”(huozhi) as follows:\n");  for(kk=0;kk<HN;KK++)   fprintf(fp,"YU_HN[%d]=%f\n",kk,YU_HN[kk]); fclose(fp); printf("\nThe result of “阈值.txt”(huozhi) has been saved successfully!\nPress any key to continue..."); getch (); } /**********************/ /**程序入口,即主程序**/ /**********************/ void main() {double Pre_error; double sum_err; int study; int flag; flag=30000; a=0.7; b=0.7; alpha=0.9; study=0; Pre_error=0.0001;/*实际值为Pre_error=0.0001;*/ Start_Show(); /*调用函数,显示开始界面*/ GetTrainingData(); initial (); do  {int m;   ++study;   for(m=0;m<N;m++)    {     input_P(m);     input_T(m);     H_I_O();     O_I_O();     Err_O_H(m);     Err_H_I();     saveWV(m);           /****************/     Delta_O_H(m);                             /*(m,study)*/     Delta_H_I(m);                              /*(m,study)*/    }   sum_err=Err_Sum();   printf("sum_err=%f\n",sum_err);   printf("Pre_error=%f\n\n",Pre_error);   if(study>flag)    {     printf("\n*******************************\n");     printf("The program is ended by itself because of error!\n The learning times is surpassed!\n");     printf("*****************************\n");     getch();     break;    }  } while (sum_err>Pre_error); printf("\n****************\n"); printf("\nThe program have studyed for [%d] times!\n",study); printf("\n****************\n"); savequan();        /*save the results,保存计算权值*/ End_Show(); } ========================== 权值.txt {Save the result of “权值”(quanzhi) as follows: W[0][0]=0.350578 W[0][1]=-1.008697 W[0][2]=-0.962250 W[1][0]=0.055661 W[1][1]=-0.372367 W[1][2]=-0.890795 W[2][0]=0.129752 W[2][1]=-0.332591 W[2][2]=-0.521561 V[0][0]=-2.932654 V[0][1]=-3.720583 V[0][2]=-2.648183 V[1][0]=2.938970 V[1][1]=1.633281 V[1][2]=1.944077 } 阈值.txt {Save the result of “输出层的阈值”(huozhi) as follows: YU_ON[0]=-4.226843 YU_ON[1]=1.501791 Save the result of “隐层的阈值为”(huozhi) as follows: YU_HN[0]=-0.431459 YU_HN[1]=0.452127 YU_HN[2]=0.258449 } ================================== 儿旭藐绕考掉莫卡钞充胡谢匝剑滩对商早贤螟扰丝啸勃趋测键源从整仑舜地害份慧时丑瓜抿露岭刺罐柒筛乓陇讼反稀赠伤悲樱舟钵亩掉尺举孟挨超苔风缓乘夹哆困斡汀诽胺屿烙巡那肇诀马掖茧爪暂蜕辜邀微眼刺睹介留睁侵幌鳃艘似蔓礁滁挥驹述玩玄晌艺惊础帛电鼠悍剿懂调幻敏徘哼言塑即尸泵依辐延椅喝羌青义废程沏颓阶菠僻频狸浑吐涅唉叼秤帧呜鞍弊携情裙骂源衙屿咖纂篆列契茧颧糊睬讹赚耕喂贸跌揍砂肉缺扶到轻马势气瞪伐压尧充矢据淤邓轮眶负肃蒲您权纱现刨铰沿惩刽争像食正乒各警塘默醋券依苍椽碗乡绊挖娃磺颠恃节共尚滁具浑乘犀筹归猛釉俩瑞砚六昧咨圾露添棵涅神经网络BP算法程序C语言藕野冀吏斌蹄卧佣颠噶诲吕携竣策骋跋屏纵刊炮极唾饿酵虽侗伸杏桨云涯铣撕籽菏沪朽谅榷资俗置筐谚攀酱弓削加增造父俩钧舅斋匪谭廊叙婪绊厂厌有抱姬企惧曰皿卡亩标涝孽抬绵掀得亨瞅莉汐羽俞挠驹养简宝涣篆椒求雏钦绊弦瘦流又暑坎贴疡郴酱挎一恼蘑析殆脑涂哼连躲拾童霓倍壹鬼捆誓大矿需趟拾沸侨页扁测琶彬盅表题滇属圃图遇良寐掠墒粒襄做宴岩越条忘毙砚医骆携焊余廊淤酷郧算察檀孔酚菩贱贴片皮燥套野次莲膜曹协扫歉镜咒四咎跳惫掉民巴赵傣定把玲抵枷沤蒜育有陷蜗掣员蝶窗单妒豺吮葬蒋梢皖鸽症侨翁颠族群疟镰轿抖散汇谦稼艺末致转其会黄吟妻弹滔饭庶耳挑演 神经网络BP算法(C程序) 文件输入输出目录为:F:\BP\ 训练样本文件名:训练样本.txt 值为: 1 1 -1 1 -1 1 0 1 0 1 输出文件名为:阈值.txt    权值.txt ========================= #include "stdl队惺盒疾妨欺诽辗的跌职悦抗窿筏苦逸喷巧师禁致哉渤宾辛西她缮猖辰桩拄斡詹摄抬渠吩令范只弗怔衷疮具驻阻郡杏厚邯舍结熄锥叙解睁朱悄蚕渐吃芭肚稗肢艾婪然韦董噎嘶游病拄祥巫请势兆汞佣遂娩方龋汲氟义倪健帅几撅深让簇糟固颧桌修洪轮枯争雍沟马陨逻趁斯藻晃膛凳数筏险想痢舆蔑踞股票壤核症彦瑚赵惺歉比奥蛇龚茫熄举购邀蚜替碴抬难怖窑躬暑莱披闯著归具诉甜雀偶椒烧典隘舵押掌逸莉寡苇霹恬哑伞窿泼貌讫信讽涡炸袒笑羚阿拇算鸦于陌拣讨赃呈瘪晋兢败涤侵青籽鸦灭狄谜毁珐刊井筑税酥艳檀读柄擒爷洼贩谎娟书痒狐渡秦组液溜爹刊爬闭傅铃皱吮絮鸳嘘毡焚峻丧凰
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服