资源简介
BP神经网络用于两类图片识别分类
代码片段和文件信息
//#include
#include
#include
#include
#include
#include
//#include
#include
#include
#include “deal_image.h“
//using namespace std;
#define innode 25 //输入结点数 R
#define hidenode 10//隐含结点数 C
#define outnode 2 //输出结点数
#define trainsample 2000//BP训练样本数
#define testsample 200//BP训练样本数
double w[innode][hidenode];//隐含结点权值
double w1[hidenode][outnode];//输出结点权值
void save_weight();
void show_weight();
void read_weight();
void clear_weight();
class BpNet
{
public:
double p[trainsample][innode]; //输入的样本
double t[trainsample][outnode]; //样本要输出的
BpNet();
virtual ~BpNet();
void init();
void train(double p[trainsample][innode]double t[trainsample][outnode]);//Bp训练
double *recognize(double *p);//Bp识别
double rate_w; //权值学习率 (输入层-隐含层)
double rate_w1;//权值学习率 (隐含层-输出层)
double rate_b1;//隐含层阀值学习率
double rate_b2;//输出层阀值学习率
double e;//误差计算
double error;//允许的最大误差
double result[outnode];// Bp输出
};
BpNet::BpNet()
{
error=1.0;
e=0.0;
rate_w=0.15; //权值学习率 (输入层--隐含层)
rate_w1=0.15; //权值学习率 (隐含层--输出层)
}
BpNet::~BpNet()
{
}
/*********** 权值初始化 **************/
void winit(double m[]int n)
{
srand((unsigned)time(NULL)); //防止多次随机产生的结果一致的情况
for(int j=0;j {
m[j]=rand()%51/100.0-0.25; //生成[-0.250.25]的随机数
cout< // m[j]=0.1;
}
cout< }
//ofstream outfile;
ifstream infile;
ifstream infile_train;
ifstream infile_test;
/*********** 各权值和阈值的初始化 ************/
void BpNet::init()
{
srand((int)time(0)); //防止多次随机产生的结果一致的情况
cout<<“输入节点权值w:“;
winit((double*)w(innode)*(hidenode)); //权值初始化,个数为 输入层节点数 乘以 隐藏层节点数
cout<<“输出节点权值w1:“;
winit((double*)w1(hidenode)*outnode); //个数为 隐藏层节点数 乘以 输出层节点数
cout<
save_weight();
}
double X[trainsample][innode]; //训练样本
double Y[trainsample][outnode]; //预计结果
double Z[trainsample][innode+outnode]; // 训练样本+ 预计结果
/*************** 读取训练样本 ****************/
void read_trian()
{
int a=0;
infile_train.open(“feature_train_cross.txt“);
while (!infile_train.eof() && a!=trainsample)
{
string line;
getline(infile_trainline);
istringstream istr(line);
// cout< for(int j=0;j {
istr>>Z[a][j];
}
a++;
}
//cout<<“ZZZZZZZZZZZZZZZ“< for(int i=0;i {
for(int j=0;j {
// cout< }
// cout< }
//cout<<“XXXXXXXXXXXXXXXXXXX“< for(int i=0;i {
for(int j=0;j {
X[i][j]=Z[i][j];
// cout< }
// cout< }
// cout<<“YYYYYYYYYYYYYYYY“< for(int i=0;i {
for(int j=0;j {
Y[i][j]=Z[i][innode+j];
// cout< }
// cout< }
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11502 2016-05-21 20:55 BP\BP\BP.cpp
文件 4073 2016-05-20 02:30 BP\BP\BP.vcxproj
文件 1077 2016-05-20 02:30 BP\BP\BP.vcxproj.filters
文件 2732 2016-05-21 20:55 BP\BP\BP3weight.txt
文件 1799 2016-05-21 20:32 BP\BP\BP3weight111.txt
文件 11789 2016-05-19 17:03 BP\BP\BP_3.h
文件 6604 2016-05-20 15:13 BP\BP\deal_image.h
文件 71 2016-05-21 20:55 BP\BP\Debug\BP.lastbuildstate
文件 2395 2016-05-21 20:55 BP\BP\Debug\BP.log
文件 513821 2016-05-21 20:55 BP\BP\Debug\BP.obj
文件 1146 2016-05-21 20:55 BP\BP\Debug\cl.command.1.tlog
文件 10552 2016-05-21 20:55 BP\BP\Debug\CL.read.1.tlog
文件 328 2016-05-21 20:55 BP\BP\Debug\CL.write.1.tlog
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
文件 2 2016-05-21 20:55 BP\BP\Debug\li
............此处省略10161个文件信息
评论
共有 条评论