Potrzebuję rozwiązać problem regresji z siecią przesyłania danych i próbowałem użyć PyBrain, aby to zrobić. Ponieważ nie ma przykładów regresji na referencję pybraba, próbowałem zaadaptować jego przykład klasyfikacji do regresji, ale bez powodzenia (Przykład klasyfikacji można znaleźć tutaj: http://pybrain.org/docs/tutorial/fnn.html). Poniżej znajduje się mój kod:Regresja sieci neuronowych za pomocą pybrain
Ta pierwsza funkcja przekształca moje dane w postaci tablicy numpy na suprywję nadzorowaną pybrain. Używam SupervisedDataset, ponieważ zgodnie z referencją pybrain jest to zestaw danych do użycia, gdy problem jest regresji. Parametry są tablicą wektory cech (dane) i ich oczekiwany wynik (wartości)
def convertDataNeuralNetwork(data, values):
fulldata = SupervisedDataSet(data.shape[1], 1)
for d, v in zip(data, values):
fulldata.addSample(d, v)
return fulldata
Następnie jest uruchomienia funkcji regresji. train_data i train_values są wektory cech pociąg i ich oczekiwany wynik, test_data i test_values są wektory cech testy i ich oczekiwany wynik:
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
podczas drukowania res, wszystkich jego wartości 0. Starałem się używać funkcja buildNetwork jako skrót do budowania sieci, ale nie działała tak dobrze. Próbowałem także różnych rodzajów warstw i różnych liczb węzłów w ukrytej warstwie, bez powodzenia.
Czy ktoś ma pojęcie o tym, co robię źle? Również niektóre przykłady regresji pybranii naprawdę pomogłyby! Nie mogłem znaleźć, kiedy patrzyłem.
góry dzięki
Jeśli interesują Cię sieci neuronowe, możesz rozważyć dołączenie do witryny uczącej się maszyn: http://area51.stackexchange.com/proposals/41738/machine-learning – travisbartley
- pewnie chcesz, aby warstwa wyjściowa była liniowa dla regresja --- prawdopodobnie również chcesz użyć jednostek ukrytych sigmoidalnych/tanh –
ściśle mówiąc niekoniecznie liniowo, ale najczęściej nie jest to aktywacja, której wyjście jest ograniczone do zakresu jak "0..1". Ponadto, nie jestem pewien, jaki jest cel liniowej ukrytej warstwy (jak w kodzie wysłanym), to zwykle może zostać zaabsorbowane w wadze do następnej warstwy. –