2022年BP算法的C语言实现[参 .pdf
《2022年BP算法的C语言实现[参 .pdf》由会员分享,可在线阅读,更多相关《2022年BP算法的C语言实现[参 .pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、终于搞定了,输出结果完全正确,运行训练次数竟然有几万次!汗!(适合普通BP算法和改进型BP带缓冲项 算法)/ 训练样本大概是这些 ( 每组前三个为 in 样本数据后面为 out 结果) :/0 0 0 0.9 /0 0 1 0.1 /0 1 0 0.1 /0 1 1 0.9 /1 0 0 0.1 /1 0 1 0.9 /1 1 0 0.9 /1 1 1 0.1 测试样本可以自己试试这些数据/0 0.1 0.9(期望: 0.1 )/0.9 0.9 0.1(期望 0.9 )-分割线-#include stdlib.h #include math.h #include conio.h #includ
2、e stdio.h #include time.h#define N 8 /*学习样本个数(测试样本个数)*/ #define IN 3 /*输入层神经元数目*/ #define HN 2 /*隐层神经元数目*/ #define ON 1 /*输出层神经元数目*/ float PIN; /*单个样本输入数据*/ float TON; /*单个样本教师数据*/ float WHNIN; /*输入层至隐层权值*/ float VONHN; /*隐层至输出层权值*/ float XHN; /*隐层的输入 */ float YON; /*输出层的输入*/ float HHN; /*隐层的输出 */ f
3、loat OON; /*输出层的输出*/ float YU_HNHN; /*隐层的阈值 */ float YU_ONON; /*输出层的阈值*/ float err_mN; /*第 m个样本的总误差*/ float a; /*输出层至隐层学习效率*/ float b; /*隐层至输入层学习效率*/ float alpha; /*/动量因子,改进型bp 算法使用 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - float
4、d_errON;/*k*/ float e_errHN;/*j*/ FILE *fp; /* 定义一个放学习样本的结构*/ struct float inputIN; float teachON; Study_DataN; /* 定义一个放测试样本的结构*/ struct float inputIN; float expectON; Test_DataN; /* 改进型 bp 算法用来保存每次计算的权值*/ float old_WHNIN; float old_VONHN;int Start_Show() clrscr(); printf(n * n); printf( * Welcome t
5、o use *n); printf( * this program of *n); printf( * calculating the BP *n); printf( * model! *n); printf( * Happy every day! *n); printf( *n); printf(nnBefore starting,please read the follows carefully:nn); printf( The program of BP can study itself for no more than 200000 times.nAnd surpassing the
6、number,the program will be ended by itself innpreventing running infinitely because of error!n); printf(nnn); printf(Now press any key to start.n); getch(); clrscr(); int End_Show() printf(nn-n); printf(The program has reached the end successfully!nnPress any key to exit!nn); printf(n *n); printf( *
7、 This is the end *n); printf( * of the program which*n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - printf( * can calculate the BP*n); printf( * model! *n); printf( *n); printf( * Thanks for using! *n); printf( * Happy every day! *n);
8、 printf( *n); getch(); exit(0); /* 读取训练样本*/ GetTrainingData() int i,j,m; float datr; if(fp=fopen(sample.txt,r)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); for(i=0;iIN-1) Study_Datai.teachj-IN=datr; else Study_Datai.inputj=datr; /*printf(nthe Study_Data%d.input%d=%fn %f,i,j
9、,Study_Datai.inputj,datr);getch();*/ /*use to check the loaded training datas*/ j+; fclose(fp); printf(nThere are %d sample datas that have been loaded successfully!n,N*(IN+ON); printf(nShow the data which has been loaded as follows:n); for(m=0;mN;m+) for(i=0;iIN;i+) printf(Study_Data%d.input%d=%f ,
10、m,i,Study_Datam.inputi); for(j=0;jON;j+) printf(Study_Data%d.teach%d=%f ,m,j,Study_Datam.teachj); printf(nnnPress any key to begin Study.); getch(); clrscr(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - return 1; /* 初始化权、阈值子程序*/ initia
11、l() int i; int ii; int j; int jj; int k; int kk; printf(nRandsom Weight value and Bias value as follow:n); srand(time(NULL);/*随机函数种子*/ printf(nWeight Value:n); for(i=0;iHN;i+) for(j=0;jIN;j+) Wij=(float)(rand()/32767.0)*2-1)/2); /* 初始化输入层到隐层的权值,随机模拟0.5-0.5 */ printf(nw%d%d=%f,i,j,Wij); for(ii=0;iiON
12、;ii+) for(jj=0;jjHN;jj+) Viijj= (float)(rand()/32767.0)*2-1)/2); /* 初始化隐层到输出层的权值,随机模拟0.5-0.5 */ printf(nV%d%d=%f,ii,jj,Viijj); printf(nnBias Value:n); for(k=0;kHN;k+) YU_HNk = 1.0; /* 隐层阈值初始化 ,-0.01 0.01 之间 */ printf(nYU_HN%d=%f,k,YU_HNk); for(kk=0;kkON;kk+) YU_ONkk = 1.0; /* 输出层阈值初始化 ,-0.01 0.01 之间
13、 */ printf(nYU_ON%d=%fn,kk,YU_ONkk); printf(nnnnnPress any key to start culculating.:n); getch(); clrscr(); printf(Please wait.); return 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - /* 第 m个学习样本输入子程序*/ input_P(int m) int i,j; for(i=0;
14、iIN;i+) Pi=Study_Datam.inputi; return 1; /* 第 m个样本教师信号子程序*/ input_T(int m) int k; for(k=0;kON;k+) Tk=Study_Datam.teachk; return 1; /* 求净输入,输出*/ IN_OUT() float sigma1,sigma2; int i,j,ii,jj; for(i=0;iHN;i+) sigma1=0.0; for(j=0;jIN;j+) sigma1+=Wij*Pj;/*求隐层内积 */ Xi=sigma1+YU_HNi; Hi=1.0/(1.0+exp(-Xi); f
15、or(ii=0;iiON;ii+) sigma2=0.0; for(jj=0;jjHN;jj+) sigma2+=Viijj*Hjj; Yii=sigma2+YU_ONii; Oii=1.0/(1.0+exp(-Yii); return 1; /* 误差分析 */ /* k*/ int Err_O_H(int m) int k; float abs_errON; float sqr_err=0.0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年BP算法的C语言实现参 2022 BP 算法 语言 实现
限制150内