public void Parse()
        {
            foreach (string filePath in Directory.GetFiles(path))
            {
                int    digit      = int.Parse(Path.GetFileName(filePath)[0].ToString());
                Bitmap bitmap     = new Bitmap(filePath);
                var    digitImage = new DigitImage();
                digitImage.Digit  = digit;
                digitImage.Width  = bitmap.Width;
                digitImage.Height = bitmap.Height;

                for (int y = 0; y < bitmap.Height; y++)
                {
                    for (int x = 0; x < bitmap.Width; x++)
                    {
                        Color color = bitmap.GetPixel(x, y);
                        digitImage.Pixels.Add(1 - color.GetBrightness());
                    }
                }

                DigitImages.Add(digitImage);
            }

            DigitImages.Shuffle();
            originalCount = DigitImages.Count;
        }
        public void GenerateDataSets(float validationData, float disturbanceProbability = 0.1f, float disturbanceMaxDifference = 1)
        {
            int testDataCount = ((int)(DigitImages.Count * validationData)).Clamp(0, DigitImages.Count - 1);
            var testImages    = DigitImages.GetRange(0, testDataCount);
            var trainImages   = DigitImages.GetRange(testDataCount, DigitImages.Count - testDataCount);

            TestData = testImages.ConvertAll(x => x.ConvertToTrainData());

            if (disturbanceProbability > 0)
            {
                AddDisturbance(trainImages, disturbanceProbability, disturbanceMaxDifference);
            }

            TrainData = trainImages.ConvertAll(x => x.ConvertToTrainData());
        }