public void StartTesting()
        {
            var inputImage = ImageLoader.LoadImage(AppDomain.CurrentDomain.BaseDirectory + _fileName);
            Parallel.ForEach(_somParamses, new ParallelOptions { MaxDegreeOfParallelism = 4 }, (currentParams) =>
            {
                object clonedImage;
                try
                {
                    clonedImage = inputImage.Clone();
                }
                catch (InvalidOperationException ioe)
                {
                    const string winnerException = "000";
                    var formattedWinnerWithParamsException = string.Format(@"{0};{1};{2};{3};{4};{5};{6};{7}", winnerException,
                        currentParams.LearningRadius, currentParams.LearningRate, currentParams.Iterations,
                        currentParams.AngleMultiplier,
                        currentParams.TypeMultiplier, currentParams.CoordsMultiplier,
                        currentParams.HashCodeMultiplier);

                    _winnersList.TryAdd(formattedWinnerWithParamsException);
                    return;
                }
                
                var queryFeaturesSet = NetworkHelper.GetQueryFeaturesSet((Bitmap)clonedImage, currentParams);

                var resource = new MinutieResource();
                NetworkHelper networkHelper;
                if (MinutieResource.IsAlreadyTaughtAndSaved(currentParams))
                {
                    networkHelper = new NetworkHelper(resource.LoadTaughtPeople(currentParams), currentParams);
                    networkHelper.Teach(currentParams.Iterations, currentParams.Iterations - 1);
                }
                else
                {
                    networkHelper = new NetworkHelper(resource.GetAllFeatures(), currentParams);

                    var iter = 0;
                    while (!(iter >= currentParams.Iterations - 1))
                    {
                        networkHelper.Teach(currentParams.Iterations, iter);
                        iter++;
                    }

                    resource.SaveTaughtPeople(networkHelper._inputs, currentParams);

                    networkHelper.Teach(currentParams.Iterations, iter);
                }

                var winners = new List<int>();
                foreach (var queryFeature in queryFeaturesSet)
                {
                    networkHelper._som.Compute(queryFeature);
                    var w = networkHelper._som.GetWinner();
                    winners.Add(w);
                }

                var winner = resource.GetWinningPerson(winners);
                var formattedWinnerWithParams = string.Format(@"{0};{1};{2};{3};{4};{5};{6};{7}", winner,
                    currentParams.LearningRadius, currentParams.LearningRate, currentParams.Iterations,
                    currentParams.AngleMultiplier,
                    currentParams.TypeMultiplier, currentParams.CoordsMultiplier,
                    currentParams.HashCodeMultiplier);

                _winnersList.TryAdd(formattedWinnerWithParams);
            });

            SaveResults();
        }