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); }
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); }
public LearningSet() { TrainingData = new InputsOutputsData(); TestData = new InputsOutputsData(); }