⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp_solve_xor.cpp

📁 用bp人工神经网络解决一个抑或非线性问题。
💻 CPP
字号:
/* ========================================== *
 * Filename:	BP_Solve_XOR.cpp              *
 * Description:								  *
 * 一个微型神经网络,使用BP来调整权值         *
 * 来解决异或问题                             *
 * ========================================== */


#include <iostream.h>
#include <time.h>
#include "backprop.h"


#define BPM_ITER 20000  // 训练神经网络时的迭代次数
#define BP_LEARNING (float)(0.3)   // 学习系数
#define BP_MOMENTUM (float)(0.3)   // 动量因子
#define BP_EO (float)(0.007)   //收敛时输出层误差的最大值
#define BP_EH (float)(0.007)   //收敛时隐含层误差的最大值

void main()
{
	BPNN *net;
	int i,j,seed,Iteration;
	double eo,eh;   // eo:每次训练后输出层误差;eh:每次训练后隐含层误差
    Iteration = 0;   //算法收敛时的迭代次数,不收敛时,Iteration = 0

/* 为了给神经网络的权值赋初值(-1~1间的随机数),首先设定随机数的种子 */
	seed=((unsigned)(time(NULL)));
	bpnn_initialize(seed);
	
/* 创建一个输入层有两个神经元,隐含层有两个神经元,输出层有一个神经元的BP神经网络 */
	net=bpnn_create(2,2,1);

/* 提供输入序列和期望得到的目标序列,用来训练BP网络的权值 */
	for(i=0;i<BPM_ITER;i++)
	{
		net->input_units[1]=0;
		net->input_units[2]=0;
		net->target[1]=0;
		bpnn_train(net,BP_LEARNING,BP_MOMENTUM,&eo,&eh);

		net->input_units[1]=0;
		net->input_units[2]=1;
		net->target[1]=1;
		bpnn_train(net,BP_LEARNING,BP_MOMENTUM,&eo,&eh);


		net->input_units[1]=1;
		net->input_units[2]=0;
		net->target[1]=1;
		bpnn_train(net,BP_LEARNING,BP_MOMENTUM,&eo,&eh);


		net->input_units[1]=1;
		net->input_units[2]=1;
		net->target[1]=0;
		bpnn_train(net,BP_LEARNING,BP_MOMENTUM,&eo,&eh);
		if((eo<BP_EO)&&(eh<BP_EH))
		{ 
			Iteration = i;
			break;
		}
	}


/* 显示训练后网络的输入层权值矩阵,隐含层权值矩阵,输出层和隐含层产生的误差 */
    cout<<"Weights Metrix and errors:"<<endl;
    for(i=1;i<=2;i++)
	{
		for(j=0;j<=2;j++)
			cout<<"WI("<<j<<","<<i<<")"<<net->input_weights[j][i]<<endl;
	}
	for(i=1;i<=1;i++)
	{
		for(j=0;j<=2;j++)
			cout<<"WO("<<j<<","<<i<<")"<<net->hidden_weights[j][i]<<endl;
	}
    cout<<"eo:"<<eo<<endl;
	cout<<"eh:"<<eh<<endl;
	
	cout<<endl;
	if (Iteration == 0)
	{
		cout<<"Net isn't convergent."<<endl;
	}
	else
	{
		cout<<"Number of iterations is : "<<Iteration<<endl;
	}
    cout<<endl;
	
/* 利用训练好的网络来对输入序列产生响应 */   
    cout<<"Testing..."<<endl;
	net->input_units[1]=0;
	net->input_units[2]=0;
	bpnn_feedforward(net);
	cout<<"0,0="<<net->output_units[1]<<endl;

	net->input_units[1]=0;
	net->input_units[2]=1;
	bpnn_feedforward(net);
	cout<<"0,1="<<net->output_units[1]<<endl;

	net->input_units[1]=1;
	net->input_units[2]=0;
	bpnn_feedforward(net);
	cout<<"1,0="<<net->output_units[1]<<endl;

	net->input_units[1]=1;
	net->input_units[2]=1;
	bpnn_feedforward(net);
	cout<<"1,1="<<net->output_units[1]<<endl;

    bpnn_free(net);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -