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
क्या आप सुनिश्चित हैं कि आपको 'net2' को पुनः लोड करने के बाद 'ट्रेनर 2 = बैकप्रॉपट्रेनर (नेट 2, डेटासेट = डेटा, वर्बोज़ = ट्रू)' नहीं करना चाहिए? –
@ सेठ जॉनसन बेशक, मैं करता हूं, लेकिन ऐसा करने से समस्या हल नहीं होती है। असल में, मेरे टेस्ट कोड में उस पंक्ति को शामिल किया गया था, लेकिन मैंने यहां चिपकाते समय गलती से इसे प्रतिबद्ध किया। अब तय –