资源简介
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
- 上一篇:霍夫曼编码的C语言实现
- 下一篇:C++语言__学生教务管理系统代码.
评论
共有 条评论