5

私は何か間違ったことをしているのか、それとも結果が本当に悪いのか疑問に思っています。ドキュメントに示されている最も単純なNNの例を想定してみましょう。

>>>net = buildNetwork(2, 3, 1, bias=True)
>>> ds = SupervisedDataSet(2, 1)
>>> ds.addSample((0, 0), (0,))
>>> ds.addSample((0, 1), (1,))
>>> ds.addSample((1, 0), (1,))
>>> ds.addSample((1, 1), (0,))
>>> trainer = BackpropTrainer(net, ds)
>>> trainer.trainUntilConvergence()
>>> print net.activate((0,0))
>>> print net.activate((0, 1))
>>> print net.activate((1, 0))
>>> print net.activate((1, 1))

例えば

>>> print net.activate((1,0))
[ 0.37855891]
>>> print net.activate((1,1))
[ 0.6592548]

予想は0でした。明らかに丸めることができることはわかっていますが、それでも、このような単純な例では、ネットワークがはるかに正確になると思います。ここでは「動作中」と呼ぶことができますが、これは非常に使用できないため、重要な何かが欠落していると思われます...

トレーナーに設定verbose=Trueすると、かなり小さなエラーが表示される可能性があります(合計エラー:0.0532936260399など)

ネットワークのエラーは5%だと思いますが、その後のアクティブ化関数でどのようにオフにすることができますか?

私は明らかにもっと複雑なことにpybrainを使用していますが、同じ問題があります。ネットワークでエラーが0.09程度と表示されていても、テストサンプルの約50%が間違っています。

ヘルプplsはありますか?

4

1 に答える 1

6

同様の質問がここにあります。そこから、すべてのデータがトレーニングに使用されるわけではなく、一部のデータがクロス検証に使用されるため、このトレーニング関数はここでは適用できないようです。データ ポイントをトレーニング セットに複数回追加してみてください。

また、この例が機能するには運動量項が必要なようです。レイヤー数を 3 に設定したときにうまくいった別のトレーニング方法を使用して、pybrain で xor をトレーニングする例があります。これは 0.99 の運動量項を使用します。

質問に完全には答えていないのでコメントとして投稿しますが、コメントするのに十分なポイントがありません...

于 2012-10-30T09:48:40.747 に答える