读Joone源代码有感(3)

 

主程序的执行流程

1.  对各LayerSynapse的初始化

a)         初始化各LayerSynapseLearner (BasicLearner, BatchLearner, RpropLearner)

2.  循环多次向前和向后的过程

a)         stepForward

                        i.              Training Data中取出一个pattern(样本)作为输入

                      ii.              调用InputLayerforward方法(激化函数),在本例中是Y=beta*X

                    iii.              把结果输出到对应的OutputSynapse中,并调用forward方法(与权值矩阵相乘,储存在outs对象里)

                     iv.              outs对象里取出数据并调用HiddenLayerforward方法,在本例中是Y=1/1+eX

                       v.              同步骤3

                     vi.              outs对象里取出数据并调用OutputLayerforward方法,在本例中是Y=1/1+eX

                   vii.              把结果输出到对应的TeacherSynapse中,并调用forward方法(把与Desired Data里样本的差值储存在outs对象里)

b)        stepBackward

                        i.              TeacherSynapseouts对象里取出数据并放入gradientInps对象中,并调用OutputLayerbackward方法,本例中是gradientOuts=gradientInps*[out*(1-out)+a]

                      ii.              gradientOuts输出到对应的InputSynapse中,并调用backward方法

1.         与权值矩阵相乘,放入bouts对象里,作为输出

2.         修改权值矩阵

a)         aDelta=defaultDelta+momentum*delta[i][j]

注:1)defaultDelta=learningRate*gradientWeight 2)gradientWeight=gradientOuts*inps

b)        delta[i][j]=aDelta

c)         value[i][j]=value[i][j]+delta[i][j]

                    iii.              对于HiddenLayerInputLayer类似与过程1),2)

3.  对各LayerSynapse停止和清理

a)         同向前传播一次零样本,达到各LayerSynapse清理工作

你可能感兴趣的:(C++,c,工作,C#,J#)