• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签:

资源简介

BP神经网络(鸢尾花分类)C++代码.rar 将Iris(鸢尾花)数据集分为训练集(Iris-train.txt)和测试集(Iris-test.txt),分别含75个样本,每个集合中每种花各有25个样本。

资源截图

代码片段和文件信息

// BPnetwork.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include 
#include 
#include 
#include 
#include 
#define Data 75 //样本容量
#define In 4 //样本参数个数
#define Out 3  //输出参数个数
#define Neuron 10 //神经元个数
#define TrainC 2000 //训练次数
#define StudyRate_A 0.2//输出学习率 基于经验
#define StudyRate_B 0.4//输出学习率 基于事实
#define StudyRate_a 0.2//输入学习率 基于经验
#define StudyRate_b 0.3//输入学习率 基于事实
double d_in[Data][In]; //样本输入
double d_out[Out][Data]; //样本输出
double w[Neuron][In]; //输入对神经元的权
double v[Out][Neuron]; //神经元对输出的权
double dw[Neuron][In];  //w的修正
double dv[Out][Neuron]; //v的修正
double o[Neuron]; //神经元通过激活函数的输出
double OutputData[Out]; //BP网络的输出
double Maxin[In]Minin[In]Maxout[Out]Minout[Out];

//void ReadData()
//{
// for (int i = 0; i < Data; i++)
// {
//  d_in[i][0]=rand()%100;
//  d_in[i][1]=rand()%100;
//  d_out[0][i]=d_in[i][0]+d_in[i][1];
//  //printf(“data%d: %lf + %lf = %lf\n“i+1d_in[i][0]d_in[i][1]d_out[0][i]);
// }
//}

void ReadData()
{
int type=0;
FILE*  file;
errno_t err=fopen_s(&file“Iris-train.txt““r“);
if(err==0)
for(int i=0;i {
if(feof(file))
break;
else
{
fscanf_s(file“%lf %lf %lf %lf %d “&d_in[i][0]&d_in[i][1]&d_in[i][2]&d_in[i][3]&type);
d_out[0][i]=0;
d_out[1][i]=0;
d_out[2][i]=0;
d_out[type][i]=1;
}
}
else
printf_s(“%d“err);
}

void InitBPNework()
{
 int ij;
 
 for (i = 0; i < In; i++)
 {
  Minin[i]=Maxin[i]=d_in[0][i];
  for (j = 0; j < Data; j++)
  {
   Maxin[i]=Maxin[i]>d_in[j][i]?Maxin[i]:d_in[j][i];
   Minin[i]=Minin[i]  }
 }
 for (i = 0; i < Out; i++)
 {
  Minout[i]=Maxout[i]=d_out[0][i];
  for (j = 0; j < Data; j++)
  {
   Maxout[i]=Maxout[i]>d_out[i][j]?Maxout[i]:d_out[i][j];
   Minout[i]=Minout[i]  }
 }
 //printf(“max of in:%lf%lf\nmin of in:%lf%lf\n“Maxin[0]Maxin[1]Minin[0]Minin[1]);
 //printf(“max of out:%lf\nmin of out:%lf\n“Maxout[0]Minout[0]);
 
 for (i = 0; i < In; i++)
  for(j = 0; j < Data; j++)
   d_in[j][i]=(d_in[j][i]-Minin[i]+1)/(Maxin[i]-Minin[i]+1);
 for (i = 0; i < Out; i++)
  for(j = 0; j < Data; j++)
   d_out[i][j]=(d_out[i][j]-Minout[i]+1)/(Maxout[i]-Minout[i]+1);
 
 for (i = 0; i < Neuron; ++i)   
  for (j = 0; j < In; ++j)
  {   
   w[i][j]=(rand()%2-1);
   dw[i][j]=0;
  }
 for (i = 0; i < Neuron; ++i)   
  for (j = 0; j < Out; ++j)
  {
   v[j][i]=(rand()%2-1);
   dv[j][i]=0;
  }
}

void ComputO(int var)

 int ij;
 double sumy;
    
 for (i = 0; i < Neuron; ++i)
 {
  sum=0;
  for (j = 0; j < In; ++j)
  {
   sum+=w[i][j]*d_in[var][j];
   o[i]=1/(1+exp(-1*sum));
  }
 }
 
    for (i = 0; i < Out; ++i)
 {
  sum=0;
  for (j = 0; j < Neuron; ++j)
   sum+=v[i][j]*o[j];
  OutputData[i]=sum;
  //printf(“data%d:output %lf ans %lf\n“varOutputData[i]d_out[i][var]);
 }   
}

void BackUpdate(int va

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1424  2015-10-23 14:29  Iris-test.txt

     文件       1425  2015-10-23 14:29  Iris-train.txt

     文件       6092  2015-10-31 17:37  BPnetwork.cpp

----------- ---------  ---------- -----  ----

                 8941                    3


评论

共有 条评论

相关资源