// ignore how inaccurate the accuracy results could be if this is ran in parallel :^)
        private void TrainNetwork(Layer outputLayer, double[] inputs, List <double> accuracyResults, int threadCount, int currentThread)
        {
            var rand         = new Random();
            var output       = outputLayer.CloneWithSameWeightValueReferences();
            var momentum     = Momentum.GenerateMomentum(output, 0.9);
            var learningRate = 0.25;

            for (var i = 0; i < 10000; i++)
            {
                if (i % 100 == 0)
                {
                    var currentResults = new double[inputs.Length];
                    SetResults(inputs, output, currentResults);
                    accuracyResults.Add(AccuracyStatistics.CalculateKolmogorovStatistic(
                                            currentResults, inputs.Select(Calculation).ToArray()));
                }
                var trial = (rand.NextDouble() / 4) + ((double)currentThread / (double)threadCount);
                output.Backpropagate(new[] { trial }, new double[] { Calculation(trial) }, learningRate, momentum);
                ModifyLearningRate(ref learningRate);
            }
        }