2012-04-25 11 views
5

एक समारोह है जैसे: y = sin (x) मैं फ़ंक्शन फिट करने के लिए पाइब्रेन नेटवर्क का उपयोग करना चाहता हूं, यहां मैंने जो किया है: जब आप इसे चलाते हैं तो आपको वह मिल जाएगा जो मुझे मिलता है, प्राप्त डेटा दूर है यह क्या होना चाहिए से।PyBrain नेटवर्क का उपयोग करके फ़ंक्शन को कैसे फ़िट करें?

from pybrain.datasets import SupervisedDataSet 
from pybrain.tools.shortcuts import buildNetwork 
from pybrain.supervised.trainers import BackpropTrainer 
import pickle 
import scipy as sp 
import numpy as np 
import pylab as pl 

x = np.linspace(0, 4*np.pi, 100) 
ds = SupervisedDataSet(1,1) 

for i in x: 
    ds.addSample(i,sin(i)) 
print ds 

n = buildNetwork(ds.indim,3,3,3,ds.outdim,recurrent=True) 
t = BackpropTrainer(n,learningrate=0.01,momentum=0.5,verbose=True) 
t.trainOnDataset(ds,1000) 
t.testOnData(verbose=True) 

fileObject = open('trained_net', 'w') 
pickle.dump(n, fileObject) 
fileObject.close() 

fileObject = open('trained_net','r') 
net = pickle.load(fileObject) 

y = [] 
for i in x: 
    y.append(net.activate(i)) 

pl.plot(x,y) 
pl.plot(x,np.sin(x)) 
pl.show() 
+0

तो आपका प्रश्न क्या है? क्या आपने इस 5-परत-गहरे उदाहरण की तुलना में अन्य नेटवर्क आर्किटेक्चर का प्रयास किया था? – schaul

उत्तर

8

मुझे लगता है कि आपकी समस्या यह है कि यह नेटवर्क फ़ंक्शन को अच्छी तरह फिट नहीं करता है। इस पाप (x) फ़ंक्शन को ठीक से फिट करने के लिए नेटवर्क नोड्स की कुल संख्या बहुत कम है: फ़ंक्शन बहुत जटिल है। इसके अलावा, किसी भी समारोह को फ़िट करने के लिए, सिद्धांत में एक से अधिक छिपी परत की आवश्यकता नहीं है।

उदाहरण के लिए, दो छिपी हुई परतों को हटाने का प्रयास करें, और छिपे नोड्स की संख्या में वृद्धि करें (कहें, कहें, 20)। आपका कोड फ़ंक्शन को ठीक करता है तो