C 实现的BP神经网络代码计算机二级考试

文章作者 100test 发表时间 2009:06:21 15:13:07
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  计算机等级考试四级应用题解析汇总

  2009年下半年全国计算机二级考试报名时间从6月1日起已经开始报名。详情点击:2009年下半年全国计算机等级考试各地报名点汇总。2009年下半年全国计算机二级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库

  #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).
  }
  }

相关文章


C 实现的BP神经网络代码计算机二级考试
C 单元测试工具CppUnit使用简介计算机二级考试
c 对象模型读书笔记计算机二级考试
循环的各种形式:不拘一格编程序之四计算机二级考试
变量取值交换的方法:不拘一格编程序之三计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