Python 如何使用PyBrain网络拟合函数?

Python 如何使用PyBrain网络拟合函数?,python,pybrain,Python,Pybrain,有一个函数类似于: y=sin(x) 我想使用PyBrain网络来适应这些功能,以下是我所做的: 当你运行它的时候,你会得到我得到的,得到的数据远远不是它应该得到的 from pybrain.datasets import SupervisedDataSet from pybrain.tools.shortcuts import buildNetwork from pybrain.supervised.trainers import BackpropTrainer import pickle i

有一个函数类似于: 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()

我想你的问题是这个网络不适合这个功能。网络节点总数太少,无法正确适应此sin(x)函数:该函数太复杂。此外,为了适合任何功能,原则上不需要超过一个隐藏层


例如,尝试删除两个隐藏层,并增加隐藏节点的数量(例如,20个)。您的代码正好适合函数

那么您的问题是什么?除了这个5层的示例,您是否尝试过其他网络架构?