2016-12-07 4 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); 
      } 
     } 

I는 입력 된 데이터를 체크하며 입력 및 출력 모두 FR 올바른 이중 [] [] 형식이다. 또한 원래 앱을 확인했습니다. https://github.com/primaryobjects/deep-learning 완벽하게 작동하므로 단순히 입력 된 데이터를 변경하면 무엇이 많이 엉망인지 알기가 어려워요. 어떤 도움이라도 대단히 감사하겠습니다. 내가 얻는 오류는 다음과 같습니다.

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

추가 정보 : 인덱스가 배열 경계를 벗어났습니다.

답변

2

물론이 질문을 게시 한 직후에 네트워크에 출력의 수를 반영해야한다는 것을 깨달았습니다. 그 값은 10으로 설정되었습니다.이 환상적인 커뮤니티를 방해해서 죄송합니다.

+0

나는 지금 당장 똑같은 일을했다. 조사 결과를보고 해 주셔서 감사합니다. – Bagaboo

관련 문제