📄 bp.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 + -