public static void PrepareData(ref NetworkContainer container, ref CountNetworkTrainSettings settings)
        {
            if (settings.trainSettings.dataset != null)
            {
                throw new IncorrectActionOrderException("This action has already been completed.");
            }

            TestForErrors(ref settings);

            settings.trainSettings = new EncogTrainSettings
            {
                maxTrainingError = 0.01
            };

            int correctFileCount   = BaseTrainHelper.GetFileCount(settings.correctInputDirectory);
            int incorrectFileCount = BaseTrainHelper.GetFileCount(settings.incorrectInputDirectory);

            if (correctFileCount <= 0)
            {
                throw new FileNotFoundException("correctFiles not found.");
            }

            if (incorrectFileCount <= 0)
            {
                throw new FileNotFoundException("incorretFiles not found.");
            }

            settings.trainSettings.dataset = new double[correctFileCount + incorrectFileCount][];
            settings.trainSettings.answers = new double[correctFileCount + incorrectFileCount][];

            // Compute correct training data.
            ComputeData(
                settings.sampleCount,
                settings.correctInputDirectory,
                ref settings.trainSettings.dataset,
                ref settings.trainSettings.answers,
                1.0,
                0);

            // Compute incorrect training data.
            ComputeData(
                settings.sampleCount,
                settings.incorrectInputDirectory,
                ref settings.trainSettings.dataset,
                ref settings.trainSettings.answers,
                0.0,
                correctFileCount);
        }
예제 #2
0
        // Convert data from a CSV file to the actual input array for the network.
        private static void ComputeData(
            uint sampleCount,
            string inputDataDirectory,
            ref double[][] outputData,
            ref double[][] outputAnswers,
            double outputValue,
            int index)
        {
            DirectoryInfo inputDirectory = new DirectoryInfo(inputDataDirectory);

            foreach (var file in inputDirectory.GetFiles("*.csv"))
            {
                List <ICSVFilter> baseFilters = new List <ICSVFilter>(1);
                ICSVFilter        quaternions = new CSVEvenColumnFilter();
                baseFilters.Add(quaternions);

                // Setup loader.
                CSVLoaderSettings settings = new CSVLoaderSettings
                {
                    filePath = file.FullName,
                    trimUp   = 1,
                    trimDown = 0,
                    filters  = baseFilters
                };

                var data = CSVLoader <Vector3> .LoadData(ref settings);

                // Initialize image Transformer.
                ImageTransformerSettings imageSettings = new ImageTransformerSettings
                {
                    focusJoints = (LeapMotionJoint[])Enum.GetValues(typeof(LeapMotionJoint)),
                    samples     = data,
                    size        = sampleCount
                };
                ImageTransformer imageTransformer = new ImageTransformer();

                BaseTrainHelper.Project1DInto2D(
                    imageTransformer.GetNeuralInput(imageSettings),
                    ref outputData,
                    index);

                // Set answer to given value.
                outputAnswers[index] = new double[] { outputValue };
                index++;
            }
        }
        private static void ComputeData(
            uint networkInputSize,
            string inputDataDirectory,
            ref double[][] outputData,
            ref double[][] outputAnswers,
            double outputValue,
            int index)
        {
            DirectoryInfo inputDirectory = new DirectoryInfo(inputDataDirectory);

            foreach (var file in inputDirectory.GetFiles("*.csv"))
            {
                List <ICSVFilter> baseFilters = new List <ICSVFilter>(1);
                ICSVFilter        quaternions = new CSVEvenColumnFilter();
                baseFilters.Add(quaternions);

                // Setup loader.
                CSVLoaderSettings settings = new CSVLoaderSettings
                {
                    filePath = file.FullName,
                    trimUp   = 1,
                    trimDown = 0,
                    filters  = baseFilters
                };

                var data = CSVLoader <Vector3> .LoadData(ref settings);

                // Initialize CountBased Transformer settings.
                IntervalBasedTransformerSettings countSettings = new IntervalBasedTransformerSettings
                {
                    sampleList = data,
                    count      = networkInputSize
                };
                CountBasedTransformer countTransformer = new CountBasedTransformer();

                BaseTrainHelper.Project1DInto2D(
                    countTransformer.GetNeuralInput(countSettings),
                    ref outputData,
                    index);

                // Set answer to given value.
                outputAnswers[index] = new double[] { outputValue };
                index++;
            }
        }