0
我的網絡:33 * 61(2013)輸入節點。 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) ;
我已經訓練了45個字符用300張照片的每一個字符(圖像是單色的,因此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);
但是,當我嘗試分類,右邊焦炭仍然有非常低的值。我已經測試了不同的字符(在訓練集中),但是Encog總是將錯誤的字符分類。
data.add(i*height+j,value);
與此:
,但我認爲這是一樣的嗎? – Snoob