2013-05-20 94 views
2

我試圖識別圖像中的單個字符。 圖像數據已被清除,並有明顯的可見字母。Encog Hopfield網絡培訓

因此,當我將trainigset添加到hopfield網絡時,它會變得非常棒,因爲我只添加了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; 
    } 

結果訓練2個字符時:

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網絡中學習的最大模式數量稱爲其容量。容量是網絡中神經元總數的對數的函數,這意味着如果你想要更多的模式,你必須增加網絡中的神經元數量。 此外,複合斑點被稱爲混合狀態(或者有時是自旋玻璃狀態,具體取決於顯示的斑點類型)。當一個Hopfield網絡進入一個初始狀態時,它傾向於將自己驅動到當地最低能量。有時候這個最小值不是訓練的模式,而是一個混合了訓練中使用的幾種模式的狀態。通常,這些混合狀態具有比訓練模式更高的能量,但是如果起始狀態更接近混合狀態,它將傾向於將自己驅動到該局部最小值。有時在網絡中包含一些噪聲可以避免這些局部最小值,並使網絡達到最接近訓練狀態。您可以通過生成一個隨機數來包含噪音,並且只有在該數字高於某個閾值時才執行符號操作。

總之,向網絡添加神經元和噪聲可以幫助您解決問題。