承接上文
本神经网络的讲解 请见 http://blog.youkuaiyun.com/mr_w1997/article/details/54973376
改变了 DataSet的归一函数 并且 删除了 Test_reget 函数
//DateSet.h
//created by WK
#ifndef DATASET_H
#define DATASET_H
#include <vector>
#include <cfloat>
using namespace std;
//数据集
class DataSet
{
private:
int InputNum;
int OutputNum;
vector<double*> DataMap;
double *Max;
double *Mini;
public:
DataSet(int inputnum, int outputnum)
{
this->InputNum = inputnum;
this->OutputNum = outputnum;
this->Max = NULL;
this->Mini = NULL;
}
void AddRow(double *inputArray, double *outputArray)
{
double *data = new double[this->InputNum + this->OutputNum];
for (int i = 0; i<this->InputNum; ++i)
{
data[i] = inputArray[i];
}
for (int i = 0; i<this->OutputNum; ++i)
{
data[InputNum + i] = outputArray[i];
}
this->DataMap.push_back(data);
}
void Normaliz()
{
if (this->Max)
{
delete this->Max;
this->Max = NULL;
}
if (this->Mini)
{
delete this->Mini;
this->Mini = NULL;
}
this->Max = new double[this->InputNum + this->OutputNum];
this->Mini = new double[this->InputNum + this->OutputNum];
for (int i = 0; i < this->InputNum + this->OutputNum; ++i)
{
double max = INT_MIN;
double mini = DBL_MAX;
for (int j = 0; j < DataMap.size(); ++j)
{
max = (max > DataMap[j][i] ? max : DataMap[j][i]);
mini = (mini < DataMap[j][i] ? mini : DataMap[j][i]);
}
if (max == mini)
continue;
for (int j = 0; j < DataMap.size(); ++j)
{
DataMap[j][i] = (DataMap[j][i] - mini) / (max - mini);
}
Max[i] = max;
Mini[i] = mini;
}
}
double *GetMax()
{
return this->Max;
}
double *GetMini()
{
return this->Mini;
}
int GetInputNum()
{
return this->InputNum;
}
int GetOutputNum()
{
return this->OutputNum;
}
int GetRows()
{
return DataMap.size();
}
vector<double*> GetDataMap()
{
return DataMap;
}
};
#endif // !DATASET_H