2011-09-20 18 views
6

ニューラルネットワーク(バックプロパゲーション)に関する記事を読んだ後、私は自分で簡単なニューラルネットワークを作成しようとしています。ニューラルネットワーク - バックプロパゲーション、トレーニングのエラー

IVEは私がネットワークを訓練するために一つだけの例を使用している場合、INPUT1、INPUT2、targetOutputとして(1,1,0を言うことができます 、私はネットワークを訓練しようとしていたときに私の問題がある 、XORニューラルネットワークを決めました)。 500列車後+ネットワーク回答0.05。 しかし、もっと多くの例を試してみると(2つの異なる、あるいはすべての4つの可能性を言う)、ネットワークは出力として0.5を目指しています:( 私は結果がない間違いをGoogleで検索しました:S 病気詳細何を間違って見つけやすくするため、私はできる限り:2,2,1と2,4,1(inputlayer、hiddenlayer、outputlayer)と

-iveしようとしたネットワークを

によって定義されたすべての神経のため-the出力:

double input = 0.0; 
     for (int n = 0; n < layers[i].Count; n++) 
      input += layers[i][n].Output * weights[n]; 

'i'は現在のレイヤーであり、ウェイトはすべてpreviからのウェイトですous層。

-the最後の層(出力層)エラーがにより定義される:「値が」ニューラル出力であり、「targetvalue」は現在の神経のための目標出力である

value*(1-value)*(targetvalue-value); 

neuralsにより定義他人のため

-theエラー:この式(ニューラルから重量 - >ニューラル2)により適合されたネットワークにおける重み-all

foreach neural in the nextlayer 
      sum+=neural.value*currentneural.weights[neural]; 

weight+=LearnRate*neural.myvalue*neural2.error; 

LearnRateはneworkの学習率です(私のネットワークで0.25に定義されています)。各神経用 -the biasweightはによって定義される:

bias+=LearnRate*neural.myerror*neural.Bias; 

バイアスする= 1 constの値です。

iが詳しく、 することができますほとんどすべてを私は出力が異なる訓練例と0.5であることを目指し:(

は^ _ ^あなたの助けのために非常に非常にありがとうございましたよう。

+2

独自の実装を作成しましたか、フレームワークを使用していますか? –

+0

それは保護された後、彼は彼の質問に答えることができなかったことは本当に面白いです:) – PythEch

答えて

1

ことがあります注意すべき点は、各ユニットのローカル誤差勾配の計算が、そのレイヤで使用しているアクティベーション関数と一致していることです。ここで一般的な式を見てください:http://www.learnartificialneuralnetworks.com/backpropagation.html

たとえば、th出力レイヤーの計算では、ロジスティックSigmoidアクティベーション関数を使用していると仮定していますが、上のコードではそれを言及していないので、代わりにリニアアクティベーション関数を使用しているようです。

原則として、トレーニングが正しい状態に収束することなく、極小値にトラップされることがありますが、2-2-1ネットワークではXORを学習するだけで十分です。したがって、1回のトレーニングセッションからアルゴリズムのパフォーマンスについて結論を出さないことが重要です。単純なバックプロックは遅くなることに注意してください。例えば、Rpropのようなより速くて堅牢なソリューションがあります。

単純なネットワーク(例:「A.I:Intelligent Systems to Guide to Intelligent Systems」、Negnevitsky)の詳細な段階的な計算を行う書籍があり、アルゴリズムのデバッグに役立ちます。代わりに、既存のフレームワーク(Encog、FANN、Matlabなど)を使用して、全く同じトポロジと初期加重を設定し、独自の実装と計算を比較することもできます。

関連する問題