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

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

作者: 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