ImageVerifierCode 换一换
格式:DOCX , 页数:83 ,大小:32.29KB ,
资源ID:1209270      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1209270.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(BP神经网络的C语言汇总2.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

BP神经网络的C语言汇总2.docx

1、BP神经网络的C语言汇总2#include stdio.h#include stdlib.h#include time.h#include math.h/*inpoints 为输入神经元个数,可改变outpoints为输出神经元个数defaultpoints为隐层神经元个数datagrough为样本数据个数*以下数据定义可以修改*/#define A 0#define a 1#define b 1#define c 1#define ALFA 0.85 #define BETA 0.2 /学习率01#define Total 20000#define inpoints 9#define out

2、points 5#define defaultpoints 28#define datagrough 44#define forecastdata 4/*定义所需变量*/double InpointDatadatagroughinpoints,OutpointDatadatagroughoutpoints; /* 输入输出数据 */double InpointData_MAXinpoints,InpointData_MINinpoints; /* 每个因素最大数据 */double OutpointData_MAXoutpoints,OutpointData_MINoutpoints; /*

3、每个因素最小数据 */double wdefaultpointsinpoints,limendefaultpoints,voutpointsdefaultpoints; /* 连接权值、阈值 */double dlta_wdefaultpointsinpoints,dlta_limendefaultpoints,dlta_voutpointsdefaultpoints; /* 连接权、阈值修正值 */double defaultOutpointdefaultpoints,Outpoint_dpoutpoints,Outpoint_epdatagrough;/*读数据文件*/void ReadD

4、ata() FILE *fp1,*fp2; int i,j; if(fp1=fopen(D:data训练输入.txt,r)=NULL) printf(1can not open the filen); exit(0); for(i=0;idatagrough;i+) for(j=0;jinpoints;j+) fscanf(fp1,%lf,&InpointDataij); fclose(fp1); if(fp2=fopen(D:data训练输出.txt,r)=NULL) printf(2can not open the filen); exit(0); for(i=0;idatagrough;

5、i+) for(j=0;joutpoints;j+) fscanf(fp2,%lf,&OutpointDataij); fclose(fp2);/*/*归一化*/void unitary() int i,j; int k=0; for(j=0;jinpoints;j+) /找出每列的最大、最小值存放在数组InpointData_MAXj、InpointData_MINj中 InpointData_MAXj=InpointData0j; InpointData_MINj=InpointData0j; for(i=0;idatagrough;i+) if(InpointData_MAXjInpoi

6、ntDataij) InpointData_MINj=InpointDataij; for(j=0;joutpoints;j+) /找出每列的最大、最小值存放在数组OutpointData_MAXj、OutpointData_MINj中 OutpointData_MAXj=OutpointData0j; OutpointData_MINj=OutpointData0j; for(i=0;idatagrough;i+) if(OutpointData_MAXjOutpointDataij) OutpointData_MINj=OutpointDataij; /*将数据归一处理,处理之后的数据全部

7、在0,1之间*/ for(j=0;jinpoints;j+) for(i=0;idatagrough;i+) if(InpointData_MAXj=0) InpointDataij=0; else InpointDataij=(InpointDataij-InpointData_MINj+A)/(InpointData_MAXj-InpointData_MINj+A); for(j=0;joutpoints;j+) for(i=0;idatagrough;i+) if(OutpointData_MAXj=0) OutpointDataij=0; else OutpointDataij=(Ou

8、tpointDataij-OutpointData_MINj+A)/(OutpointData_MAXj-OutpointData_MINj+A);/*/*初始化,随机赋初值*/void Initialization() int i,j; srand(unsigned)time(NULL); /头文件名 #include for(i=0;idefaultpoints;i+) /给输入层到隐层的连接权赋随机值LianJie_wij,这些值在0,1 for(j=0;jinpoints;j+) wij=(rand()*2.0/RAND_MAX-1)/2; dlta_wij=0; for(i=0;id

9、efaultpoints;i+) limeni=(rand()*2.0/RAND_MAX-1)/2; dlta_limeni=0; for(i=0;ioutpoints;i+) /给隐层到输出层的连接权赋初值 for(j=0;jdefaultpoints;j+) vij=(rand()*2.0/RAND_MAX-1)/2; dlta_vij=0; /*求单样本的计算输出误差*/void out_sub1(int t) int i,j; double defaultInpointdefaultpoints; double Outpoint_youtpoints; Outpoint_ept=0;

