3

我是机器学习的新手,我正在开发一个使用图像对对象进行分类的 Java 应用程序。我有 40 个输入神经元和 n 个输出神经元(取决于训练数据的数量)。我使用 Encog 作为我的神经网络的框架。我能够成功地训练数据,但是当我测试网络时,它似乎并不能很好地工作。它无法正确分类对象。下面是训练部分:

BasicNetwork network = new BasicNetwork();
    network.addLayer(new BasicLayer(null,true,i));
    network.addLayer(new BasicLayer(new ActivationSigmoid(),true,h));
    network.addLayer(new BasicLayer(new ActivationSigmoid(),false,o));      
    network.getStructure().finalizeStructure();
    network.reset();


    // train the neural network
    final Backpropagation train = new Backpropagation(network, trainingSet, lr, 0.3);
    train.fixFlatSpot(false);

    w = new SwingWorker(){

        @Override
        protected Object doInBackground() throws Exception {            
            // learn the training set

            int epoch = 1;
            do {
                train.iteration();
                //System.out.println("Epoch #" + epoch + " Error:" + train.getError());
                epoch++;
            } while(train.getError() > me && !isStop);
            isStop = false;
        return null;
        }
    };
    w.execute();

和测试部分:

BasicNetwork network = (BasicNetwork) SerializeObject.load(new File("file/Weights.ser"));
    MLData input = new BasicMLData(inputCount);
    input.setData(in);
    MLData output = network.compute(input);
    for(int y = 0; y < output.size(); y++){
        System.out.println(output.getData(y));
    }

训练部分有问题吗?如果我以正确的方式做事,我确实希望有人可以指导我。

4

1 回答 1

3

你的意思是当你试图识别你训练的完全相同的数据时,你无法识别它?如果是这种情况,那么我会假设您对图像进行编码以进行测试与训练的方式存在一些差异。

如果您在与您训练的数据不同的数据上看到不好的结果,这是一个不同(且常见)的问题。这意味着训练数据可能不能代表整个问题空间。即,您使用的新数据与训练数据有很大不同,因此无法进行匹配。

于 2013-04-19T20:32:33.117 回答