Encog

5

ile bir ANN yetiştirmek için birden fazla eğitim yöntemi kullanın Genetik Algoritmalar, Parçacık Sürtünme Optimizasyonu ve Simüle Tavlama ile ileriye doğru yayılma eğitimi kullanmadan önce bir besleme iletme nöral ağı eğitiminin sonucu iyileştirdiğini bilmek isterim. genel eğitimi geliştirme olmalıdır eğitim algoritmaları dizisidir Gördüğünüz gibiEncog

    CalculateScore score = new TrainingSetScore(trainingSet); 
        StopTrainingStrategy stop = new StopTrainingStrategy(); 
        StopTrainingStrategy stopGA = new StopTrainingStrategy(); 
        StopTrainingStrategy stopSIM = new StopTrainingStrategy(); 
        StopTrainingStrategy stopPSO = new StopTrainingStrategy(); 

        Randomizer randomizer = new NguyenWidrowRandomizer(); 
        //Backpropagation train = new Backpropagation((BasicNetwork) network, trainingSet, 0.2, 0.1); 
        // LevenbergMarquardtTraining train = new LevenbergMarquardtTraining((BasicNetwork) network, trainingSet); 
        int population = 500; 
        MLTrain trainGA = new MLMethodGeneticAlgorithm(new MethodFactory(){ 
         @Override 
         public MLMethod factor() { 
          final BasicNetwork result = createNetwork(); 
          ((MLResettable)result).reset(); 
          return result; 
         }}, score,population); 


        Date dStart = new Date(); 

        int epochGA = 0; 
        trainGA.addStrategy(stopGA); 
        do{ 
         trainGA.iteration(); 
         if(writeOnStdOut) 
          System.out.println("Epoch GenetiC#" + epochGA + " Error:" + trainGA.getError()); 
         epochGA++;//0000001 
         previousError = trainGA.getError(); 
         Date dtemp = new Date(); 
         totsecs = ((double)(dtemp.getTime()-dStart.getTime())/1000); 
        } while(previousError > maximumAcceptedErrorTreshold && epochGA < (maxIterations/5) && !stopGA.shouldStop() && totsecs < (secs/3)); 

        NeuralPSO trainPSO = new NeuralPSO((BasicNetwork) network, randomizer, score, 100); 

        int epochPSO = 0; 
        trainPSO.addStrategy(stopPSO); 
        dStart = new Date(); 
        do{ 
         trainPSO.iteration(); 
         if(writeOnStdOut) 
          System.out.println("Epoch Particle Swarm #" + epochPSO + " Error:" + trainPSO.getError()); 
         epochPSO++;//0000001 
         previousError = trainPSO.getError(); 
         Date dtemp = new Date(); 
         totsecs = ((double)(dtemp.getTime()-dStart.getTime())/1000); 
        } while(previousError > maximumAcceptedErrorTreshold && epochPSO < (maxIterations/5) && !stopPSO.shouldStop() && totsecs < (secs/3)); 

        MLTrain trainSIM = new NeuralSimulatedAnnealing((MLEncodable) network, score, startTemperature, stopTemperature, cycles); 

        int epochSA = 0; 
        trainSIM.addStrategy(stopSIM); 
        dStart = new Date(); 
        do{ 
         trainSIM.iteration(); 
         if(writeOnStdOut) 
          System.out.println("Epoch Simulated Annealing #" + epochSA + " Error:" + trainSIM.getError()); 
         epochSA++;//0000001 
         previousError = trainSIM.getError(); 
         Date dtemp = new Date(); 
         totsecs = ((double)(dtemp.getTime()-dStart.getTime())/1000); 
        } while(previousError > maximumAcceptedErrorTreshold && epochSA < (maxIterations/5) && !stopSIM.shouldStop() && totsecs < (secs/3)); 




        previousError = 0; 
        BasicTraining train = getTraining(method,(BasicNetwork) network, trainingSet); 


        //train.addStrategy(new Greedy()); 
        //trainAlt.addStrategy(new Greedy()); 
        HybridStrategy strAnneal = new HybridStrategy(trainSIM); 

        train.addStrategy(strAnneal); 
        //train.addStrategy(strGenetic); 
        //train.addStrategy(strPSO); 

        train.addStrategy(stop); 
        // 
        // Backpropagation train = new Backpropagation((ContainsFlat) network, trainingSet, 0.7, 0.3); 
        dStart = new Date(); 

        int epoch = 1; 

        do { 
         train.iteration(); 
         if(writeOnStdOut) 
          System.out.println("Epoch #" + epoch + " Error:" + train.getError()); 
         epoch++;//0000001 
         if(Math.abs(train.getError()-previousError)<0.0000001) iterationWithoutImprovement++; else iterationWithoutImprovement = 0; 
         previousError = train.getError(); 

         Date dtemp = new Date(); 
         totsecs = ((double)(dtemp.getTime()-dStart.getTime())/1000); 
        } while(previousError > maximumAcceptedErrorTreshold && epoch < maxIterations && !stop.shouldStop() && totsecs < secs);//&& iterationWithoutImprovement < maxiter); 

: Burada

kullanıyorum kodudur.

Lütfen mantıklı olup olmadığını ve kodun doğru olup olmadığını bildirin. Çalışıyor gibi görünüyor ama emin olmak istiyorum çünkü bazen GA tarafından kaydedilen ilerlemenin PSO'dan sıfırlandığını görüyorum.

Teşekkürler

cevap

1

Mantıklı görünüyor, ancak işe yaramıyor.

RPROP'un varsayılan parametreleriyle, bu sıra muhtemelen çalışmaz. Bunun nedeni, önceki eğitiminizden sonra sinir ağının ağırlıklarının yerel bir optimumun yakınında olmasıdır. Yerel bir optimumluğa yakınlığı nedeniyle, ağırlıklara yalnızca KÜÇÜK değişiklikler, optimum değere yaklaşır (hata oranını düşürür). Varsayılan olarak RPROP, ağırlık matrisinde 0.1'lik bir başlangıç ​​Güncelleme değeri kullanır. Bu, bir ağ için bir optimuma çok yakın olan büyük bir değerdir. "Bu noktada bir Çin dükkanında boğa açıyorsunuz". İlk iterasyon, ağı optimumdan uzaklaştıracak ve esasen yeni bir küresel aramaya başlayacaktır.

Başlangıçta kalma değerinin düşürülmesi YARDIMCI OLMALIDIR. Ne kadar olduğuna emin değilim. Bir fikir edinmek için verilerinizle bir trenin ortalama RPROP ağırlık güncellemesi değerlerine bakmak isteyebilirsiniz. Ya da gerçekten küçük ayarlamaya çalışın ve yolunuza devam edin.