2010-12-02 19 views
9

PyBrain एक अजगर लाइब्रेरी है जो कृत्रिम तंत्रिका नेटवर्क का उपयोग करने में आसान है (अन्य चीजों के साथ)।पाइब्रेन नेटवर्क को क्रमबद्ध/deserialized कैसे करें?

मैं पिकल या सीपीकल का उपयोग करके पाइब्रेन नेटवर्क को उचित रूप से क्रमबद्ध/deserialize करने में विफल रहता हूं।

from pybrain.datasets   import SupervisedDataSet 
from pybrain.tools.shortcuts  import buildNetwork 
from pybrain.supervised.trainers import BackpropTrainer 
import cPickle as pickle 
import numpy as np 

#generate some data 
np.random.seed(93939393) 
data = SupervisedDataSet(2, 1) 
for x in xrange(10): 
    y = x * 3 
    z = x + y + 0.2 * np.random.randn() 
    data.addSample((x, y), (z,)) 

#build a network and train it  

net1 = buildNetwork(data.indim, 2, data.outdim) 
trainer1 = BackpropTrainer(net1, dataset=data, verbose=True) 
for i in xrange(4): 
    trainer1.trainEpochs(1) 
    print '\tvalue after %d epochs: %.2f'%(i, net1.activate((1, 4))[0]) 

यह ऊपर कोड के उत्पादन में है:

Total error: 201.501998476 
    value after 0 epochs: 2.79 
Total error: 152.487616382 
    value after 1 epochs: 5.44 
Total error: 120.48092561 
    value after 2 epochs: 7.56 
Total error: 97.9884043452 
    value after 3 epochs: 8.41 

आप देख सकते हैं, नेटवर्क कुल त्रुटि कम हो जाती है के रूप में प्रशिक्षण की प्रगति

निम्नलिखित उदाहरण देखें। आप यह भी देख सकते हैं कि भविष्यवाणी की मूल्य 12.

की उम्मीद मूल्य दृष्टिकोण अब हम एक ऐसी ही व्यायाम करना होगा, लेकिन क्रमबद्धता/अक्रमांकन शामिल होंगे:

print 'creating net2' 
net2 = buildNetwork(data.indim, 2, data.outdim) 
trainer2 = BackpropTrainer(net2, dataset=data, verbose=True) 
trainer2.trainEpochs(1) 
print '\tvalue after %d epochs: %.2f'%(1, net2.activate((1, 4))[0]) 

#So far, so good. Let's test pickle 
pickle.dump(net2, open('testNetwork.dump', 'w')) 
net2 = pickle.load(open('testNetwork.dump')) 
trainer2 = BackpropTrainer(net2, dataset=data, verbose=True) 
print 'loaded net2 using pickle, continue training' 
for i in xrange(1, 4): 
     trainer2.trainEpochs(1) 
     print '\tvalue after %d epochs: %.2f'%(i, net2.activate((1, 4))[0]) 

यह इस ब्लॉक के उत्पादन में है:

creating net2 
Total error: 176.339378639 
    value after 1 epochs: 5.45 
loaded net2 using pickle, continue training 
Total error: 123.392181859 
    value after 1 epochs: 5.45 
Total error: 94.2867637623 
    value after 2 epochs: 5.45 
Total error: 78.076711114 
    value after 3 epochs: 5.45 

आप देख सकते हैं, ऐसा लगता है प्रशिक्षण नेटवर्क (सूचना कुल त्रुटि मान कम करने के लिए जारी है), लेकिन नेटवर्क के उत्पादन मूल्य एक मूल्य है कि पहले के लिए प्रासंगिक था पर जमा पर कुछ प्रभाव पड़ता है प्रशिक्षण पुनरावृत्ति।

क्या कोई कैशिंग तंत्र है जिसे मुझे इस ग़लत व्यवहार के कारण जागरूक होने की आवश्यकता है? क्या पाइब्रेन नेटवर्क को क्रमबद्ध/deserialize करने के बेहतर तरीके हैं?

प्रासंगिक संस्करण संख्या:

  • अजगर 2.6.5 (r265: 79,096, मार्च 19, 2010, 21:48:26) [एमएससी v.1500 32 बिट (इंटेल)]
  • Numpy 1.5। 1
  • cPickle 1,71
  • pybrain 0,3

पी एस मैं परियोजना की साइट पर a bug report बनाया है और दोनों एसओ और updatedj

+0

क्या आप सुनिश्चित हैं कि आपको 'net2' को पुनः लोड करने के बाद 'ट्रेनर 2 = बैकप्रॉपट्रेनर (नेट 2, डेटासेट = डेटा, वर्बोज़ = ट्रू)' नहीं करना चाहिए? –

+0

@ सेठ जॉनसन बेशक, मैं करता हूं, लेकिन ऐसा करने से समस्या हल नहीं होती है। असल में, मेरे टेस्ट कोड में उस पंक्ति को शामिल किया गया था, लेकिन मैंने यहां चिपकाते समय गलती से इसे प्रतिबद्ध किया। अब तय –

उत्तर

11

कारण

तंत्र है कि इस व्यवहार का कारण बनता है बग ट्रैकर रखेंगे PyBrain में मानकों (.params) और डेरिवेटिव (.derivs) की हैंडलिंग है मॉड्यूल: वास्तव में, सभी नेटवर्क पैरामीटर एक सरणी में संग्रहीत होते हैं, लेकिन व्यक्तिगत Module या Connection ऑब्जेक्ट्स के पास "अपने स्वयं के" .params तक पहुंच है, हालांकि, कुल सरणी के टुकड़े पर केवल एक दृश्य है। यह स्थानीय और नेटवर्क-व्यापी दोनों लिखने और समान डेटा-संरचना पर रीड-आउट दोनों की अनुमति देता है।

स्पष्ट रूप से यह टुकड़ा-दृश्य लिंक पिकलिंग-अनपिक्लिंग द्वारा खो जाता है।

समाधान

सम्मिलित

net2.sorted = False 
net2.sortModules() 

फ़ाइल (जो इस साझा करने का पुनर्निर्माण करने वाला) से लोड करने के बाद, और यह काम करना चाहिए।

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

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