美文网首页
神经网络的反向传播程序实现及其解释说明

神经网络的反向传播程序实现及其解释说明

作者: peng_you | 来源:发表于2017-12-31 20:08 被阅读0次

说明:

1.实现语言为C++

2.关于神经网络反向传播的数学原理我会在后续的文章中更新

现在开始吧~

//Backprop.h

#ifndef Backprop_h

#define Backprop_h

class TLU//一个TLU单元

{

public:

TLU();

double F_output();//把该TLU对应的输出Fi打印出来

protected:

double input1,input2,input3,weight1,weight2,weight3,f,c;//input为输入的特征向量,weight为权值,f为输

c为学习效率

};

class FirstLevelTLU:public TLU//第一层TLU的类

{

public:

FirstLevelTLU(double x1,double x2,double x3,double w1,double w2,double w3);

void Modify_weight(double delta,double weight);//反向传播过程中用于梯度下降

private:

double Middle_delta;//对应梯度下降中的sigmoid函数的灵敏度ζi = f (i,j)(1 - f(i,j))∑ζ(j + 1)w(i,l)^(j+1)

};

class LastLevelTLU:public TLU//最后一层的TLU

{

public:

LastLevelTLU(double x1,double x2,double x3,double w1,double w2,double w3,double ep);

double Get_delta();//获取最后一层的灵敏度ζ(k)

void Modify_weight();//梯度下降的过程

double Get_w1();

double Get_w2();

private:

double d,Base_delta;//分别对应最后的输入F和基数ζ(k)

};

#endif

代码并不难理解,重点定义了三个类,分别指代普通TLU,第一层TLU,最后一层TLU,以及各自的输入,权值

接下来是定义部分backpro.cpp主要用于类中函数的定义:在此不做复制粘贴啦;

最后是main函数,如下:

#include#include#include#include "Backprop.h"

void main()

{

int start=1;

while(start){

FirstLevelTLU first1(1.0,0.0,1.0,2.0,-2.0,0.0);

FirstLevelTLU first2(1.0,0.0,1.0,1.0,3.0,-1.0);//先建立两个第一层的TLU

double f1=first1.F_output();

double f2=first2.F_output();

LastLevelTLU last(f1,f2,1.0,3.0,-2.0,-1.0,0.0);定义最后一层TLU

double fout=last.F_output();

last.Modify_weight();

double delta=last.Get_delta();

first1.Modify_weight(delta,last.Get_w1());

first2.Modify_weight(delta,last.Get_w2());//梯度下降过程,先最后一层,依次反向传播

cout<<endl;

start--;

}

return 0;

}

写在最后:

后续的过程我会继续补充反向传播用Python语言写的的更加复杂的实现,敬请期待~

相关文章

网友评论

      本文标题:神经网络的反向传播程序实现及其解释说明

      本文链接:https://www.haomeiwen.com/subject/plpagxtx.html