(完整版)人工神经网络bp算法C语言程序可出图.doc

上传人(卖家):刘殿科 文档编号:5772094 上传时间:2023-05-07 格式:DOC 页数:4 大小:22.50KB
下载 相关 举报
(完整版)人工神经网络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);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 待归类文档
版权提示 | 免责声明

1,本文((完整版)人工神经网络bp算法C语言程序可出图.doc)为本站会员(刘殿科)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|