BP神经网络算法的C语言实现代码_第1页
BP神经网络算法的C语言实现代码_第2页
BP神经网络算法的C语言实现代码_第3页
BP神经网络算法的C语言实现代码_第4页
BP神经网络算法的C语言实现代码_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、bp神经网络算法的c语言实现代码/bp神经网络算法,c语言版本/vs2010下,无语法错误,可直接运行添加了简单注释欢迎学习交流#include #include #include #include #define n_out 2输出向量维数#define n_in 3 隔入向量维数#define n_sample 6 样本数量/bp人工神经网络typedef struct(int lay er num;中间层数量double vn_in50; 中间层权矩阵i,中间层节点最大数量为50double w50n_out;输出层权矩阵double study rate;学习率double accur

2、acy;int maxloop;精度控制参数最大循环次数 bpnet;/sigmoid 函数double fnet(double net)(return l/(l+exp(-net);) 初始化int initbpnet(bpnet *bp);/训练bp网络,样本为x,理想输出为yint tr ainbpn et(bpn et *bp, double xn_sampleint yn_sample |n_out|);使用bp网络int usebpnet(bpnet *bp);主函数int main()训练样本double xn_samplen_in = 08,0.5,0, 09,07。3,1,0

3、.8,0.5,0,0.2,0.3, 02,01,1.3, 0.2,0.7,0.8;理想输出int y n_sample n_out = 0,1,0,1, 0,1, 1,1, 1,0, 1,0);初始化bp网络bpnet bp;initbpnet(&bp);结构trainbpnet(&bp, x, y); 训练 bp 神经网络usebpnet(&bp);测试 bp 神经网络return 1;)使用bp网络int usebpnet(bpnet *bp)(double inputn_in;double out 1 50;double out2n_out; /outl 为中间层输出qut2为输出层输出

4、持续执行,除非中断程序while (1)printfc请输入3个数:nn);int ij;for (i = 0; i n_in; i+)scanf_s(n%r &inputi);double tmp;for (i = 0; i (*bp).layernum; i+)|tmp = 0;for (j = 0; j n_in; j+)tmp += inputs *outli = fnet(tmp);)for (i = 0; i n_out; i+)(tmp = 0;for (j = 0; j (*bp).layernum; j+)tmp += outlj * (*bp).w皿i;out2i = fn

5、et(tmp);)printfc 结果: n);for (i = 0; i n_out; i+)printf(h%.3f h,out2i);printf(nnn);)return 1;)训练bp网络,样本为x,理想输出为yinttrainbpn et (bpn et*bp, doublexn_samplen_in, int yn_sample n_out)double f = (*bp).accuracy;精度学控制参数double a = (bp).studyrate;习率int layernum = (*bp).layernum; 中间层节 点数double vn_in50, w50n_o

6、ut; 权矩阵double chgh50, chgon_out;/修改量矩阵double outl50, out2n_out; 中间层和输 出层输出量int maxloop(*bp).maxloop;最大循环次数int n;double tmp;for (i = 0; i n_in; i+)/复制结构体中的权 矩阵for (j = 0; j layernum; j+)viu = (*bp).viu;for (i = 0; i layernum; i+)for (j = 0; j f & n maxloop; n+) (e = 0;for (i= 0; i n_sample; i+)计算中间层输

7、出向量for (k= 0; k layernum; k+)tmp = 0;for (j = 0; j n_in; j+)tmp = tmp + xij*vjk;outlk = fnet(tmp);)计算输出层输出向量for (k = 0; k n_out; k+)tmp = 0;for (j = 0; j layernum; j+)tmp = tmp + outlj * wjk;out2k = fnet(tmp);)计算输出层的权修改量for (j = 0; j n_out; j+)chgoj = out2j * (1 - out2j) * (yiu - out2u); 计算输出误差 for

8、(j = 0; j n_out; j+)e = e + (yiu - out2j) * (yiu-out2ud;计算中间层权修改量for (j = 0; j layernum; j+)tmp = 0;for (k = 0; k n_out; k+)tmp = tmp + wjk * chgok;chghj = tmp * outlj * (1 - outiui); )修改输出层权矩阵for (j = 0; j layernum; j+)for (k = 0; k n_out; k+)wjk = wjk + a * outlj * chgok;for (j = 0; j n_in; j+)for

9、 (k = 0; k layernum; k+) vuk = v皿k + a * xiu * chghk;)if (n % 10 = 0)printf(误差:e);)printf(总共循环次数:%dnf n);printf(调整后的中间层权矩阵:nn);for (i = 0; i n_in; i+)for (j = 0; j layernum; j+) printf(n%f vij);printf(nnn);)printfc调整后的输出层权矩阵:n);for (i = 0; i layernum; i+) for (j = 0; j n_out; j+) printf(n%f wij);pri

10、ntf(nnn);)把结果复制回结构体for (i = 0; i n_in; i+)for (j = 0; j layernum; j+) (*bp).vij = vij;for (i = 0; i layernum; i+)for (j = 0; j layernum);printf(1,请输入学习率:n“);scanf_s(n %lf&(bp).studyrate);/(bp).studyrate为double型数据,所以必须 是ifprintf(请输入精度控制参数:nn);scanf_s(m %if &(*bp)accuracy);printf请输入最大循环次数:n);scanf_s(n%dm, &(*bp).maxloop);int ij;srand(unsigned)time(null);for (i = 0; i n_in; i+)for (j = 0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论