Пример #1
0
        private LearningSet SplitOnTrainAndTest(InputsOutputsData inputOutputsData)
        {
            var allSamplesCount   = inputOutputsData.Count;
            var trainSamplesCount = GetTrainSampleCount(allSamplesCount);

            var rand         = new Random();
            var learningSet  = new LearningSet();
            var trainingData = learningSet.TrainingData;
            var testData     = learningSet.TestData;

            for (int i = 0, trainSamplesLeft = trainSamplesCount, samplesLeft = allSamplesCount;
                 i < allSamplesCount;
                 ++i, --samplesLeft)
            {
                bool shouldTakeNextTrainSample = rand.Next(1, samplesLeft) <= trainSamplesLeft;
                if (shouldTakeNextTrainSample)
                {
                    trainingData.AddData(inputOutputsData.Inputs[i], inputOutputsData.Outputs[i]);
                    --trainSamplesLeft;
                }
                else
                {
                    testData.AddData(inputOutputsData.Inputs[i], inputOutputsData.Outputs[i]);
                }
            }

            return(learningSet);
        }
Пример #2
0
        private LearningSet GetCategoryLearningSet(Category category, int numberOfCategories)
        {
            if (!category.Files.Any())
            {
                var errorInfo = $"No files found in '{category.Name}' category.";
                throw new InvalidOperationException(errorInfo);
            }

            var inputOutputsData           = new InputsOutputsData();
            var imagePreprocessingStrategy = _dataProviderconfiguration.ToImagePreprocessingStrategy();

            foreach (var file in category.Files)
            {
                using (var image = (Bitmap)Image.FromFile(file, true))
                    using (var processedImage = imagePreprocessingStrategy.Process(image))
                    {
                        var input = ConvertImage(processedImage);
                        inputOutputsData.Inputs.Add(input);

                        var output = new double[numberOfCategories];
                        output[category.Index] = 1;
                        inputOutputsData.Outputs.Add(output);
                    }
            }

            var splittedSets = SplitOnTrainAndTest(inputOutputsData);

            return(splittedSets);
        }
Пример #3
0
 public LearningSet()
 {
     TrainingData = new InputsOutputsData();
     TestData     = new InputsOutputsData();
 }