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);
:
をしかし、私はそれは同じだと思いますか? – Snoob