private void ReadWeights()
        {
            _handwrittenDigitRecogNn = new HandwrittenDigitRecognitionNn(new List <TrainingSample>(), NnInputs, NnHidden, NnOutputs, 0.002);
            var weightsFile  = new StreamReader("weights.txt");
            var currentLayer = _handwrittenDigitRecogNn.HiddenLayer;
            var weights      = new List <double>();
            var j            = 0;

            while (!weightsFile.EndOfStream)
            {
                var currentLine = weightsFile.ReadLine();

                // End of weights for current unit.
                if (currentLine == "*")
                {
                    currentLayer.Units[j].Weights = new List <double>(weights);
                    j++;
                    weights.Clear();
                    continue;
                }

                // End of layer.
                if (currentLine == "-")
                {
                    currentLayer = _handwrittenDigitRecogNn.OutPutLayer;
                    j            = 0;
                    weights.Clear();
                    continue;
                }

                weights.Add(double.Parse(currentLine));
            }

            weightsFile.Close();
        }
        private void TrainBtnClick(object sender, EventArgs e)
        {
            var trainingDataSet      = new List <TrainingSample>();
            var trainingDataSetFiles = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\Digits");

            foreach (var file in trainingDataSetFiles)
            {
                var name     = file.Remove(file.LastIndexOf(".")).Substring(file.LastIndexOf("\\") + 1);
                var @class   = int.Parse(name.Substring(0, 1));
                var classVec = new[] { 0.0, 0.0, 0.0 };
                classVec[@class - 1] = 1;
                var imgMatrix = GetImage(new Bitmap(file));
                var imgVector = imgMatrix.Cast <double>().Select(c => c).ToArray();
                trainingDataSet.Add(new TrainingSample(imgVector, @class, classVec));
            }

            _handwrittenDigitRecogNn = new HandwrittenDigitRecognitionNn(trainingDataSet, NnInputs, NnHidden, NnOutputs, 0.002);
            _handwrittenDigitRecogNn.Training();

            var fileWeights = new StreamWriter("weights.txt", false);

            foreach (var layer in _handwrittenDigitRecogNn.Layers)
            {
                foreach (var unit in layer.Units)
                {
                    foreach (var w in unit.Weights)
                    {
                        fileWeights.WriteLine(w);
                    }
                    fileWeights.WriteLine("*");
                }
                fileWeights.WriteLine("-");
            }

            fileWeights.Close();

            MessageBox.Show("Training Complete!", "Message");
        }