मैं अकादमिक उद्देश्यों के लिए रिकर्सन के साथ बैकप्रोपैगेशन लागू करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि मैं कहीं गलत हो गया हूं। थोड़ी देर के लिए इसके साथ tinkering रहा है, लेकिन या तो दूसरे पैटर्न पर कोई सीख नहीं है या कोई सीख नहीं है।एएनएन: रिकर्सिव बैकप्रोपैगेशन
कृपया मुझे बताएं कि मैं कहां गलत हो गया हूं। (यह जावास्क्रिप्ट वाक्यविन्यास है) नोट: प्रत्येक सीखने चक्र से पहले त्रुटियों को 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();
}
आपकी तंत्रिका-शुद्ध संरचना कैसे दिखती है? क्या कोई कारण है कि आप रिकर्सन का उपयोग कर रहे हैं? आउटपुट परत से शुरू करके और अपना रास्ता बैक अप करके आप अलग-अलग परतों पर फिर से प्रयास करने में सक्षम होना चाहिए। –
विविन, इस अभ्यास का अकादमिक बिंदु बीपी के लिए रिकर्सन का उपयोग करना है। (नहीं, यह मेरा होमवर्क नहीं है, मैं बस इस बारे में अपना मन पाने की कोशिश कर रहा हूं :) इस बिंदु पर नेटवर्क बहुत आसान है: 2-2-1 3-परत नेटवर्क सिग्मोइड सक्रियण कार्यों के साथ, कि मैं ट्रेन करने की कोशिश कर रहा हूं [1, 0] -> [0.2] और [0, 1] -> [0.9] प्रशिक्षण नमूने के साथ। –
मैंने देखा है विशिष्ट एल्गोरिदम इसे तुरंत करते हैं; मैं बस सोच रहा था कि आपने रिकर्सन क्यों चुना। :) –