我是 PyBrain 的初学者(对 ANN 来说相当新),所以为了熟悉 PyBrain 的使用,我尝试过训练 sin 函数。我的输出没有什么意义 --- 对于每个数据点,我得到一个 0、-0 或某个固定实数的输出(在下面的示例中,我得到一个实数)。这向我表明我没有正确训练。
我一直在尝试通过 SupervisedDataSet(1,1) 创建具有一个输入和一个输出的数据集并使用 BackPropTrainer() 进行训练来进行训练。我已经广泛阅读了 PyBrain 文档,它相当稀疏,示例也不是很好。我的输入是(0,1000)范围内的整数,而我的输出/目标只是该整数乘以某个常数的正数(因此它的计算值在零和 2pi 之间)。代码如下:
def add_samples():
ds = SupervisedDataSet(1,1)
for j in range(0,1000):
ds.addSample(j,math.sin((j*math.pi)/500))
print ds
return ds
def FeedForward():
n= FeedForwardNetwork()
#construct input, hiddent, and output Layers
inLayer=LinearLayer(1)
hiddenLayer = SigmoidLayer(3)
outLayer=LinearLayer(1)
# add layers to the network
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
# make the connections between the layers
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
# explicitly adding the connections to the network
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
# some internal organization
n.sortModules()
print n
return n
def backprop():
n=FeedForward()
ds=add_samples()
trainer = BackpropTrainer(n, ds)
trainer.trainOnDataset(ds,100)
trainer.testOnData(verbose=True)
def main():
backprop()
if __name__ == '__main__':
main()
我的输出如下所示:
error: 0.00084029
out: [0.016 ]
correct: [-0.019]
error: 0.00060250
out: [0.016 ]
correct: [-0.013]
error: 0.00040415
out: [0.016 ]
correct: [-0.006]
error: 0.00024526
所有 1000 个输出评估为 0.016。有没有人有任何建议或可以指出一个很好的例子?我一直在转圈圈。我想我错过了一些微不足道的东西,或者我错过了 ANN 或机器学习的一些基本概念。如果我提供更多信息,请告诉我是否有帮助。谢谢!