2012-10-16 3 views
3

저는 컴퓨터 학습과 Encog에 처음으로 익숙하지만, Encog가 예제에서 일관된 결과를 제공하여 적어도 Encog에 대해 더 쉽게 배울 수있을 것으로 기대했을 것입니다. 나에게 Encoge는 실행될 때마다 다른 방향성 결과를 줄 것이다.Encog Neural Network는 항상 일관성없는 결과를 나타냅니다.

이유가 무엇인지 더 잘 이해할 수 있습니까? 아래는 사용되는 수정 된 샘플 코드입니다. 올바른

방향 : 올바른 10/25

방향 : 올바른 8/25

방향 : 6/25

... 그것은 신경 네트워크에 대해 꽤 흔한 일

public class MainPredict { 
    public static void main(String[] args) { 

     Co.println("--> Main Predict"); 

     final MarketLoader marketLoader = new YahooFinanceLoader(); 
     final MarketMLDataSet marketDataSet = new MarketMLDataSet(marketLoader, Config.INPUT_WINDOW, Config.PREDICT_WINDOW); 
     final MarketDataDescription marketDataDescription = new MarketDataDescription(Config.TICKER, MarketDataType.adjusted_close, true, true); 
     marketDataSet.addDescription(marketDataDescription); 

     Calendar end = new GregorianCalendar();// end today 
     Calendar begin = (Calendar) end.clone();// begin 30 days ago 
     begin.add(Calendar.DATE, -60); 
     end.add(Calendar.DATE, -60); 
     begin.add(Calendar.YEAR, -2); 

     marketDataSet.load(begin.getTime(), end.getTime()); 
     marketDataSet.generate(); 

     BasicNetwork basicNetwork = EncogUtility.simpleFeedForward(marketDataSet.getInputSize(), Config.HIDDEN1_COUNT, Config.HIDDEN2_COUNT, marketDataSet.getIdealSize(), true); 

     ResilientPropagation resilientPropagation = new ResilientPropagation(basicNetwork, marketDataSet); 
     resilientPropagation.setRPROPType(RPROPType.iRPROPp); 

//  EncogUtility.trainToError(resilientPropagation, 0.00008); 
     EncogUtility.trainConsole(basicNetwork, marketDataSet, 3); 

     System.out.println("Final Error: " + basicNetwork.calculateError(marketDataSet)); 

     MarketEvaluate.evaluate(basicNetwork); 

     Encog.getInstance().shutdown(); 
    } 
} 

답변

5

가중치는 무작위 값으로 초기화됩니다. 반복적 인 결과를 얻으려면 무작위 초기 가중치를 가진 네트워크의 특정 인스턴스를 저장 한 다음이를 다른 실행으로 시작점으로로드해야합니다.

이 경우 basicNetwork는 처음부터 새로 생성하지 않고 (나중에 XML로 직렬화 할 createPersistor()를 사용하여) 저장 한 다음 나중에 다시 설정하려는 경우마다 다시로드해야합니다.

시도해 볼 수있는 또 다른 테스트는 basicNetwork.clone()을 사용하고 그 둘 모두에 대한 실험을 실행하고 결과가 어떻게되는지 확인하는 것입니다.

링크 :

관련 문제