我需要解決前饋網絡的迴歸問題,我一直在嘗試使用PyBrain來做到這一點。由於沒有關於pybrain引用的迴歸示例,我嘗試將其作爲迴歸的分類示例來代替,但沒有成功(分類示例可在此處找到:http://pybrain.org/docs/tutorial/fnn.html)。以下是我的代碼:使用pybrain進行神經網絡迴歸
這第一個函數將我的數據以numpy數組形式轉換爲pybrain SupervisedDataset。我使用SupervisedDataset,因爲根據pybrain的參考,它是當問題是迴歸時使用的數據集。的參數與特徵矢量(數據)和它們的期望的輸出(值)的數組:
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
當我打印資源,所有它的值是0。我試着使用buildNetwork函數作爲構建網絡的捷徑,但它並沒有起作用。我也嘗試過隱藏層中不同類型的層和不同數量的節點,但沒有運氣。
有人知道我做錯了什麼嗎?此外,一些pybrain迴歸示例真的會有所幫助!當我看時,我找不到任何東西。
在此先感謝
如果您對神經網絡感興趣,您可以考慮加入機器學習網站:http://area51.stackexchange.com/proposals/41738/machine-learning – travisbartley
很確定您希望輸出層爲線性迴歸---你可能也想用嚴格來說不一定是線性的S/S隱藏單元 –
,但它最不是一個激活,它的輸出被限制在一個範圍內,如'0..1'。另外,我不確定線性隱藏層的目的是什麼(就像在代碼中),通常可以將其吸收到下一層的權重中。 –