【问题标题】:Encog compute/classify wrong training dataEncog 计算/分类错误的训练数据
【发布时间】:2016-04-20 10:25:39
【问题描述】:

我的网络:33 * 61 (2013) 输入节点。 1 个隐藏层中有 2000 个节点。 45 (for 45 char) 输出节点。

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 总是分类错误的字符。

【问题讨论】:

    标签: java machine-learning neural-network ocr encog


    【解决方案1】:

    也许你应该从替换这一行开始:

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

    用这个:

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

    【讨论】:

    • 但我认为是一样的?
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2015-10-27
    • 2015-07-04
    • 2013-05-14
    • 2023-03-24
    • 2013-08-24
    • 2018-09-28
    • 2017-11-24
    相关资源
    最近更新 更多