展会信息港展会大全

C++实现的BP神经网络代码
来源:互联网   发布日期:2011-09-09 14:28:47   浏览:15399次  

导读:计算机等级考试网为您提供C++实现的BP神经网络代码,另提供计算机等级考试试题,计算机等级考试考点、知识点等,另提供计算机等级考试模拟试题,历年真题,考前...

  #pragma hdrstop
  #include <stdio.h>
  #include <iostream.h>
  const A=30.0;
  const B=10.0;
  const MAX=500;             //最大训练次数
  const COEF=0.0035; //网络的学习效率
  const BCOEF=0.001;//网络的阀值调整效率
  const ERROR=0.002   ; // 网络训练中的允许误差
  const ACCURACY=0.0005;//网络要求精度
  double sample[41][4]={{0,0,0,0},{5,1,4,19.020},{5,3,3,14.150},
  {5,5,2,14.360},{5,3,3,14.150},{5,3,2,15.390},
  {5,3,2,15.390},{5,5,1,19.680},{5,1,2,21.060},
  {5,3,3,14.150},{5,5,4,12.680},{5,5,2,14.360},
  {5,1,3,19.610},{5,3,4,13.650},{5,5,5,12.430},
  {5,1,4,19.020},{5,1,4,19.020},{5,3,5,13.390},
  {5,5,4,12.680},{5,1,3,19.610},{5,3,2,15.390},
  {1,3,1,11.110},{1,5,2,6.521},{1,1,3,10.190},
  {1,3,4,6.043},{1,5,5,5.242},{1,5,3,5.724},
  {1,1,4,9.766},{1,3,5,5.870},{1,5,4,5.406},
  {1,1,3,10.190},{1,1,5,9.545},{1,3,4,6.043},
  {1,5,3,5.724},{1,1,2,11.250},{1,3,1,11.110},
  {1,3,3,6.380},{1,5,2,6.521},{1,1,1,16.000},
  {1,3,2,7.219},{1,5,3,5.724}};
  double w[4][10][10],wc[4][10][10],b[4][10],bc[4][10];
  double o[4][10],netin[4][10],d[4][10],differ;//单个样本的误差
  double is; //全体样本均方差
  int count,a;
  void netout(int m, int n);//计算网络隐含层和输出层的输出
  void calculd(int m,int n); //计算网络的反向传播误差
  void calcalwc(int m,int n);//计算网络权值的调整量
  void calcaulbc(int m,int n); //计算网络阀值的调整量
  void changew(int m,int n); //调整网络权值
  void changeb(int m,int n);//调整网络阀值
  void clearwc(int m,int n);//清除网络权值变化量wc
  void clearbc(int m,int n);//清除网络阀值变化量bc
  void initialw(void);//初始化NN网络权值W
  void initialb(void); //初始化NN网络阀值
  void calculdiffer(void);//计算NN网络单个样本误差
  void calculis(void);//计算NN网络全体样本误差
  void trainNN(void);//训练NN网络
  /*计算NN网络隐含层和输出层的输出 */
  void netout(int m,int n)
  {
  int i,j,k;
  //隐含层各节点的的输出
  for (j=1,i=2;j<=m;j++) //m为隐含层节点个数
  {
  netin[i][j]=0.0;
  for(k=1;k<=3;k++)//隐含层的每个节点均有三个输入变量
  netin[i][j]=netin[i][j]+o[i-1][k]*w[i][k][j];
  netin[i][j]=netin[i][j]-b[i][j];
  o[i][j]=A/(1+exp(-netin[i][j]/B));
  }
  //输出层各节点的输出
  for (j=1,i=3;j<=n;j++)
  {
  netin[i][j]=0.0;
  for (k=1;k<=m;k++)
  netin[i][j]=netin[i][j]+o[i-1][k]*w[i][k][j];
  netin[i][j]=netin[i][j]-b[i][j];
  o[i][j]=A/(1+exp(-netin[i][j]/B)) ;
  }
  }
  /*计算NN网络的反向传播误差*/
  void calculd(int m,int n)
  {
  int i,j,k;
  double t;
  a=count-1;
  d[3][1]=(o[3][1]-sample[a][3])*(A/B)*exp(-netin[3][1]/B)/pow(1+exp(-netin[3][1]/B),2);
  //隐含层的误差
  for (j=1,i=2;j<=m;j++)
  {
  t=0.00;
  for (k=1;k<=n;k++)
  t=t+w[i+1][j][k]*d[i+1][k];
  d[i][j]=t*(A/B)*exp(-netin[i][j]/B)/pow(1+exp(-netin[i][j]/B),2);
  }
  }

[本文共有 3 页,当前是第 1 页] <<上一页 下一页>>

赞助本站

人工智能实验室

相关热词: 实现 网络代

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港