2016-04-20 10 views
0

私のネットワーク:33 * 61(2013)入力ノード。隠された1層の2000ノード。 45(45文字用)出力ノード。Encogが間違ったトレーニングデータを計算/分類します

BasicNetwork basicNetwork = EncogUtility.simpleFeedForward(trainSet.getInputSize(), 2000, 0, trainSet.getIdealSize(), false); 

ビルトレーニングセットコード(それがループ内で実行される):

NormalizedField c = new NormalizedField(NormalizationAction.Normalize,"color", 255,0,1,0); 
     BufferedImage image = ImageIO.read(file); 
     BasicMLData data = new BasicMLData(width*height); 
     for(int i = 0;i<width;i++){ 
      for(int j = 0;j<height;j++){ 
       Color color = new Color(image.getRGB(i,j)); 
       double value = c.normalize(color.getBlue()); 
       data.add(i*height+j,value); 
      } 
     } 
     final MLData ideal = new BasicMLData(charList.length()); 
     for (int i = 0; i < charList.length(); i++) { 
      if (i == charList.indexOf(e)) { 
       ideal.setData(i, 1); 
      } else { 
       ideal.setData(i, 0); 
      } 
     } 

     training.add(data,ideal); 

トレーニングコード:

int i = 0; 
final ResilientPropagation rp = new ResilientPropagation(network,trainSet); 
     do { 
      rp.iteration(); 
      i++; 
      System.out.println("Error rate: " + rp.getError()); 
      if(i > 10){ 
       i = 0; 
       EncogDirectoryPersistence.saveObject(new File("myneural.eg"),network); 
      } 
     } while (rp.getError() >= 0.01) ; 

私は(各charの300枚の写真と45文字のための訓練を受けています画像はモノクロでr/b/g値は同じです)、エラーレートは〜0.02です。 しかし、トランケーションが完了しても、トレーニングデータであっても計算/分類ができません。 私のテストコード:

BufferedImage image = ImageIO.read(file); 
int width = image.getWidth(); 
int height = image.getHeight(); 
System.out.println("Width: " + width + " Height: " + height); 
BasicMLData data = new BasicMLData(width*height); 
NormalizedField c = new NormalizedField(NormalizationAction.Normalize,"color", 255,0,1,0); 
for(int i = 0;i<width;i++){ 
    for(int j = 0;j<height;j++){ 
     Color color = new Color(image.getRGB(i,j)); 
     double value = c.normalize(color.getBlue()); 
     data.add(i*height+j,value); 
    } 
} 
MLData compute = basicNetwork.compute(data); 

しかし、私は分類しようとすると、右のcharはまだ非常に低い値を持っています。私は(トレーニングセットの)さまざまな文字でテストしましたが、Encogは常に間違った文字を分類します。これで

data.add(i*height+j,value); 

答えて

0

たぶん、あなたはこのライン交換することによって開始する必要があり

data.add(i+ (j*width),value); 
+0

をしかし、私はそれは同じだと思いますか? – Snoob

関連する問題