10、for(i=0;idefaultpoints;i+) double sum=0; for(j=0;jinpoints;j+) sum+=wij*InpointDatatj; defaultInpointi=sum+limeni; defaultOutpointi=1/(a+b*exp(-1*c*defaultInpointi);/求Oi for(j=0;joutpoints;j+)/求Yi Outpoint_yj=0; for(i=0;idefaultpoints;i+) Outpoint_yj+=vji*defaultOutpointi; Outpoint_dpj=OutpointDatat

11、j-Outpoint_yj; Outpoint_ept+=Outpoint_dpj*Outpoint_dpj/2; /*反算权值*/void out_sub2(int t) int i,j,k; double s; for(i=0;idefaultpoints;i+) s=0; for(j=0;joutpoints;j+) dlta_vji=ALFA*dlta_vji+BETA*Outpoint_dpj*defaultOutpointi; / s+=vji*Outpoint_dpj; vji+=dlta_vji; dlta_limeni=ALFA*dlta_limeni+BETA*defaul

12、tOutpointi*(1-defaultOutpointi)*s;/ limeni+=dlta_limeni; for(k=0;kinpoints;k+) dlta_wik=ALFA*dlta_wik+BETA*defaultOutpointi*(1-defaultOutpointi)*s*InpointDatatk;/ wik=wik+dlta_wik; /*/void forecast() int i,j,t,k=0; double e,e1forecastdata=0; /训练误差 double sss; double InputData_xforecastdatainpoints,t

13、pforecastdataoutpoints; double defInpoint,defOutpointdefaultpoints,yforecastdataoutpoints;/yforecastdataoutpoints为网络检验输出 FILE *fp1,*fp3; if(fp1=fopen(D:data预测输入.txt,r)=NULL) /检验数据输入 printf(3can not open the filen); exit(0); for(i=0;iforecastdata;i+) for(j=0;jinpoints;j+) fscanf(fp1,%lf,&InputData_xi

14、j); fclose(fp1); if(fp3=fopen(D:data预测输出.txt,r)=NULL) /实际检验结果输出 printf(31can not open the filen); exit(0); for(i=0;iforecastdata;i+) for(j=0;joutpoints;j+) fscanf(fp3,%lf,&tpij); fclose(fp3); for(j=0;jinpoints;j+) / 检验数据归一化 for(i=0;iforecastdata;i+) if(InpointData_MAXj=0) InputData_xij=0; else Input

15、Data_xij=(InputData_xij-InpointData_MINj+A)/(InpointData_MAXj-InpointData_MINj+A); for(j=0;joutpoints;j+) for(i=0;iforecastdata;i+) if(OutpointData_MAXj=0) tpij=0; else tpij=(tpij-OutpointData_MINj+A)/(OutpointData_MAXj-OutpointData_MINj+A); do Initialization(); /初始化连接权值wij,limeni,vki k=0; do e=0; f

16、or(t=0;tdatagrough;t+) out_sub1(t); /正向计算网络输出 out_sub2(t); /反向计算,修正权值 e+=Outpoint_ept; /计算输出误差 k+; while(k0.1); sss=0; /中间参数 for(t=0;tforecastdata;t+) e1t=0; for(i=0;idefaultpoints;i+) double sum=0; for(j=0;jinpoints;j+) sum+=wij*InputData_xtj; defInpoint=sum+limeni; defOutpointi=1/(a+b*exp(-1*c*def

17、Inpoint); for(j=0;joutpoints;j+) ytj=0; for(i=0;i0.12);/*/void main() int i,j,k; FILE *fp2; ReadData(); /读训练数据:输入和输出 unitary(); /归一化,将输入输出数据归一,结果在0,1中 forecast(); /检验误差 if(fp2=fopen(D:data计算权值.txt,w)=NULL) /文件输出训练好的权值 printf(6can not open the filen); exit(0); for(i=0;idefaultpoints;i+) for(k=0;kinpo

18、ints;k+) fprintf(fp2, %lf ,wik); fprintf(fp2,n); fprintf(fp2,n); for(i=0;idefaultpoints;i+) fprintf(fp2, %lf ,limeni); fprintf(fp2,nn); for(i=0;idefaultpoints;i+) for(j=0;joutpoints;j+) fprintf(fp2, %lf ,vji); fprintf(fp2,n); fclose(fp2); 看到学生用Matlab做了BP神经网络应用的程序,突然想起自己在上学时写了个BP的C语言版,现在真不知道当时是怎么写出来的

19、,这里放上来做一个纪念。#include#include#include#include#include#include#include#define MAXWEIGHT (float)0.3)#define SCALEWEIGHT (float)32767)#define nInputNodes 4 #define nHiddenNodes 8 #define nOutputNodes 3 #define nPatterns 15#define nIterations 5000#define ESC 27#define ERRORLEVEL 0.0001#define ITEMS 8type

20、def float *PFLOAT;typedef PFLOAT VECTOR;typedef PFLOAT *MATRIX;void VectorAllocate(VECTOR *vector,int nCols);void AllocateCols(PFLOAT matrix,int nRows,int nCols);void MatrixAllocate(MATRIX *pmatrix,int nRows,int nCols);void MatrixFree(MATRIX matrix,int nRows);MATRIX out0;MATRIX out1;MATRIX delta1;MA

21、TRIX delw1;MATRIX w1;MATRIX out2;MATRIX delta2;MATRIX delw2;MATRIX w2;MATRIX target;/VECTOR PatternID;void main() float eta =0.15, alpha=0.075; int nReportErrors=100; float ErrorLevel=ERRORLEVEL; char MonitorError=0; float error; register int h; register int i; register int j; int p, q;/ r; FILE *fp

22、Pattern, *fpWeightsOut, *fpResults, *fpError, *fpTest; MatrixAllocate(&out0, nPatterns, nInputNodes); MatrixAllocate(&out1, nPatterns, nHiddenNodes); MatrixAllocate(&out2, nPatterns, nOutputNodes); MatrixAllocate(&delta2,nPatterns, nOutputNodes); MatrixAllocate(&delw2, nOutputNodes, nHiddenNodes+1);

23、 MatrixAllocate(&w2, nOutputNodes, nHiddenNodes+1); MatrixAllocate(&delta1, nPatterns, nHiddenNodes); MatrixAllocate(&delw1, nHiddenNodes,nInputNodes+1); MatrixAllocate(&w1, nHiddenNodes,nInputNodes+1); MatrixAllocate(&target,nPatterns, nOutputNodes);/ VectorAllocate(&PatternID,nPatterns);/初始化权值- srand(unsigned)time(NULL); for(h=0;hnHiddenNodes;h+) for(i=0;i=nInputNodes;i+) float frand=rand(); w1hi=MAXWEIGHT*(1.0-2*frand/SCALEWEIGHT); delw1hi=0.0; for(j=0;jnOutputNodes;j+) for(h=0;h=nHiddenNodes;h+) float frand=rand(); w2jh=MAXWEIGH

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2