神经网络的C语言实现

上传人:cl****1 文档编号:492885118 上传时间:2023-07-03 格式:DOC 页数:6 大小:30KB
返回 下载 相关 举报
神经网络的C语言实现_第1页
第1页 / 共6页
神经网络的C语言实现_第2页
第2页 / 共6页
神经网络的C语言实现_第3页
第3页 / 共6页
神经网络的C语言实现_第4页
第4页 / 共6页
神经网络的C语言实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《神经网络的C语言实现》由会员分享,可在线阅读,更多相关《神经网络的C语言实现(6页珍藏版)》请在金锄头文库上搜索。

1、#include#include#include#include#defineOUT_COUT2/输出向量维数#defineIN_COUT3/输入向量维数#defineCOUT6/样本数量typedefstruct/bp人工神经网络结构inth;/实际使用隐层数量doublevIN_COUT50;隐藏层权矩阵i,隐层节点最大数量为50doublew50OUT_COUT;/输出层权矩阵doublea;/学习率doubleb;/精度控制参数intLoopCout;/最大循环次数bp_nn;doublefnet(doublenet)/Sigmoid函数,神经网络激活函数return1/(1+exp(

2、-net);intInitBp(bp_nn*bp)初始化bp网络printf(请输入隐层节点数,最大数为100:n);scanf(%d,&(*bp).h);printf(请输入学习率:n);scanf(%lf,&(*bp).a);(*bp).a为double型数据,所以必须是lfprintf(请输入精度控制参数:n);scanf(%lf,&(*bp).b);printf(请输入最大循环次数:n);scanf(%d,&(*bp).LoopCout);inti,j;srand(unsigned)time(NULL);for(i=0;iIN_COUT;i+)for(j=0;j(*bp).h;j+)(

3、*bp).vij=rand()/(double)(RAND_MAX);for(i=0;i(*bp).h;i+)for(j=0;jOUT_COUT;j+)(*bp).wij=rand()/(double)(RAND_MAX);return1;intTrainBp(bp_nn*bp,floatxCOUTIN_COUT,intyCOUTOUT_COUT)训练bp网络,样本为x,理想输出为ydoublef=(*bp).b;/精度控制参数doublea=(*bp).a;/学习率inth=(*bp).h;/隐层节点数doublevIN_COUT50,w50OUT_COUT;/权矩阵doubleChgH50

4、,ChgOOUT_COUT;/修改量矩阵doubleO150,O2OUT_COUT;/隐层和输出层输出量intLoopCout=(*bp).LoopCout;/最大循环次数inti,j,k,n;doubletemp;for(i=0;iIN_COUT;i+)/复制结构体中的权矩阵for(j=0;jh;j+)vij=(*bp).vij;for(i=0;ih;i+)for(j=0;jf&nLoopCout;n+)/对每个样本训练网络e=0;for(i=0;iCOUT;i+)for(k=0;kh;k+)/计算隐层输出向量temp=0;for(j=0;jIN_COUT;j+)temp=temp+xij*

5、vjk;O1k=fnet(temp);for(k=0;kOUT_COUT;k+)/计算输出层输出向量temp=0;for(j=0;jh;j+)temp=temp+O1j*wjk;O2k=fnet(temp);for(j=0;jOUT_COUT;j+)/计算输出层的权修改量ChgOj=O2j*(1-O2j)*(yij-O2j);for(j=0;jOUT_COUT;j+)/计算输出误差e=e+(yij-O2j)*(yij-O2j);for(j=0;jh;j+)/计算隐层权修改量temp=0;for(k=0;kOUT_COUT;k+)temp=temp+wjk*ChgOk;ChgHj=temp*O1

6、j*(1-O1j);for(j=0;jh;j+)/修改输出层权矩阵for(k=0;kOUT_COUT;k+)wjk=wjk+a*O1j*ChgOk;for(j=0;jIN_COUT;j+)for(k=0;kh;k+)vjk=vjk+a*xij*ChgHk;if(n%10=0)printf(误差:fn,e);printf(总共循环次数:dn,n);printf(调整后的隐层权矩阵:n);for(i=0;iIN_COUT;i+)for(j=0;jh;j+)printf(%f,vij);printf(n);printf(调整后的输出层权矩阵:n);for(i=0;ih;i+)for(j=0;jOUT

7、_COUT;j+)printf(%f,wij);printf(n);for(i=0;iIN_COUT;i+)/把结果复制回结构体for(j=0;jh;j+)(*bp).vij=vij;for(i=0;ih;i+)for(j=0;jOUT_COUT;j+)(*bp).wij=wij;printf(bp网络训练结束!n);return1;intUseBp(bp_nn*bp)/使用bp网络floatInputIN_COUT;doubleO150;doubleO2OUT_COUT;01为隐层输出,02为输出层输出while(1)/持续执行,除非中断程序printf(请输入3个数:n);inti,j;f

8、or(i=0;iIN_COUT;i+)scanf(%f,&Inputi);doubletemp;for(i=0;i(*bp).h;i+)temp=0;for(j=0;jIN_COUT;j+)temp+=Inputj*(*bp).vji;O1i=fnet(temp);for(i=0;iOUT_COUT;i+)temp=0;for(j=0;j(*bp).h;j+)temp+=O1j*(*bp).wji;O2i=fnet(temp);printf(结果:);for(i=0;iOUT_COUT;i+)printf(%.3f,O2i);printf(n);return1;intmain()floatxCOUTIN_COUT=0.8,0.5,0,0.9,0.7,0.3,1,0.8,0.5,0,0.2,0.3,0.2,0.1,1.3,0.2,0.7,0.8;/训练样本intyCOUTOUT_COUT=0,1,0,1,0,1,1,0,1,0,1,0;/理想输出bp_nnbp;InitBp(&bp);/初始化bp网络结构TrainBp(&bp,x,y);/训练bp神经网络UseBp(&bp);/测试bp神经网络return1;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号