private void LoadSavedNetwork()
        {
            var fileDialog = new OpenFileDialog
            {
                InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
                Title            = "Load network from selected save file",
                Multiselect      = false,
                RestoreDirectory = true,
                DefaultExt       = SavedNetworkFileExtension,
                AddExtension     = true,
                Filter           = $"Deep network file (*.{SavedNetworkFileExtension})|*.{SavedNetworkFileExtension}",
            };

            if (fileDialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            var fileName = fileDialog.FileName;

            try
            {
                _classifierFacade = new ClassifierFacade(
                    savedModelPath:          fileName,
                    guiLogger:                    this);
                var loadedModel = _classifierFacade.GetCurrentModel();
                DataProviderConfiguration = loadedModel.DataProviderConfiguration;
                AvailableCategories       = new ObservableCollection <Category>(loadedModel.ClassifierConfiguration.Categories);

                LogWriteLine($"Successfully loaded saved network from file '{fileName}'.");

                ProgramState = ProgramState.ClassifierReady;
            }
            catch (Exception e)
            {
                const string errorMessage = "Problems with loading saved network.";

                LogWriteLine($"{errorMessage} Error: {e.Message}");
                NLogLogger.Error(e, errorMessage);
            }
        }
        private async void StartTraining()
        {
            if (IsCategoriesSelectionInvalid())
            {
                LogWriteLine("You cannot start a training until at least 2 categories are selected.");
                return;
            }

            ProgramState = ProgramState.TrainingInProgress;

            var learningFacade = new LearningFacade(DataProviderConfiguration, GlobalTrainerConfiguration, SkipPhaseRequest, this);
            var categories     = GetSelectedCategories();

            var trainingParameters = new TrainingParameters
            {
                Training1Parameters = Training1Parameters,
                Training2Parameters = Training2Parameters,
                SelectedCategories  = categories.ToList(),
            };

            try
            {
                _cts = new CancellationTokenSource();
                _classifierFacade = await learningFacade.RunTrainingForSelectedCategories(trainingParameters, _cts.Token);

                ProgramState = ProgramState.ClassifierReady;
            }
            catch (Exception e)
            {
                const string errorMessage = "Problems during training.";

                LogWriteLine($"{errorMessage} Error: {e.Message}");
                NLogLogger.Error(e, errorMessage);

                ReturnToInitialWithSaving();
            }
        }