bp.h

来自「用C#写的一个神经网络结合遗传算法优化的程序」· C头文件 代码 · 共 67 行

H
67
字号
#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 + =
减小字号Ctrl + -
显示快捷键?