2016-03-23 22 views
0

ニューラルネットワークを1つの隠れ層で作成しようとしました(データベクトルに4つの値があり、入力層に3つのニューロン、隠れ層に3つのニューロン、出力レベルに1つのニューロンがあるとしましょう) )。私は2つの既知の結果を持つ2つのベクトルのデータを持っています。ニューラルネットワークが学習していない

私は最初のデータセットを使ってネットワークを教えて、次に2番目のセットを適用します。重みは、バックプロパゲーション法を用いて補正される。重み補正後の最初のセットの値を予測しようとすると、2番目の結果に非常に近い結果が得られるという問題があります。したがって、ニューラルネットワークは最初のトレーニングを「忘れる」。

私のプログラムの完全なコードここでは、ここでhttps://gist.github.com/edtechd/7f19f0759bb808a31a3f

ある授業中および後に、ここでhttps://gist.github.com/edtechd/63aace5d88dee1ab6835

加重値であるNNのトレーニング機能である

public void Train(double[] data, double expectedResult) 
    { 
     double result = Predict(data); 
     double delta = Perceptron.ActivationFunction(expectedResult) - Perceptron.ActivationFunction(result); 
     double eta = 20; 

     // Calculate layer 2 deltas 
     for (int i = 0; i < size2; i++) 
     { 
      deltas2[i] = delta * weights3[i]; 
     } 

     // Calculate layer 1 deltas 
     for (int i = 0; i < size1; i++) 
     { 
      deltas1[i] = 0; 

      for(int j=0; j < size2; j++) { 
       deltas1[i] += deltas2[j] * weights2[j * size1 + i]; 
      } 
     } 

     // Correct layer 1 weights 
     for (int i = 0; i < data.Length; i++) 
     { 
      for (int j = 0; j < size1; j++) 
      { 
       weights1[j * data.Length + i] += eta * deltas1[j] * values1[j] * (1 - values1[j]) * data[i]; 
      } 
     } 

     // Correct layer 2 weights 
     for (int i = 0; i < size1; i++) 
     { 
      for (int j = 0; j < size2; j++) 
      { 
       weights2[j * size1 + i] += eta * deltas2[j] * values2[j] * (1 - values2[j]) * values1[i]; 
      } 
     } 

     double resultA = Perceptron.ActivationFunction(result); 
     for (int i = 0; i < size2; i++) 
     { 
      weights3[i] += eta * delta * resultA * (1 - resultA) * values2[i]; 
     } 

    } 

私が何かを逃したのですか?

答えて

1

私は問題を理解しました。

教授のステップでは、結果が期待通りになるまでネットワークに最初の例を繰り返し示していました。次に、2番目の例を示していました。

A A A A A B B B B B B 

ニューラルネットワークは、両方の例を繰り返して繰り返し表示すると、正しく収束して例を認識します。

A B A B A B A B A B A B 
関連する問題