Пример #1
0
        /// <summary>
        /// Train the network using specialized strategies.
        /// </summary>
        /// <returns>Whether the training was successful.</returns>
        public bool Train(IControler controler, Progress progress)
        {
            TrainingConfig config = controler.TrainingConfiguration;

            int patternCount = controler.PatternCount;
            int epochs = config.AutoTrainingEpochs.Value;
            int success = (int)(patternCount * config.AutoTrainingPercentSuccessful.Value);
            int howmany = controler.CountSuccessfulPatterns();

            if(howmany >= success)
                return true;

            int timeout = epochs;
            while(timeout-- >= 0)
            {
                if(progress != null)
                    progress((int)(100 * (epochs - (double)timeout) / epochs));

                for(int i=0;i<patternCount;i++)
                {
                    controler.SelectShuffledPattern(i);
                    controler.NeuralNetwork.TrainCurrentPattern(true, false);
                }

                howmany = controler.CountSuccessfulPatterns();
                if(howmany >= success)
                    return true;
            }

            // CLEAN UP:
            //controler.CalculateCurrentNetwork();
            return false;
        }
Пример #2
0
        /// <summary>
        /// Train the network using specialized strategies.
        /// </summary>
        /// <returns>Whether the training was successful.</returns>
        public bool Train(IControler controler, Progress progress)
        {
            TrainingConfig config = controler.TrainingConfiguration;
            BasicConfig basic = config.Basic;

            int patternCount = controler.PatternCount;
            int epochs = config.AutoTrainingEpochs.Value;
            int success = (int)(patternCount * config.AutoTrainingPercentSuccessful.Value);
            int howmany = controler.CountSuccessfulPatterns();

            double LRinitial = basic.LearningRate.Value;
            double LRstep = LRinitial * 0.7 / epochs;
            double LRcurrent = LRinitial;
            double magrin;

            if(howmany >= success)
                return true;

            int timeout = epochs;
            while(timeout-- >= 0)
            {
                basic.LearningRate.Value = LRcurrent;

                if(progress != null)
                    progress((int)(100 * (epochs - (double)timeout) / epochs));

                for(int i=0;i<patternCount;i++)
                {
                    controler.SelectShuffledPattern(i);
                    if(controler.CalculateCurrentNetwork(out magrin) != i)
                    {
                        controler.NeuralNetwork.TrainCurrentPattern(false, false);

                        howmany = controler.CountSuccessfulPatterns();
                        if(howmany >= success)
                        {
                            basic.LearningRate.Value = LRinitial;
                            return true;
                        }
                    }
                    else if(magrin < 0.5)
                    {
                        basic.LearningRate.Value = LRcurrent * 0.5;
                        controler.NeuralNetwork.TrainCurrentPattern(false, false);
                        basic.LearningRate.Value = LRcurrent;
                    }
                }

                LRcurrent -= LRstep;
            }

            // CLEAN UP:
            //controler.CalculateCurrentNetwork();
            basic.LearningRate.Value = LRinitial;
            return false;
        }
Пример #3
0
        /// <summary>
        /// Train the network using specialized strategies.
        /// </summary>
        /// <returns>Whether the training was successful.</returns>
        public bool Train(IControler controler, Progress progress)
        {
            TrainingConfig config = controler.TrainingConfiguration;
            BasicConfig    basic  = config.Basic;

            int patternCount = controler.PatternCount;
            int epochs       = config.AutoTrainingEpochs.Value;
            int success      = (int)(patternCount * config.AutoTrainingPercentSuccessful.Value);
            int howmany      = controler.CountSuccessfulPatterns();

            double LRinitial = basic.LearningRate.Value;
            double LRstep    = LRinitial * 0.7 / epochs;
            double LRcurrent = LRinitial;

            if (howmany >= success)
            {
                return(true);
            }

            int timeout = epochs;

            while (timeout-- >= 0)
            {
                basic.LearningRate.Value = LRcurrent;

                if (progress != null)
                {
                    progress((int)(100 * (epochs - (double)timeout) / epochs));
                }

                for (int i = 0; i < patternCount; i++)
                {
                    controler.SelectShuffledPattern(i);
                    controler.NeuralNetwork.TrainCurrentPattern(true, false);
                }

                howmany = controler.CountSuccessfulPatterns();
                if (howmany >= success)
                {
                    basic.LearningRate.Value = LRinitial;
                    return(true);
                }

                LRcurrent -= LRstep;
            }

            // CLEAN UP:
            //controler.CalculateCurrentNetwork();
            basic.LearningRate.Value = LRinitial;
            return(false);
        }
Пример #4
0
        /// <summary>
        /// Train the network using specialized strategies.
        /// </summary>
        /// <returns>Whether the training was successful.</returns>
        public bool Train(IControler controler, Progress progress)
        {
            TrainingConfig config = controler.TrainingConfiguration;

            int patternCount = controler.PatternCount;
            int epochs       = config.AutoTrainingEpochs.Value;
            int success      = (int)(patternCount * config.AutoTrainingPercentSuccessful.Value);
            int howmany      = controler.CountSuccessfulPatterns();

            if (howmany >= success)
            {
                return(true);
            }

            int timeout = epochs;

            while (timeout-- >= 0)
            {
                if (progress != null)
                {
                    progress((int)(100 * (epochs - (double)timeout) / epochs));
                }

                for (int i = 0; i < patternCount; i++)
                {
                    controler.SelectShuffledPattern(i);
                    if (controler.CalculateCurrentNetwork() != i)
                    {
                        controler.NeuralNetwork.TrainCurrentPattern(false, false);

                        howmany = controler.CountSuccessfulPatterns();
                        if (howmany >= success)
                        {
                            return(true);
                        }
                    }
                }
            }

            // CLEAN UP:
            //controler.CalculateCurrentNetwork();
            return(false);
        }