我需要使用前馈网络解决一个回归问题,我一直在尝试使用PyBrain来完成。由于pybrain的参考文献中没有回归问题的示例,我试图将其分类示例适应为回归问题,但没有成功(分类示例可以在这里找到:http://pybrain.org/docs/tutorial/fnn.html)。以下是我的代码:
下面是运行回归的函数。train_data和train_values是训练特征向量及其期望输出,test_data和test_values是测试特征向量及其期望输出:
当我打印res时,所有的值都是0。我尝试使用buildNetwork函数作为构建网络的快捷方式,但它也没有起作用。我还尝试了不同类型的层和不同数量的隐藏层节点,但都没有成功。
有人知道我错在哪里吗?此外,一些pybrain回归示例会非常有帮助!我找不到任何相关信息。
谢谢。
这个函数将我的数据从numpy数组转换为pybrain的SupervisedDataset。我使用SupervisedDataset,因为根据pybrain的参考文献,当问题是回归时需要使用该数据集。参数是一个包含特征向量(data)和它们的期望输出(values)的数组:
def convertDataNeuralNetwork(data, values):
fulldata = SupervisedDataSet(data.shape[1], 1)
for d, v in zip(data, values):
fulldata.addSample(d, v)
return fulldata
下面是运行回归的函数。train_data和train_values是训练特征向量及其期望输出,test_data和test_values是测试特征向量及其期望输出:
regressionTrain = convertDataNeuralNetwork(train_data, train_values)
regressionTest = convertDataNeuralNetwork(test_data, test_values)
fnn = FeedForwardNetwork()
inLayer = LinearLayer(regressionTrain.indim)
hiddenLayer = LinearLayer(5)
outLayer = GaussianLayer(regressionTrain.outdim)
fnn.addInputModule(inLayer)
fnn.addModule(hiddenLayer)
fnn.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
fnn.addConnection(in_to_hidden)
fnn.addConnection(hidden_to_out)
fnn.sortModules()
trainer = BackpropTrainer(fnn, dataset=regressionTrain, momentum=0.1, verbose=True, weightdecay=0.01)
for i in range(10):
trainer.trainEpochs(5)
res = trainer.testOnClassData(dataset=regressionTest )
print res
当我打印res时,所有的值都是0。我尝试使用buildNetwork函数作为构建网络的快捷方式,但它也没有起作用。我还尝试了不同类型的层和不同数量的隐藏层节点,但都没有成功。
有人知道我错在哪里吗?此外,一些pybrain回归示例会非常有帮助!我找不到任何相关信息。
谢谢。
0..1
之类的激活函数。此外,我不确定线性隐藏层(如代码所示)的目的是什么,这通常可以通过权重吸收到下一层中。 - Andre Holzner