2013-05-20 2 views
2

이미지의 한 문자를 인식하려고합니다. 이미지 데이터가 지워지고 명확한 별개 문자가 표시됩니다.Encog Hopfield 네트워크 교육

그래서 hopfield 네트워크에 trainigset을 추가하면 로그가 2로만 추가되므로 좋을 것입니다. 일단 내가 추가하면 훈련 된 패턴이 버무리고 흐리게 표시됩니다.

어떻게 예방할 수 있습니까? 이 개 문자를 훈련 할 때

public void trainNetwork() { 
     network.reset(); 
     System.out.println("Training hopfield network"); 
     long startTimeLong = System.nanoTime(); 
     for (double[] ds : trainingInput) { 
      network.addPattern(doubleArrayToBiPolarNeuralData(ds)); 
     } 
     long endTimeLong = System.nanoTime(); 
     double durationInSec = (double) ((endTimeLong - startTimeLong)/Math.pow(10, 9)); 
     System.out.println("Finished training network in: " + durationInSec); 
    } 

    private BiPolarNeuralData doubleArrayToBiPolarNeuralData(double[] data) { 
     BiPolarNeuralData patternData = new BiPolarNeuralData(neuroncount); 
     if (data.length != neuroncount) { 
      IndexOutOfBoundsException e = new IndexOutOfBoundsException("the size of the traingsinputs is different from the amount of input neurons"); 
      logger.error(e.getMessage(), e); 
      throw e; 
     } 
     patternData.setData(data); 
     return patternData; 
    } 

결과 :

네트워크를 훈련

Cycles until stable(max 100): 1, result= 
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
     OOOOOOOOOOO       ->   OOOOOOOOOOO      
    OOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOOOO      
    OOOOOOO OOOOOOOOO      ->  OOOOOOO OOOOOOOOO      
    OOOOO  OOOOOOO      ->  OOOOO  OOOOOOO      
    OOOOO  OOOOOOO      ->  OOOOO  OOOOOOO      
       OOOOOO      ->     OOOOOO      
      OOOOOOOOOO      ->    OOOOOOOOOO      
    OOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOOOO      
OOOOOOOOO OOOOOO      -> OOOOOOOOO OOOOOO      
OOOOOOO  OOOOOOO      -> OOOOOOO  OOOOOOO      
OOOOOO  OOOOOOO      -> OOOOOO  OOOOOOO      
OOOOOOO OOOOOOOO      -> OOOOOOO OOOOOOOO      
OOOOOOOOOOOOOOOOOOOO      -> OOOOOOOOOOOOOOOOOOOO     
OOOOOOOOOOOOOOOOOOOO      -> OOOOOOOOOOOOOOOOOOOO     
OOOOOOOOOOOOOOOOOOOO      -> OOOOOOOOOOOOOOOOOOOO     
    OOOOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOOOOO     
    OOOOOOOOO OOOOOOO      ->  OOOOOOOOO OOOOOOO     
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           

결과 모든 문자를 훈련 할 때 : 그것은 항상이 같은 복합 덩어리로 확인

Cycles until stable(max 100): 3, result= 
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
     OOOOOOOOOOO       ->  OOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOOOO      
    OOOOOOOOO OOOOOOOOO      ->  OOOOOOOOOOOOOOOO      
OOOOOOOO  OOOOOOO      ->  OOOOOO OOOOOO      
OOOOOOO  OOOOOOO      ->  OOOOOO  OOOOO      
OOOOOOO         ->  OOOOOO  OOOOO      
OOOOOOO         ->  OOOOOO  OOOOO      
OOOOOO         ->  OOOOOO OOOOOOO      
OOOOOO         ->  OOOOOO  OOOOO      
OOOOOOO         ->  OOOOOO  OOOOOO      
OOOOOOO         ->  OOOOOOO  OOOOOO      
OOOOOOO  OOOOOOO      ->  OOOOOOO  OOOOOO      
OOOOOOO  OOOOOOO      ->  OOOOOOO  OOOOOO      
OOOOOOOO OOOOOOOO      ->  OOOOOOO OOOOOOO      
    OOOOOOOOO OOOOOOOOO      ->  OOOOOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOOOO      ->  OOOOOOOOOOOOOOOO      
    OOOOOOOOOOOOOO       ->  OOOOOOOOOOOOO      
     OOOOOOOOOOO       ->  OOOOOOOOO O       
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           
              ->           

합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

허용되는 실수 수를 제공하면서 hopfield 네트워크에서 학습 할 수있는 최대 패턴 양을 용량이라고합니다. 용량은 그물에있는 총 뉴런 수의 로그의 함수입니다. 즉, 더 많은 패턴을 원한다면 네트워크의 뉴런 양을 늘려야합니다. 또한 복합 blob을 혼합 상태 (또는 때로는 blob 유형에 따라 스핀 유리 상태)라고합니다. 홉 필드 (Hopfield) 네트워크가 시작 상태가되면 로컬 에너지를 최소화하는 경향이 있습니다. 때로는 최소가 훈련 된 패턴이 아니라 훈련에 사용 된 여러 패턴이 혼합 된 상태입니다. 일반적으로, 이러한 혼합 상태는 훈련 된 패턴보다 높은 에너지를 가지지 만, 시작 상태가 혼합 상태에 가까울 경우, 그 자체가 그 지역 최소로 움직이는 경향이 있습니다. 때로는 네트워크에 약간의 노이즈가 포함되면 이러한 로컬 최소값을 피할 수 있고 네트워크를 가장 근사한 훈련 상태로 만들 수 있습니다. 난수를 생성하여 잡음을 포함시킬 수 있으며 해당 수가 특정 임계 값 이상인 경우에만 부호 연산을 수행합니다.

결론적으로 네트워크에 뉴런과 노이즈를 추가하면 문제를 해결하는 데 도움이 될 수 있습니다.

관련 문제