gpt4 book ai didi

javascript - ANN : Recursive backpropagation

转载 作者:数据小太阳 更新时间:2023-10-29 05:33:41 24 4
gpt4 key购买 nike

出于学术目的,我正在尝试使用递归实现反向传播,但似乎我在某处出错了。已经修改它一段时间了,但要么根本没有学习到第二种模式,要么没有学习到第二种模式。

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

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();
}

最佳答案

解决了。显然,低维网络更有可能陷入局部最小值。知道高维网络不太可能达到任何最小值,甚至是全局最小值,这一点很容易理解。

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

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

关于javascript - ANN : Recursive backpropagation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com