2016-12-07 14 views
1

私はAccord.NETのさまざまな深い学習アルゴリズムを使いこなしています。私は嘘をついたスペクトルデータでこれを行うことにしました。 PCAはデータをAccordの統計ツールボックスを使用して10データ点に変換するように変換します。チュートリアルを手紙に従ってください:Accord.NETでBackPropagationを実行しているときにOutofRangeExceptionが発生するのはなぜですか?

// Setup the deep belief network and initialize with random weights. 
     DeepBeliefNetwork network = new DeepBeliefNetwork(transformedInputs.First().Length, 10, 10); 
     new GaussianWeights(network, 0.1).Randomize(); 
     network.UpdateVisibleWeights(); 

     // Setup the learning algorithm. 
     DeepBeliefNetworkLearning teacher = new DeepBeliefNetworkLearning(network) 
     { 
      Algorithm = (h, v, i) => new ContrastiveDivergenceLearning(h, v) 
      { 
       LearningRate = 0.1, 
       Momentum = 0.5, 
       Decay = 0.001, 
      } 
     }; 

     // Setup batches of input for learning. 
     int batchCount = Math.Max(1, transformedInputs.Length/100); 
     // Create mini-batches to speed learning. 
     int[] groups = Accord.Statistics.Tools.RandomGroups(transformedInputs.Length, batchCount); 
     double[][][] batches = transformedInputs.Subgroups(groups); 
     // Learning data for the specified layer. 
     double[][][] layerData; 

     // Unsupervised learning on each hidden layer, except for the output layer. 
     for (int layerIndex = 0; layerIndex < network.Machines.Count - 1; layerIndex++) 
     { 
      teacher.LayerIndex = layerIndex; 
      layerData = teacher.GetLayerInput(batches); 
      for (int i = 0; i < 200; i++) 
      { 
       double error = teacher.RunEpoch(layerData)/transformedInputs.Length; 
       if (i % 10 == 0) 
       { 
        Console.WriteLine(i + ", Error = " + error); 
       } 
      } 
     } 

     // Supervised learning on entire network, to provide output classification. 
     var teacher2 = new BackPropagationLearning(network) 
     { 
      LearningRate = 0.1, 
      Momentum = 0.5 
     }; 


     // Run supervised learning. 
     for (int i = 0; i < 500; i++) 
     { 
      double error = teacher2.RunEpoch(transformedInputs, output: outputs); 
      if (i % 10 == 0) 
      { 
       Console.WriteLine(i + ", Error = " + error); 
      } 
     } 

私は入力されたデータをチェックしました。入力と出力の両方が正しいdouble [] []フォーマットfrになっています。私も元のアプリをチェックした:https://github.com/primaryobjects/deep-learning それは完璧に機能していたので、単純に入力されたデータを変更することがそんなに面倒であるのを見て苦労している。どんな助けでも大歓迎です。私が得ているエラーは次のとおりです。

An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Accord.Neuro.dll 

追加情報:インデックスが配列の範囲外です。

答えて

2

もちろんこの質問を投稿してすぐに私のネットワークは出力の数を反映する必要があり、それは10に設定されていることに気付きました。この素晴らしいコミュニティを妨害して非常に残念です。

+0

私はまったく同じことをやった。ご報告いただきありがとうございます。 – Bagaboo

関連する問題