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

📄 bpnet.h

📁 神经网络异或算法(一个隐含层),可以自动修改偏量、输入值和迭代次数
💻 H
字号:
#include<math.h>
#include<stdlib.h>
#include<time.h>
#define BP_LEARNING (float)(0.5)


class CBPNet
{
public:
	CBPNet();
	float Train(float,float,float,float,float);
	float Run(float,float,float,float);
private:
	float m_fWeight[4][2];   //两个神经元
	float Sigmoid(float);
};

CBPNet::CBPNet()//构造函数
{
	
	srand((unsigned)(time(NULL)));
	
	for(int i=0; i<4; i++)
	{
		for(int j=0; j<2; j++)
		{
			m_fWeight[i][j]=(float)(rand())/(32767/2)-1;//变为float型,初始权值
		}
	}
}

//训练
float CBPNet::Train(float i1,float i2 ,float d,float deviator1,float deviator2)
{
	float net1,net2,i3,i4;

	//计算隐含层的神经元值
	 net1=deviator1*m_fWeight[0][0]+i1*m_fWeight[1][0]+i2*m_fWeight[2][0];
	

	 //使用S函数;
	 i3=Sigmoid(net1);//隐含层的输出
	 

	 //计算输出层的值
	 net2=deviator2*m_fWeight[0][1]+i1*m_fWeight[1][1]+i2*m_fWeight[2][1]+i3*m_fWeight[3][1];


	 i4=Sigmoid(net2);


	 //计算误差,反向传播
	 float daltas[5];
	 //输出层的误差
	  daltas[4]=(d-i4)*i4*(1-i4)*i1;
	  daltas[3]=(d-i4)*i4*(1-i4)*i3;
	  daltas[2]=(d-i4)*i4*(1-i4)*i2;
	 
	  //隐藏层的误差
	  daltas[1]=i1*(1-i3)*i3*(d-i4)*m_fWeight[3][1]*i4*(1-i4);
	  daltas[0]=i2*(1-i3)*i3*(d-i4)*m_fWeight[3][1]*i4*(1-i4);
	  

	 //调整权值  BP_LEARNING
	  m_fWeight[3][1]+=BP_LEARNING*daltas[3];
	  m_fWeight[2][1]+=BP_LEARNING*daltas[2];
	  m_fWeight[2][0]+=BP_LEARNING*daltas[0];
	  m_fWeight[1][1]+=BP_LEARNING*daltas[4];
	  m_fWeight[1][0]+=BP_LEARNING*daltas[1];
	 
	 return i4;
}

//S函数


float CBPNet::Sigmoid(float num)
{
	return (float)(1/(1+exp(-num)));
}

//运行网络
float CBPNet::Run(float i1,float i2,float deviator1,float deviator2)
{
	float net1,net2,i3,i4;

	net1=deviator1*m_fWeight[0][0]+i1*m_fWeight[1][0]+i2*m_fWeight[2][0];
	i3=Sigmoid(net1);
    net2=deviator2*m_fWeight[0][1]+i1*m_fWeight[1][1]+i2*m_fWeight[2][1]+i3*m_fWeight[3][1];


     
	 i4=Sigmoid(net2);

	 
	 return i4;
}

⌨️ 快捷键说明

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