无法使用Neuroph框架训练神经网络

时间:2016-11-20 13:04:39

标签: java neural-network

我正在尝试训练神经网络来识别图像中的字母。我使用不同的字体生成了超过17000个带有字母的图像。图像大小为15x15像素。

为了训练神经网络,我使用15x15 = 225个字段的输入向量。当像素为白色时每个场具有0,而当像素为黑色时每个场具有1。输出向量具有36个字段,每个字段表示字母或数字,例如0是" a",1是" b",...,36是" 9&#34 ;.如果图像代表字母" a"然后向量是[1,0,0 .... 0]等。

我正在使用MultiLayerPerceptron进行反向传播来训练网络,但无论我让它训练多久,误差都不会小于0.5。我正在使用一个隐藏层。我尝试改变隐藏神经元的数量,但我仍然有这个问题。

 public void Train(List<InOut> trainset, String neuralname){

            DataSet set = new DataSet(225,36);
            Random r = new Random();
            int rand;
            while (!trainset.isEmpty() && trainset.size() > 1){
                rand = r.nextInt(trainset.size()-1);
                set.addRow(trainset.get(rand).inputs,trainset.get(rand).outputs);
                trainset.remove(rand);
            }

            // Load Neural Network 
            MultiLayerPerceptron neuralnet = (MultiLayerPerceptron) MultiLayerPerceptron.load(neuralname+".nnet");

            // enable batch if using MomentumBackpropagation  
            if( neuralnet.getLearningRule() instanceof MomentumBackpropagation )
                ((MomentumBackpropagation)neuralnet.getLearningRule()).setBatchMode(true);

            MomentumBackpropagation learningRule = (MomentumBackpropagation)neuralnet.getLearningRule();// Set learningRule
            learningRule.addListener(this);

            learningRule.setMaxError(0.4);

            neuralnet.learn(set);
            neuralnet.save(neuralname+".nnet");

        }


public class InOut{
    public double inputs[];
    public double outputs[];

    public InOut(double[] inputs, double[] outputs){
        this.inputs = inputs;
        this.outputs = outputs;
    }
}

0 个答案:

没有答案