2013-06-10 6 views
5

私はPybrainで単純なニューラルネットワークを訓練しようとしています。トレーニングの後、nnが意図したとおりに動作していることを確認したいので、トレーニングに使用したのと同じデータを有効にします。 しかし、すべてのアクティベーションは同じ結果を出力します。ニューラルネットワークに関する基本的な考え方を誤解していますか、それとも設計上のものですか?Pybrainは任意の入力に対して同じ結果を出力します

隠しノードの数、隠しクラスの種類、バイアス、学習率、トレーニングエポックの数、無駄な勢いを変更しようとしました。

これは私のコードです...

from pybrain.tools.shortcuts import buildNetwork         
from pybrain.datasets import SupervisedDataSet         
from pybrain.supervised.trainers import BackpropTrainer 

net = buildNetwork(2, 3, 1) 
net.randomize()              

ds = SupervisedDataSet(2, 1)              
ds.addSample([77, 78], 77)               
ds.addSample([78, 76], 76)               
ds.addSample([76, 76], 75)               

trainer = BackpropTrainer(net, ds)             
for epoch in range(0, 1000):                 
    error = trainer.train()                  
    if error < 0.001:                   
     break              

print net.activate([77, 78])              
print net.activate([78, 76])              
print net.activate([76, 76]) 

は、これは、出力が起動入力が異なっていても同じである見ることができるように結果が...することができるものの一例です。

[ 75.99893007] 
[ 75.99893007] 
[ 75.99893007] 
+0

ノード間の初期シナプス強度をランダム化しましたか? – Renan

+0

とnet.randomize?私はすでにそれを試していたが、ちょうどその場合にそれを追加し、同じ問題が発生している。これを反映するコード例を更新しました。 –

+0

ANNが正しく機能するためには、そのシナプスが生成されたときにそのシナプスをランダム化する必要があります。彼らがすべて同じ強さを持っている場合、最後のレイヤーのすべてのニューロンに同じ出力が得られるので、本当に本当にそうだと思いました。 – Renan

答えて

2

誤り率が0.00001を打つまで、Iは0と1との間でデータを正規化し、また訓練することによって、これを解決しました。訓練に時間がかかりますが、今は正確な結果が得られます。

+0

最後に使用したコードを投稿してもよろしいですか? –

+1

コードが問題になります。 'error <0.001 'なら' error <0.00001'ならばビットを変更するだけです。また、すべての数値が0と1の間になるようにデータを事前に正規化しなければなりませんでした。 –

3

私は次のことを行うことによって(すなわち、各入力ごとに異なる答えを得る)の精度を向上させることができた、同様の問題がありました。これを行う

  1. 正規化/ニューラルネットワークへの入力と出力を標準化

関連する問題