收藏 分销(赏)

人工神经网络bp算法C语言程序可出图.doc

上传人:w****g 文档编号:2492962 上传时间:2024-05-30 格式:DOC 页数:4 大小:38.55KB
下载 相关 举报
人工神经网络bp算法C语言程序可出图.doc_第1页
第1页 / 共4页
人工神经网络bp算法C语言程序可出图.doc_第2页
第2页 / 共4页
人工神经网络bp算法C语言程序可出图.doc_第3页
第3页 / 共4页
人工神经网络bp算法C语言程序可出图.doc_第4页
第4页 / 共4页
本文档共4页,全文阅读请下载到手机保存,查看更方便
资源描述

1、include #include #include #include #include #include #define OUT_COUT 2 /输出向量维数#define IN_COUT 3 /输入向量维数#define COUT 6 /样本数量typedef struct /bp人工神经网络结构 int h; /实际使用隐层数量 double vIN_COUT50; /隐藏层权矩阵i,隐层节点最大数量为50 double w50OUT_COUT; /输出层权矩阵 double a; /学习率 double b; /精度控制参数 int LoopCout; /最大循环次数 bp_nn;do

2、uble fnet(double net) /Sigmoid函数,神经网络激活函数 return 1/(1+exp(-net);int InitBp(bp_nn *bp) /初始化bp网络 int i,j; printf(请输入隐层节点数,最大数为100:n); scanf(%d, &(*bp).h); printf(请输入学习率:n); scanf(%lf, &(*bp).a); /(*bp).a为double型数据,所以必须是lf printf(请输入精度控制参数:n); scanf(%lf, &(*bp).b); printf(请输入最大循环次数:n); scanf(%d, &(*bp)

3、LoopCout); srand(unsigned)time(NULL); for (i = 0; i IN_COUT; i+) for (j = 0; j (*bp).h; j+) (*bp).vij = rand() / (double)(RAND_MAX); for (i = 0; i (*bp).h; i+) for (j = 0; j OUT_COUT; j+) (*bp).wij = rand() / (double)(RAND_MAX); return 1;int TrainBp(bp_nn *bp, float xCOUTIN_COUT, int yCOUTOUT_COUT)

4、 /训练bp网络,样本为x,理想输出为y double f = (*bp).b; /精度控制参数 double a = (*bp).a; /学习率 int h = (*bp).h; /隐层节点数 double vIN_COUT50, w50OUT_COUT; /权矩阵 double ChgH50, ChgOOUT_COUT; /修改量矩阵 double O150, O2OUT_COUT; /隐层和输出层输出量 int LoopCout = (*bp).LoopCout; /最大循环次数 int i, j, k, n,d; double temp; double e = f + 1;double

5、 c;double Ep10000; for (i = 0; i IN_COUT; i+) / 复制结构体中的权矩阵 for (j = 0; j h; j+) vij = (*bp).vij; for (i = 0; i h; i+) for (j = 0; j f & n LoopCout; n+) /对每个样本训练网络 e = 0; for (i= 0; i COUT; i+) for (k= 0; k h; k+) /计算隐层输出向量 temp = 0; for (j = 0; j IN_COUT; j+) temp = temp + xij * vjk; O1k = fnet(temp

6、); for (k = 0; k OUT_COUT; k+) /计算输出层输出向量 temp = 0; for (j = 0; j h; j+) temp = temp + O1j * wjk; O2k = fnet(temp); for (j = 0; j OUT_COUT; j+) /计算输出层的权修改量 ChgOj = O2j * (1 - O2j) * (yij - O2j); for (j = 0; j OUT_COUT ; j+) /计算输出误差 e = e + (yij - O2j) * (yij - O2j); Epn=e; for (j = 0; j h; j+) /计算隐层

7、权修改量 temp = 0; for (k = 0; k OUT_COUT; k+) temp = temp + wjk * ChgOk; ChgHj = temp * O1j * (1 - O1j); for (j = 0; j h; j+) /修改输出层权矩阵 for (k = 0; k OUT_COUT; k+) wjk = wjk + a * O1j * ChgOk; for (j = 0; j IN_COUT; j+) for (k = 0; k h; k+) vjk = vjk + a * xij * ChgHk; if (n % 10 = 0) printf(误差 : %fn,

8、Epn); printf(总共循环次数:%dn, n); printf(调整后的隐层权矩阵:n); for (i = 0; i IN_COUT; i+) for (j = 0; j h; j+) printf(%f , vij); printf(n); printf(调整后的输出层权矩阵:n); for (i = 0; i h; i+) for (j = 0; j OUT_COUT; j+) printf(%f , wij); printf(n); for (i = 0; i IN_COUT; i+) /把结果复制回结构体 for (j = 0; j h; j+) (*bp).vij = vi

9、j; for (i = 0; i h; i+) for (j = 0; j OUT_COUT; j+) (*bp).wij = wij; initgraph(640, 480); /画误差曲线 for(d=100;dLoopCout;d+) c=100*(Epd-1-Epd); linerel(1,c); for(d=0;d2;d+) getchar(); / 按任意键继续 closegraph(); printf(bp网络训练结束!按回车关闭n); return 1;int main() float xCOUTIN_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; /训练样本 int yCOUTOUT_COUT = 0,1, 0,1, 0,1, 1,0, 1,0, 1,0; /理想输出 bp_nn bp; InitBp(&bp); /初始化bp网络结构 TrainBp(&bp, x, y); /训练bp神经网络 return(0);

展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服