神经网络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 PIN; /*单个样本输入数据*/double TON; /*单个样本输出数据*/double WHNIN; /*/输入层至隐层权值*/double VONHN; /*/隐层至输出层权值*/double XHN; /*/隐层的输入*/double YON; /*/输出层的输入*/double HHN; /*/隐层的输出*/double OON; /*/输出层的输出*/double YU_HNHN; /*/隐层的阈值*/double YU_ONON; /*/输出层的阈值*/double err mN; /*/第m个样本的总误差*/double a; /*/输出层至隐层的学习效率*/double b; /*/隐层至输入层学习效率*/double alpha; /*/动量因子,改进型bp算法使用*/double d errON;FILE *fp;/*定义一个放学习样本的结构*/struct double inputIN;double teachON;Study_DataN;/*改进型bp算法用来保存每次计算的权值*/struct double old_WHNIN;double old_VONHN;Old_WVZ;显示开始界面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("nn Before starting, please read the follows carefully:nn");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 inn preventing running infinitely because of error!n");printf("nnn");printf("Now press any key to start.n");getch();getch();clrscr();显示结束界面int End_Show()printf("nn-n");printf("The program has reached the end successfully!nn Press any key to exit!nn");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_Datam.inputi=datr; /*printf("nthe Study_Datat%d.input%d=%fn",m,i,Study_Datam.inputi);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_Datam.teachi=datr; /*printf("nThe Study_Data%d.teach%d=%f",m,i,Study_Datam.teachi);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_Datam.inputi); for(j=0;j<ON;J+) printf("nStudy_Data%d.teach%d=%f",m,j,Study_Datam.teachj); printf("nnPress 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+) Wij=(double)(rand()/32767.0)*2-1); /*初始化输入层到隐层的权值,随机模拟0 和 1 -1 */ printf("w%d%d=%fn",i,j,Wij); for(ii=0;ii<ON;II+) for(jj=0;jj<HN;JJ+) Viijj= (double)(rand()/32767.0)*2-1); /*初始化隐层到输出层的权值