9

フィードフォワードネットワークで回帰問題を解決する必要があり、PyBrain を使用してそれを実行しようとしています。pybrain のリファレンスには回帰の例がないため、代わりに回帰の分類例を適応させようとしましたが、成功しませんでした (分類例はここにあります: http://pybrain.org/docs/tutorial/fnn.html)。以下は私のコードです:

この最初の関数は、numpy 配列形式のデータを pybrain SupervisedDataset に変換します。pybrain のリファレンスによると、問題が回帰である場合に使用するデータセットであるため、SupervisedDataset を使用します。パラメーターは、特徴ベクトル (データ) とその期待される出力 (値) を含む配列です。

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 回帰の例が本当に役に立ちます! 私が見たときは何も見つかりませんでした。

前もって感謝します

4

4 に答える 4

5

pybrain.tools.neuralnets.NNregressionはツールです

オプションのオンライン進行状況プロットを使用して、一連のデータのターゲットを数値的に予測する方法を学習します。

したがって、回帰タスク用のニューラル ネットワークを構築するのに適したもののように思えます。

于 2013-08-29T16:28:23.637 に答える
0

Andre Holzner が説明したように、隠れ層は非線形であるべきです。Andre のコード例は素晴らしいですが、機能が多くてデータが少ない場合はうまく機能しません。この場合、隠れ層が大きいため、非常に適切な近似が得られますが、より複雑なデータを扱う場合、出力層の線形関数だけでは不十分です。フィーチャとターゲットを正規化して範囲 [0..1] にする必要があります。 .

于 2016-02-08T10:08:54.907 に答える