欢迎来到天天文库
浏览记录
ID:28826795
大小:60.00 KB
页数:13页
时间:2018-12-14
《神经网络c++程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案/****************************************backprop.h***************************************/#ifndef_BACKPROP_H_#define_BACKPROP_H_#defineBIGRND0x7fffffff/***神经网络的数据结构。网络被假定为一个全连接的3层前向结构,每层的单元0是阈值,这意味着真正的神经元编号为1-n***/typedefstruct{intinput_n;/*输入层的神经元个数*/inthidden_n;/*隐
2、含层的神经元个数*/intoutput_n;/*输出层的神经元个数*/double*input_units;/*输入层的神经元*/double*hidden_units;/*隐含层的神经元*/double*output_units;/*输出层的神经元*/double*hidden_delta;/*隐含层的误差*/double*output_delta;/*输出层的误差*/double*target;/*目标向量*/double**input_weights;/*输入层到隐藏层的连接权*/double**hidden_weights;/*隐藏层
3、到输出层的连接权*//***下面两个在迭代时使用***/double**input_prev_weights;/*前次输入层到隐藏层权值的改变*/double**input_prev_weights;/*前次隐藏层到输出层权值的改变*/}BPNN;/***用户接口***//*初始化随机数种子*/voidbpnn_initialize(intseed);/*创建BP网络*/BPNN*bpnn_create(intn_in,intn_hidden,intn_out);/*释放BP网络所占地内存空间*/voidbpnn_free(BPNN*net)
4、;精彩文档实用标准文案/*训练BP网络*/voidbpnn_train(BPNN*net,doubleeta,doublemomentum,double*eo,double*eh);/*前向运算*/voidbpnn_feedforward(BPNN*net);/*保存BP网络到文件中*/voidbpnn_save(BPNN*net,char*filename);/*从文件中读取BP网络参数*/BPNN*bpnn_read(char*filename);#endif/**************************************b
5、ackprop.cpp*仅用于学习目的*************************************/#include"StdAfx.h"#include#include"backprop.h"#include#include#defineABX(x)(((x)>0.0?(x):(-(x)))/*宏定义:快速拷贝*/#definefastcopy(to,from,len){registerchar*_to,*from;registerint_i,_l;_to=(char
6、*)(to);_from=(char*)(from);_l=(len);for(_i=0;_i<_l;_i++)*_to++=*_from++;}/***返回0~1的双精度随机数***/精彩文档实用标准文案doubledrnd(){return((double)rand()/(double)BIGRND);}/***返回-1.0到1.0之间的双精度随机数***/doubledpn1(){return((drnd()*2.0)-1.0);}/***作用函数,目前是S型函数***///参数:x-自变量的值doublesquash(doub
7、lex){return(1.0/(1.0+exp(-x)));}/***申请1维双精度实数数组***///参数:n-数组的维数double*alloc_1d_dbl(intn){double*new1;new1=(double*)malloc((unsigned)(n*sizeof(double)));if(new1==NULL){printf("ALLOC_1D_DBL:Couldn'tallocatearrayofdoubles");return(NULL);}return(new1);}/***申请2维双精度实数数组***///参数
8、:m-数组的行数//n-数组的列数double**alloc_2d_dbl(intm,intn){inti;double**new1;new1=(double**)
此文档下载收益归作者所有