2013-02-02 6 views
3

저는 Machine Learning에 익숙하지 않습니다. 이미지를 사용하여 객체를 분류하는 Java 응용 프로그램을 만들고 있습니다. 저는 40 개의 입력 뉴런과 n 개의 출력 뉴런을 가지고 있습니다 (훈련 데이터의 수에 따라 다릅니다). Encural을 Neural Network의 프레임 워크로 사용했습니다. 데이터를 성공적으로 교육 할 수 있었지만 네트워크를 테스트 할 때 제대로 작동하지 않는 것 같습니다. 개체를 올바르게 분류 할 수 없습니다.신경망 분류기 (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)); 
    } 

있습니까? 나는 일을 올바르게하고 있다면 누군가가 나를 인도 할 수 있기를 바랍니다.

+0

안녕하십니까, 교육 입력 대신 다른 예를 사용하여 네트워크를 테스트하려면 어떻게해야합니까? 고맙습니다 – user2886091

답변

3

당신이 훈련 한 똑같은 데이터를 인식하려고 할 때 당신이 그것을 인식 할 수 없다는 것을 의미합니까? 이것이 사실이라면 나는 당신이 훈련과 테스트를 위해 이미지를 인코딩하는 방식에 약간의 차이가 있다고 가정 할 것이다.

훈련 된 데이터와 다른 결과가 나타나는 경우 이는 다른 (일반적인) 문제입니다. 이는 교육 자료가 전체 문제 공간을 대표하지 않는다는 것을 의미합니다. 즉, 사용중인 새 데이터가 일치하지 않는 교육 데이터와 충분히 다릅니다.