神经网络C++程序.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案 精彩文档 /* ************************************** *backprop.h ************************************** */ #ifndef_BACKPROP_H_ #define_BACKPROP_H_ #define BIGRND 0x7fffffff /***神经网络的数据结构。网络被假定为一个全连接的3层前向结构, 每层的单元0是阈值,这意味着真正的神经元编号为1-n ***/ typedef struct{ int input_n; /*输入层的神经元个数*/ int hidden_n; /*隐含层的神经元个数*/ int output_n; /*输出层的神经元个数*/ double *input_units; /*输入层的神经元*/ double *hidden_units; /*隐含层的神经元*/ double *output_units; /*输出层的神经元*/ double *hidden_delta; /*隐含层的误差*/ double *output_delta; /*输出层的误差*/ double *target; /*目标向量*/ double **input_weights; /*输入层到隐藏层的连接权*/ double **hidden_weights; /*隐藏层到输出层的连接权*/ /***下面两个在迭代时使用***/ double **input_prev_weights; /*前次输入层到隐藏层权值的改变*/ double **input_prev_weights; /*前次隐藏层到输出层权值的改变*/ }BPNN; /***用户接口***/ /*初始化随机数种子*/ void bpnn_initialize(int seed); /*创建BP网络*/ BPNN *bpnn_create(int n_in,int n_hidden,int n_out); /*释放BP网络所占地内存空间*/ void bpnn_free(BPNN *net); /*训练BP网络*/ void bpnn_train(BPNN *net,double eta,double momentum,double*eo,double *eh); /*前向运算*/ void bpnn_feedforward(BPNN *net); /*保存BP网络到文件中*/ void bpnn_save(BPNN *net,char *filename); /*从文件中读取BP网络参数*/ BPNN *bpnn_read(char *filename); #endif /* ************************************ *backprop.cpp *仅用于学习目的 ************************************ */ #include StdAfx.h #include stdio.h #include backprop.h #include math.h #include stdlib.h #define ABX(x) (((x)0.0?(x):(-(x))) /*宏定义:快速拷贝*/ #define fastcopy(to,from,len)\ {\ register char *_to,*from;\ register int _i,_l;\ _to=(char *)(to);\ _from=(char *)(from);\ _l=(len);\ for(_i=0;_i_l;_i++) *_to++=*_from++;\ } /***返回0~1的双精度随机数***/ double drnd() { return((double) rand()/(double) BIGRND); } /***返回-1.0到1.0之间的双精度随机数***/ double dpn1() { return((drnd()*2.0)-1.0); } /***作用函数,目前是S型函数***/ //参数:x-自变量的值 double squash(double x) {return(1.0/(1.0+exp(-x))); } /***申请1维双精度实数数组***/ //参数:n-数组的维数 double *alloc_1d_dbl(int n) { double *new1; new1=(double *)malloc ((unsigned)(n*sizeof(double))); if(new1==NULL){ printf(ALLOC_

文档评论(0)

dmz158 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档