private TrainStats ExecuteSingleIteration(ArchitectureTestConfig config)
        {
            var neuralNetworkBuilder = new NeuralNetworkBuilder()
                                       .SetActivationFunction(new SigmoidActivationFunction())
                                       .SetErrorFunction(new MeanSquaredErrorFunction(1))
                                       .SetNumberOfInputNeurons(2)
                                       .SetNumberOfHiddenNeurons(config.NumberOfHiddenNeurons)
                                       .SetNumberOfOutputNeurons(1);

            if (config.EnableBias)
            {
                neuralNetworkBuilder.AddBiasConnections();
            }

            var network = neuralNetworkBuilder.Build();

            var trainer             = new Trainer(neuralNetwork: network, learningRate: 0.01, logger: new DummyLogger());
            var trainDataCollection = new[]
            {
                new TrainData(new double [] { 0, 0 }, new double [] { 1 }),
                new TrainData(new double [] { 1, 0 }, new double [] { 0 }),
                new TrainData(new double [] { 0, 1 }, new double [] { 0 }),
                new TrainData(new double [] { 1, 1 }, new double [] { 1 }),
            };
            var trainStats = trainer.Train(trainDataCollection, numberOfEpochs: _maxNumberOfEpochs, terminalEpochError: _terminalEpochError);

            return(trainStats);
        }
        private IEnumerable <TrainStats> TestConfiguration(ArchitectureTestConfig config)
        {
            var trainStatsCollection = new ConcurrentBag <TrainStats>();

            Parallel.For(0, _numberOfTests, x =>
            {
                trainStatsCollection.Add(ExecuteSingleIteration(config));
            });

            return(trainStatsCollection);
        }