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

📄 bpnet.h

📁 用VC编写神经网络的程序
💻 H
字号:
#include "math.h"
#include<stdlib.h>
#include<time.h>
#define BP_LEARNING (float)(0.5)//学习系数
class CBPNet
{
public:
	CBPNet();
	~CBPNet();

	float Train(float,float,float);
	float Run(float,float);

private:
	float m_fWeights[3][3];//3个神经元
	float Sigmoid(float);//S型函数
};

CBPNet::CBPNet()
{
	srand((unsigned)(time(NULL)));
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
		{
			m_fWeights[i][j]=(float)(rand())/(32767/2)-1;
		}
	}
}
//训练网络
float CBPNet::Train(float i1,float i2,float d)
{
	//变量
	float net1,net2,i3,i4,out;
	//计算隐含层的神经元值
	net1=1*m_fWeights[0][2]+i3*m_fWeights[1][2]+i4*m_fWeights[2][2];
	out=Sigmoid(net1);
	//计算误差,反向传播
	float delta[3];
	deltas[2]=out*(1-out)*(d-out);
	deltas[1]=i4*(1-i4)*(m_fWeights[2][2]*deltas[2]);
	deltas[0]=i3*(1-i3)*(m_fWeights[1][2])*deltas[2]);
	//调整权值
	float v1=i1,v2=i2;
	for(int i=0;i<3;i++)
	{
		//如果有必要改变输出层的值
		if(i==2)
		{
			v1=i3;
			v2=i4;
		}
		m_fWeights[0][i]+=BP_LEARNING*1*deltas[i];
        m_fWeights[1][i]+=BP_LEARNING*v1*deltas[i];
		m_fWeights[2][i]+=BP_LEARNING*v2*deltas[i];
	}
    return out;
}
//S 函数
float CBPNet::Sigmoid(float num)
{
	return (float)(1/(1+exp(-num)));
}
//运行网络
float CBPNet::Run(float i1,float i2)
{
	float net1,net2,i3,i4;
	net1=1*m_fWeights[0][0]+i1*m_fWeights[1][0]+i2*m_fWeights[2][0];
	net2=1*m_fWeights[0][1]+i1*m_fWeights[1][1]+i2*m_fWeights[2][1];
	i3=Sigmoid(net1);
	i4=Sigmoid(net2);
	net1=1*m_fWeights[0][2]+i3*m_fWeights[1][2]+i4*m_fWeights[2][2];
	return Sigmoid(net1);
}

⌨️ 快捷键说明

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