首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANN:递归反向传播

ANN:递归反向传播
EN

Stack Overflow用户
提问于 2013-07-09 04:53:29
回答 1查看 1.1K关注 0票数 5

出于学术目的,我试图使用递归实现反向传播,但似乎我在某处出错了。已经对它进行了一段时间的修补,但要么根本没有学到任何东西,要么在第二种模式上没有学到东西。

请告诉我哪里出错了。(这是javascript语法)注意:在每个学习周期之前,错误都会被重置为null

代码语言:javascript
复制
this.backpropagate = function(oAnn, aTargetOutput, nLearningRate) {
    nLearningRate = nLearningRate || 1;

    var oNode, 
        n = 0;

    for (sNodeId in oAnn.getOutputGroup().getNodes()) {
        oNode = oAnn.getOutputGroup().getNodes()[sNodeId];
        oNode.setError(aTargetOutput[n] - oNode.getOutputValue());
        n ++;
    }

    for (sNodeId in oAnn.getInputGroup().getNodes()) {
        this.backpropagateNode(oAnn.getInputGroup().getNodes()[sNodeId], nLearningRate);
    }
}

this.backpropagateNode = function(oNode, nLearningRate) {
    var nError = oNode.getError(),
        oOutputNodes,
        oConn,
        nWeight,
        nOutputError,
        nDerivative = oNode.getOutputValue() * (1 - oNode.getOutputValue()), // Derivative for sigmoid activation funciton
        nInputValue = oNode.getInputValue(),
        n;

    if (nError === null /* Dont do the same node twice */ && oNode.hasOutputs()) {

        nDerivative = nDerivative || 0.000000000000001;
        nInputValue = nInputValue || 0.000000000000001;

        oOutputNodes = oNode.getOutputNodes();

        for (n=0; n<oOutputNodes.length; n++) {
            nOutputError = this.backpropagateNode(oOutputNodes[n], nLearningRate);

            oConn   = oAnn.getConnection(oNode, oOutputNodes[n]);
            nWeight = oConn.getWeight();
            oConn.setWeight(nWeight + nLearningRate * nOutputError * nDerivative * nInputValue);
            nError += nOutputError * nWeight;
        }
        oNode.setError(nError);
    }

    return oNode.getError();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 17:17:27

解决了它。显然,低维网络更容易陷入局部极小值。这很容易掌握,因为高维网络不太可能达到任何最小值,甚至是全局的。

实现随着每次迭代而增加的动量,可以让我通过大多数最小值。因此,将权重重新初始化为随机(-0.5到0.5)值,并进行多次训练,最终可以帮助我完成所有这些任务。

我很高兴地宣布,如果数据是可分类的,我的网络现在可以通过100%的训练。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17535800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档