Моя сеть: 33 * 61 (2013) входной узел. 2000 в 1 скрытом слое. 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 всегда классифицирует неправильный символ.
, но я думаю, что это то же самое? – Snoob