0

네트워크의 총 오류가 100,000 회 이상 변경되지 않았습니다. 입력 값은 22이고 출력값은 단일 값입니다. 입력 배열은 [195] [22]이고 출력 배열은 [195] [1]이다.Encog Backpropagation 오류가 변경되지 않음

BasicNetwork network = new BasicNetwork(); 
    network.addLayer(new BasicLayer(null,true,22)); 
    network.addLayer(new BasicLayer(new ActivationSigmoid(),true,10)); 
    network.addLayer(new BasicLayer(new ActivationSigmoid(),false,1)); 
    network.getStructure().finalizeStructure(); 
    network.reset(); 


    MLDataSet training_data = new BasicMLDataSet(input, target_output); 
    final Backpropagation train = new Backpropagation(network, training_data); 

    int epoch = 1; 

    do { 
     train.iteration(); 

     System.out.println("Epoch #" + epoch + " Error:" + train.getError()); 

     epoch++; 
    } 

    while(train.getError() > 0.01); 
    { 
     train.finishTraining(); 
    } 

이 코드의 잘못된 점은 무엇입니까?

답변

0

네트워크를 분류하려는 데이터가 너무 작아서 검색 공간을 선형으로 분리 가능한 문제로 변환 할 수 없을 수도 있습니다. 따라서 더 많은 뉴런이나 레이어를 추가하십시오. 이것은 아마도 훈련하는 데 더 오래 걸릴 것입니다. 이미 선형 적으로 분리가 불가능하고 NN이 이것을 비효율적으로 해결할 수 없다면 말이다.

또한 NN이 오류 표면의 로컬 최소값에 빠지면 훈련 전략이 없습니다. encog 사용자 가이드 참조 https://s3.amazonaws.com/heatonresearch-books/free/Encog3Java-User.pdf pg 166에는 교육 전략 목록이 있습니다.

final int strategyCycles = 50; 
final double strategyError = 0.25; 
train.addStrategy(new ResetStrategy(strategyError,strategyCycles));