6

मैं अकादमिक उद्देश्यों के लिए रिकर्सन के साथ बैकप्रोपैगेशन लागू करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि मैं कहीं गलत हो गया हूं। थोड़ी देर के लिए इसके साथ 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(); 
} 
+0

आपकी तंत्रिका-शुद्ध संरचना कैसे दिखती है? क्या कोई कारण है कि आप रिकर्सन का उपयोग कर रहे हैं? आउटपुट परत से शुरू करके और अपना रास्ता बैक अप करके आप अलग-अलग परतों पर फिर से प्रयास करने में सक्षम होना चाहिए। –

+0

विविन, इस अभ्यास का अकादमिक बिंदु बीपी के लिए रिकर्सन का उपयोग करना है। (नहीं, यह मेरा होमवर्क नहीं है, मैं बस इस बारे में अपना मन पाने की कोशिश कर रहा हूं :) इस बिंदु पर नेटवर्क बहुत आसान है: 2-2-1 3-परत नेटवर्क सिग्मोइड सक्रियण कार्यों के साथ, कि मैं ट्रेन करने की कोशिश कर रहा हूं [1, 0] -> [0.2] और [0, 1] -> [0.9] प्रशिक्षण नमूने के साथ। –

+0

मैंने देखा है विशिष्ट एल्गोरिदम इसे तुरंत करते हैं; मैं बस सोच रहा था कि आपने रिकर्सन क्यों चुना। :) –

उत्तर

2

इसे हल किया गया। स्पष्ट रूप से निम्न-आयामी नेटवर्क स्थानीय मिनीमा में फंसने की अधिक संभावना रखते हैं। यह जानना आसान है कि उच्च-आयामी नेटवर्क कम से कम किसी भी न्यूनतम, यहां तक ​​कि वैश्विक प्राप्त करने की संभावना कम हैं।

प्रत्येक पुनरावृत्ति के साथ बढ़ने वाली गति को कार्यान्वित करना मुझे न्यूनतम न्यूनतम के माध्यम से प्राप्त करता है। तो, वजन को यादृच्छिक (-0.5 से 0.5) मानों को फिर से शुरू करना और कई प्रशिक्षण सत्र आयोजित करना अंततः मुझे उन सभी के माध्यम से प्राप्त करता है।

मुझे यह घोषणा करने में प्रसन्नता हो रही है कि डेटा अब वर्गीकृत होने पर 100% मामलों में प्रशिक्षण के माध्यम से हो रहा है।

संबंधित मुद्दे