2011-09-20 15 views
6

प्रशिक्षण में त्रुटि मैं अपने द्वारा एक सरल तंत्रिका नेटवर्क लिखने की कोशिश करता हूं।तंत्रिका नेटवर्क-बैक प्रचार, तंत्रिका नेटवर्क (बैक-प्रोपेगेशन) के बारे में कुछ लेख पढ़ने के बाद

Ive फैसला किया XOR तंत्रिका नेटवर्क, मेरी समस्या जब मैं नेटवर्क को प्रशिक्षित करने के कोशिश कर रहा हूँ है, अगर मैं केवल एक उदाहरण का उपयोग नेटवर्क को प्रशिक्षित करने देता है 1,1,0 कहना (के रूप में इनपुट 1, इनपुट 2, targetOutput)। 500 ट्रेनों के बाद + - नेटवर्क उत्तर 0.05। लेकिन यदि मैं अधिक कोशिश कर रहा हूं तो एक उदाहरण (दो अलग-अलग या सभी 4 संभावनाएं कहें) नेटवर्क का लक्ष्य आउटपुट के रूप में 0.5 होना है :( मैंने बिना किसी परिणाम के Google में मेरी गलतियों के लिए खोज की: S बीमार अधिक विवरण देने का प्रयास करें के रूप में मैं कर सकता हूँ मदद करने के लिए क्या गलत लगता है:। 2,2,1 और 2,4,1 (inputlayer, hiddenlayer, outputlayer) के साथ

-ive की कोशिश की नेटवर्क

हर तंत्रिका के लिए -इस उत्पादन से परिभाषित किया गया:

double input = 0.0; 
     for (int n = 0; n < layers[i].Count; n++) 
      input += layers[i][n].Output * weights[n]; 

जबकि 'i' वर्तमान परत है और वजन previ से सभी वजन हैं ous परत।

-इस आखिरी परत (उत्पादन परत) त्रुटि से परिभाषित किया गया है:

value*(1-value)*(targetvalue-value); 

जबकि 'मान' तंत्रिका उत्पादन और 'targetvalue' है वर्तमान तंत्रिका के लिए लक्ष्य उत्पादन होता है।

दूसरों neurals द्वारा परिभाषित के लिए

-इस त्रुटि:

foreach neural in the nextlayer 
      sum+=neural.value*currentneural.weights[neural]; 

नेटवर्क में भार निर्माण सभी इस सूत्र (तंत्रिका से वजन -> तंत्रिका 2) द्वारा अनुकूलित कर रहे हैं

weight+=LearnRate*neural.myvalue*neural2.error; 

जबकि LearnRate न्यूकोर लर्निंग रेट है (मेरे नेटवर्क पर 0.25 परिभाषित)। प्रत्येक तंत्रिका के लिए -इस biasweight द्वारा परिभाषित किया गया है:

bias+=LearnRate*neural.myerror*neural.Bias; 

पूर्वाग्रह = स्थिरांक मान है 1।

कि काफी सब मैं विस्तार कर सकते हैं, जैसा कि मैंने कहा उत्पादन उद्देश्य विभिन्न प्रशिक्षण उदाहरण :(

आप आपकी मदद^_^के लिए बहुत बहुत बहुत धन्यवाद के साथ 0.5 किया जाना है।

+2

क्या आपने अपना खुद का कार्यान्वयन लिखा है या क्या यह एक ढांचे का उपयोग कर रहा है? –

+0

यह वास्तव में मजाकिया है कि वह संरक्षित होने के बाद अपने प्रश्न का उत्तर नहीं दे सका :) – PythEch

उत्तर

1

यह है यह बताने में मुश्किल है कि त्रुटि को पूरा कोड देखने के बिना कहां है। एक चीज आपको ध्यान से जांचनी चाहिए कि प्रत्येक यूनिट के लिए स्थानीय त्रुटि ढाल की आपकी गणना उस परत पर सक्रियण फ़ंक्शन से मेल खाती है। सामान्य सूत्र के लिए यहां देखें : http://www.learnartificialneuralnetworks.com/backpropagation.html

उदाहरण के लिए, वें आउटपुट परत के लिए आप जो गणना करते हैं, वह मानता है कि आप लॉजिस्टिक सिग्मोइड सक्रियण फ़ंक्शन का उपयोग कर रहे हैं लेकिन आप उपरोक्त कोड में इसका उल्लेख नहीं करते हैं, ऐसा लगता है कि आप इसके बजाय एक रैखिक सक्रियण फ़ंक्शन का उपयोग कर रहे हैं।

सिद्धांत रूप में एक्सओआर सीखने के लिए 2-2-1 नेटवर्क पर्याप्त होना चाहिए हालांकि प्रशिक्षण कभी-कभी सही स्थिति में अभिसरण किए बिना स्थानीय न्यूनतम में फंस जाएगा। इसलिए एक प्रशिक्षण सत्र से अपने एल्गोरिदम के प्रदर्शन के बारे में निष्कर्ष निकालना महत्वपूर्ण नहीं है।ध्यान दें कि सरल बैकप्रोग धीमा होने वाला है, उदाहरण के लिए Rprop जैसे तेज़ और अधिक मजबूत समाधान हैं।

इस विषय पर किताबें हैं जो एक सरल नेटवर्क के लिए विस्तृत चरण-दर-चरण गणना प्रदान करती हैं (उदा। 'एआई .: नेगनेविट्स्की द्वारा बुद्धिमान प्रणालियों के लिए एक गाइड), इससे आपको अपने एल्गोरिदम को डीबग करने में मदद मिल सकती है। एक मौजूदा ढांचे का उपयोग करना एक विकल्प होगा (उदा। एनकॉग, एफएएनएन, मैटलैब) सटीक वही टोपोलॉजी और प्रारंभिक वजन सेट अप करें और अपने कार्यान्वयन के साथ गणना की तुलना करें।

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