2014-12-14 2 views
0

HyperNEAT 네트워크를 사용하여 시계열 예측에 Encog AI 프레임 워크를 사용하고 있습니다.Encog가있는 시계열 예측을위한 HyperNEAT 네트워크가 필요합니다

다음은 네트워크를 만드는 데 사용하는 간단한 코드입니다. 그것은 상자에서 찍은

   Substrate substrate = SubstrateFactory.factorSandwichSubstrate(columns*windowSize,days);      
       CalculateScore score = new TrainingSetScore(trainingSet); 
       NEATPopulation pop = new NEATPopulation(substrate, 500); 
       pop.setActivationCycles(4); 
       pop.reset(); 
       EvolutionaryAlgorithm train = NEATUtil.constructNEATTrainer(pop, score); 
       OriginalNEATSpeciation speciation = new OriginalNEATSpeciation(); 
       speciation.setCompatibilityThreshold(1); 
       train.setSpeciation(speciation = new OriginalNEATSpeciation()); 

       System.out.println("Is HyperNEAT "+pop.isHyperNEAT()); 
       // train the neural network 

       int epoch = 1; 

       do { 
        train.iteration(); 
        if(writeOnStdOut) 
         System.out.println("Epoch #" + epoch + " Error:" + train.getError()); 
        epoch++; 
        if(Math.abs(train.getError()-previousError)<0.000000001) iterationWithoutImprovement++; else iterationWithoutImprovement = 0; 
        previousError = train.getError(); 
        Date dtemp = new Date(); 
       } while(train.getError() > maximumAcceptedErrorTreshold && epoch < maxIterations && iterationWithoutImprovement < maxiter); 

       NEATGenome genome = (NEATGenome) pop.getBestGenome(); 
       HyperNEATCODEC codec = new HyperNEATCODEC(); 
       network2 = (NEATNetwork) codec.decode(pop, substrate, genome);  

https://github.com/encog/encog-java-examples/tree/master/src/main/java/org/encog/examples/neural/neat/boxes 열이 기능의 수이고 windowSize는 미래 가치 예측에 필요한 이전 일 수있다

exampel (내 예를 windowSize 1). 스레드를 처리하는 문제가있는 것 같다

Exception in thread "pool-2-thread-416" java.lang.ArrayIndexOutOfBoundsException at org.encog.util.EngineArray.arrayCopy(EngineArray.java:107) at org.encog.neural.neat.NEATNetwork.compute(NEATNetwork.java:194) at org.encog.util.error.CalculateRegressionError.calculateError(CalculateRegressionError.java:46) at org.encog.neural.networks.training.TrainingSetScore.calculateScore(TrainingSetScore.java:61) at org.encog.ml.ea.score.parallel.ParallelScoreTask.run(ParallelScoreTask.java:83) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

:

나는이 예외를 얻을. 누군가이 문제를 해결하는 데 도움을 줄 수 있습니까? 두 번째 질문은 Encog에서 Backpropagation을 사용하여 NEAT 네트워크를 어떻게 훈련시킬 수 있습니까?

답변

1

배열 예외가 발생하면 예외입니다. 저는 그 라인을 보았습니다. 그 원인을 일으킬 수있는 유일한 것은 당신이 입력 뉴런을 가지고있는 것보다 더 많은 요소를 가진 입력 벡터를 보내고 있다는 것입니다. 나는 데이터가 궁극적으로 끝나는 것처럼 동일한 입력 차원이되도록 신경망을 정의하는지 확인합니다.

backpropagation 및 NEAT/HyperNEAT는 이러한 네트워크가 어떻게 교육되도록 설계되지 않았습니다. 적어도 Kenneth Stanley 구현은 작동하지 않습니다. 그것은 모두 유전자 교육입니다. NEAT 네트워크를 백 드롭으로 미세 조정할 수있는 방법이 있지만 시도하지 않았습니다.

+0

보통, I이 '기판 기판 SubstrateFactory.factorSandwichSubstrate = (컬럼 * windowSize, 일)로 이전 코드를 수정했다. 일수는 예측할 미래 일 수입니다. – vincenzodentamaro

0

가 나는 마지막 매개 변수는 클래스이며이

Substrate substrate = SubstrateFactory.factorSandwichSubstrate((int)Math.sqrt(NDataSetFeatures),1); 

선언, 이것은 나를 위해 작동했다. `가 하지만 여전히 작동하지 같은 예외를 발생;