मैं तंत्रिका नेटवर्क का उपयोग करके इस Kaggle Problem को हल करने का प्रयास कर रहा हूं। मैं पाइब्रेन पायथन लाइब्रेरी का उपयोग कर रहा हूं।छिपी हुई परतों की संख्या, छिपी हुई परतों और युगों में इकाइयां जब तक तंत्रिका नेटवर्क प्रशिक्षण डेटा पर स्वीकार्य व्यवहार शुरू नहीं करता है
यह एक शास्त्रीय पर्यवेक्षित लर्निंग समस्या है। निम्नलिखित कोड में: 'डेटा' वैरिएबल numpy array (892 * 8) है। 7 फ़ील्ड मेरी विशेषताएं हैं और 1 फ़ील्ड मेरा आउटपुट वैल्यू है जो '0' या '1' हो सकता है।
from pybrain.datasets import ClassificationDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
dataset = ClassificationDataSet(7,1)
for i in data:
dataset.appendLinked(i[1:],i[0])
net = buildNetwork(7,9,7,1, bias = True,hiddenclass = SigmoidLayer, outclass = TanhLayer)
trainer = BackpropTrainer(net, learningrate = 0.04, momentum = 0.96, weightdecay = 0.02, verbose = True)
trainer.trainOnDataset(dataset, 8000)
trainer.testOnData(verbose = True)
मेरी तंत्रिका नेटवर्क, प्रशिक्षण जब मैं प्रशिक्षण डाटा पर यह परीक्षण कर रहा हूँ, इसके हमेशा सभी आदानों के लिए एक एकल उत्पादन देने के बाद। जैसा:
Testing on data:
out: [ 0.075]
correct: [ 1.000]
error: 0.42767858
out: [ 0.075]
correct: [ 0.000]
error: 0.00283875
out: [ 0.075]
correct: [ 1.000]
error: 0.42744569
out: [ 0.077]
correct: [ 1.000]
error: 0.42616996
out: [ 0.076]
correct: [ 0.000]
error: 0.00291185
out: [ 0.076]
correct: [ 1.000]
error: 0.42664586
out: [ 0.075]
correct: [ 1.000]
error: 0.42800026
out: [ 0.076]
correct: [ 1.000]
error: 0.42719380
out: [ 0.076]
correct: [ 0.000]
error: 0.00286796
out: [ 0.076]
correct: [ 0.000]
error: 0.00286642
out: [ 0.076]
correct: [ 1.000]
error: 0.42696969
out: [ 0.076]
correct: [ 0.000]
error: 0.00292401
out: [ 0.074]
correct: [ 0.000]
error: 0.00274975
out: [ 0.076]
correct: [ 0.000]
error: 0.00286129
मैं इतना के रूप में यह हल है, लेकिन फेरबदल learningRate, weightDecay, गति, छिपा इकाइयों की संख्या, छिपा परतों की संख्या, छिपा परतों के वर्ग, उत्पादन परतों के वर्ग की कोशिश की है हर मामले में यह एक ही देता है यदि इनपुट डेटा से इनपुट आता है तो प्रत्येक इनपुट के लिए आउटपुट।
मुझे लगता है कि मुझे इसे 8000 से अधिक बार चलाया जाना चाहिए क्योंकि जब मैं 'एक्सओआर' के लिए तंत्रिका नेटवर्क का निर्माण कर रहा था, तो इससे पहले नैनो पैमाने पर त्रुटियां देने से पहले कम से कम 700 पुनरावृत्तियों का सामना करना पड़ा। 'एक्सओआर' पर प्रशिक्षण डेटा का आकार केवल 4 था जबकि इस मामले में यह 892 है। इसलिए मैंने मूल डेटा के 10% पर 8000 पुनरावृत्तियों का प्रदर्शन किया (अब प्रशिक्षण डेटा का आकार 89 है), फिर भी यह प्रत्येक इनपुट के लिए एक ही आउटपुट दे रहा था प्रशिक्षण डेटा में। और चूंकि मैं इनपुट '0' या '1' में वर्गीकृत करना चाहता हूं, अगर मैं सॉफ़्टमैक्स होने के लिए आउटपुट परत की कक्षा का उपयोग कर रहा हूं, तो यह हमेशा आउटपुट के रूप में '1' दे रहा है।
कोई फर्क नहीं पड़ता कि कौन सी कॉन्फ़िगरेशन (छिपी हुई इकाइयों, आउटपुट परत की कक्षा, सीखने की दर, छिपी परत की कक्षा, गति) का वर्ग, क्या मैं 'एक्सओआर' में उपयोग कर रहा था, यह हर मामले में कनवर्जिंग शुरू हो गया था।
यह संभव है कि कुछ विन्यास है जो अंत में कम त्रुटि दर उत्पन्न करेगा। कम से कम कुछ विन्यास ताकि वह प्रशिक्षण डेटा में सभी इनपुट के लिए एक ही आउटपुट न दे।
मैंने इसे 80,000 पुनरावृत्ति के लिए चलाया (प्रशिक्षण डेटा आकार 89 है)। आउटपुट नमूना:
Testing on data:
out: [ 0.340]
correct: [ 0.000]
error: 0.05772102
out: [ 0.399]
correct: [ 0.000]
error: 0.07954010
out: [ 0.478]
correct: [ 1.000]
error: 0.13600274
out: [ 0.347]
correct: [ 0.000]
error: 0.06013008
out: [ 0.500]
correct: [ 0.000]
error: 0.12497886
out: [ 0.468]
correct: [ 1.000]
error: 0.14177601
out: [ 0.377]
correct: [ 0.000]
error: 0.07112816
out: [ 0.349]
correct: [ 0.000]
error: 0.06100758
out: [ 0.380]
correct: [ 1.000]
error: 0.19237095
out: [ 0.362]
correct: [ 0.000]
error: 0.06557341
out: [ 0.335]
correct: [ 0.000]
error: 0.05607577
out: [ 0.381]
correct: [ 0.000]
error: 0.07247926
out: [ 0.355]
correct: [ 1.000]
error: 0.20832669
out: [ 0.382]
correct: [ 1.000]
error: 0.19116165
out: [ 0.440]
correct: [ 0.000]
error: 0.09663233
out: [ 0.336]
correct: [ 0.000]
error: 0.05632861
औसत त्रुटि: 0,112558819082
('अधिकतम त्रुटि:', .21803000849096299, 'माध्य त्रुटि:', 0,096632332865968451)
यह सीमा के भीतर सभी outputs दे रही है (0.33, 0.5) ।
रिपोर्ट की गई त्रुटि मेल क्यों नहीं है | बाहर-सही | इसके अलावा, क्या आपने 8000 से अधिक पुनरावृत्तियों के लिए प्रशिक्षण की कोशिश की है? आपने कोशिश की छुपी नोड्स की सबसे ज्यादा संख्या क्या है? – Junuxx
मैंने प्रत्येक में 11 नोड्स के साथ 2 छिपी हुई परतों की कोशिश की है। यह 8000 पुनरावृत्तियों तक काम नहीं कर रहा था। अभी मैं 9 और 7 नोड्स के साथ 2 छिपी हुई परतों का उपयोग कर रहा हूं और 80,000 पुनरावृत्ति चला रहा हूं, यह लगभग 3 घंटों तक चल रहा है, परिणाम पूरा होने के बाद रिपोर्ट की रिपोर्ट करेगा, हालांकि कुल त्रुटि को देखते हुए, मुझे वास्तव में नहीं लगता कि यह होगा इससे बेहतर नहीं हो सकता। मुझे खेद है, मुझे नहीं पता कि क्यों त्रुटि की त्रुटि मेल नहीं खा रही है। बाहर-सही | –
मैंने 80,000 पुनरावृत्ति के लिए इसे चलाने के परिणामों के साथ प्रश्न अद्यतन किया है। –