コード例 #1
0
        /// <summary>
        /// Construct a trainer to train a supercluster using the sandpit's example data.
        /// </summary>
        /// <param name="supercluster">Supercluster to train.</param>
        /// <param name="clusterRate">Number of subcycles between clustering.</param>
        /// <param name="mergingRate">Number of subcylces between merging.</param>
        /// <param name="maxThreads">Max number of concurrent threads to spawn during training.</param>
        public ExampleTrainer(Supercluster supercluster, uint clusterRate, uint mergingRate, int maxThreads)
        {
            this.Supercluster = supercluster;
            this.maxThreads   = (maxThreads < 1)? 1 : maxThreads;

            this.Cycle = 0;

            this.clusterRate = clusterRate;
            this.mergingRate = mergingRate;

            // Load datasets.
            var testingDataset          = this.LoadDatasetFromCSV("data/eg-testing-set.csv");
            var positiveTrainingDataset = this.LoadDatasetFromCSV("data/eg-training-set-positive.csv");
            var negativeTrainingDataset = this.LoadDatasetFromCSV("data/eg-training-set-negative.csv");

            var trainingDataset = positiveTrainingDataset.Concat(negativeTrainingDataset).ToList();

            // Find max values for normalisation.
            var completeDataset = trainingDataset.Concat(testingDataset);

            this.maxAge            = completeDataset.Max(o => o.Age);
            this.maxSpendCategoryA = completeDataset.Max(o => o.SpendCategoryA);
            this.maxSpendCategoryB = completeDataset.Max(o => o.SpendCategoryA);

            // Normalise datasets.
            this.TestingDataset  = this.NormaliseDataset(testingDataset);
            this.TrainingDataset = this.NormaliseDataset(trainingDataset);

            this.BestTestingScore = double.MinValue;
            this.MaxTestingScore  = this.TestingDataset.Count;

            this.BestTrainingScore = double.MinValue;
            this.MaxTrainingScore  = this.TrainingDataset.Count;
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: lynchiem/CBANE
        static void Main(string[] args)
        {
            Console.WriteLine("CBANE SANDPIT");
            Console.WriteLine("-------------------------");
            Console.WriteLine("");

            var superclusterConfig = new SuperclusterConfig(5);
            var clusterConfig      = new ClusterConfig(50, 0.20, 0.05);
            var networkConfig      = new NetworkConfig(3, 2, 3, 12);

            networkConfig.InputActivation  = ActivationTypes.Passthrough;
            networkConfig.OutputActivation = ActivationTypes.Softmax;
            networkConfig.HiddenActivation = ActivationTypes.LeakyReLU;

            var supercluster = new Supercluster(superclusterConfig, clusterConfig, networkConfig);

            supercluster.GenerateRandomPopulation();

            Trainer = new ExampleTrainer(supercluster, 25, 50, 15);

            outputStatus = ProgramStatus.IDLE;

            var outputTask = Task.Run(() => ManageOutput());

            Task trainingTask = null;

            while (running)
            {
                var keyInfo = Console.ReadKey(true);

                if (outputStatus == ProgramStatus.IDLE && keyInfo.Key == ConsoleKey.T)
                {
                    outputStatus = ProgramStatus.TRAINING;
                    trainingTask = Task.Run(() => PerformTrainingRun());
                }
                else if (outputStatus == ProgramStatus.IDLE && keyInfo.Key == ConsoleKey.O)
                {
                    outputStatus = ProgramStatus.OUTPUT;

                    OutputBestWeights();

                    outputStatus = ProgramStatus.IDLE;
                }
                else if (outputStatus == ProgramStatus.TRAINING && keyInfo.Key == ConsoleKey.S)
                {
                    outputStatus = ProgramStatus.STOPPING;

                    Trainer.StopTraining();

                    if (trainingTask != null && !trainingTask.IsCompleted)
                    {
                        trainingTask.Wait();
                    }

                    outputStatus = ProgramStatus.IDLE;
                }
                else if (keyInfo.Key == ConsoleKey.X)
                {
                    outputStatus = ProgramStatus.EXITING;

                    Trainer.StopTraining();

                    if (trainingTask != null && !trainingTask.IsCompleted)
                    {
                        trainingTask.Wait();
                    }

                    running = false;
                    outputTask.Wait();
                }
            }
        }