2012-04-25 1 views
5

다음과 같은 기능이 있습니다. y = sin (x) PyBrain 네트워크를 사용하여 기능에 맞게 사용하려면 여기를 클릭하십시오. 실행하면 얻을 수있는 데이터를 얻을 수 있습니다. 그것이 있어야하는 것에서.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

이 네트워크가 기능에 잘 맞지 않는다고 생각됩니다. 네트워크 노드의 총 수가 너무 작아이 sin (x) 함수에 제대로 맞지 않습니다. 함수가 너무 복잡합니다. 또한 모든 함수를 피팅하기 위해 원칙적으로 하나 이상의 숨겨진 레이어가 필요하지 않습니다.

예를 들어 두 개의 숨겨진 레이어를 제거하고 숨겨진 노드의 수를 늘리십시오 (예 : 20). 귀하의 코드는 함수를 잘 맞습니다.