- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
神經网络C程序
/*
**************************************
*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(d
文档评论(0)