2012-04-25 39 views
5

có một chức năng như: y = sin (x) Tôi muốn sử dụng mạng PyBrain để phù hợp với chức năng, dưới đây là những gì tôi đã làm: khi bạn chạy nó, bạn sẽ nhận được những gì tôi nhận được, dữ liệu thu được xa từ những gì nó nên được.làm cách nào để phù hợp với chức năng sử dụng mạng 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

Vậy câu hỏi của bạn là gì? Bạn đã thử các kiến ​​trúc mạng khác với ví dụ sâu 5 lớp này chưa? – schaul

Trả lời

8

Tôi cho rằng vấn đề của bạn là mạng này không phù hợp với chức năng. Tổng số nút mạng quá thấp để phù hợp với hàm sin (x) này: hàm quá phức tạp. Ngoài ra, để phù hợp với bất kỳ chức năng nào, không yêu cầu nhiều hơn một lớp ẩn.

Ví dụ: thử xóa hai lớp ẩn và tăng số lượng nút ẩn (đến, ví dụ: 20). Mã của bạn phù hợp với hàm chỉ sau

Các vấn đề liên quan