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

📄 bp.h

📁 用C#写的一个神经网络结合遗传算法优化的程序
💻 H
字号:
#ifndef _BPALG_H_
#define _BPALG_H_

#include "include.h"


struct SBPNeuron//神经元
{
	int m_iNumInputs;//输入数目
	vector<double> m_vecWeight;//权值序列
	double m_dActivation;//神经元的输出
	double m_dError;//神经元的误差值
    //the previous timesteps weight update used to add momentum 前一步权值更新量 
    vector<double> m_vecPrevUpdate;
	SBPNeuron(int NumInputs);//神经元的构造(以输入数目为参数,进行权值初始化)
};

typedef vector<double> iovector;

struct SBPNeuronLayer//神经元层
{
	vector<SBPNeuron> m_vecNeurons;//神经元
	int m_iNumNeurons;//神经元数目
	SBPNeuronLayer(int NumNeurons, int NumInputsPerNeuron);//神经元层的构造(以该层神经元数目,每个神经元输入数目为参数)
};
class CBPNeuralNet//神经网络
{
private:
	int m_iNumInputs;//输入数目
	int m_iNumOutputs;//输出数目
	int m_iNumHiddenLayers;//隐层数目
	int m_iNeuronsPerHiddenLayer;//每个隐层的神经元数目

	double m_dLearningRate;//学习率
	double m_dErrorSum;//所有(输出值-期望值)的总和
	bool m_bTrained;//网络已训练为真
	int m_iNumEpochs;//时代计数器
	
	bool m_bSoftMax;//true if softmax output is required

	bool NetworkTrainingEpoch(vector<iovector> &SetIn, vector<iovector> &SetOut);
	void CreateNet();
	void InitNetwork();

	inline double Sigmoid(double activation, double response);//S型

public:
	CBPNeuralNet()
	{
	}
	~CBPNeuralNet()
	{
	}
	void PutWeights(vector<double> &weights);//置权值
	vector<SBPNeuronLayer> m_vecLayers;//神经元层
	CBPNeuralNet::CBPNeuralNet(int NumInputs,int NumOutputs,int HiddenNeurons,double LearningRate,bool softmax);//构造网络
	vector<double> Update(vector<double> inputs);
	bool Train(vector<iovector> &vecSetIn, vector<iovector> &vecSetOut);

	bool   Trained() const {return m_bTrained;  }
	double Error()   const {return m_dErrorSum; }
	int    Epoch()   const {return m_iNumEpochs;}

	void OutputWeight();
};

#endif

⌨️ 快捷键说明

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