private void LoadNetworkButton_Click(object sender, RoutedEventArgs e) { try { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = ".nn"; ofd.Filter = "Neural Network definition files (.nn)|*.nn"; if (ofd.ShowDialog().GetValueOrDefault()) { loadedNetwork = new DeepNeuralNetwork(ofd.FileName); string layerString = string.Empty; foreach (int ls in loadedNetwork.GetLayerCounts()) { layerString += ls.ToString() + " "; } model.LoadedNNName = System.IO.Path.GetFileName(ofd.FileName) + " ( " + layerString + ")"; } } catch { MessageBox.Show("Error loading file."); } }
private async void StartButton_Click(object sender, RoutedEventArgs e) { if (model.TrainingActive) { MessageBox.Show("Training is already active."); return; } if (dataContainer == null) { MessageBox.Show("No data loaded."); return; } model.TrainingActive = true; //prepare network if (model.UseLoadedNN && loadedNetwork != null && loadedNetwork.GetLayerCounts()[0] == dataContainer.GetInputDataSize() && loadedNetwork.GetLayerCounts().Last() == dataContainer.GetOutputDataSize()) { neuralNetwork = loadedNetwork; } else { string[] tokens = model.HiddenLayers.Split(' ').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); List <int> hlList = new List <int>(); foreach (string token in tokens) { if (int.TryParse(token, out int hl)) { hlList.Add(hl); } } neuralNetwork = new DeepNeuralNetwork(dataContainer.GetInputDataSize(), dataContainer.GetOutputDataSize(), hlList.ToArray()); } //hyper-params int epochs = 0, batchSize = 0; double learningRate = 0; bool okToStart = true; okToStart = okToStart && int.TryParse(model.Epochs, out epochs); okToStart = okToStart && int.TryParse(model.BatchSize, out batchSize); okToStart = okToStart && double.TryParse(model.LearningRate, out learningRate); if (!okToStart) { return; } _epochs = epochs; string layerString = string.Empty; foreach (int ls in neuralNetwork.GetLayerCounts()) { layerString += ls.ToString() + " "; } model.ConsoleString += $"{layerString} - epochs = {epochs}, batch size = {batchSize}, learning rate = {learningRate}\n\n\n"; //clear temp csv file File.Delete(_tempCsvFileName); //train await Task.Run(() => Trainer.Sgd(neuralNetwork, dataContainer.TrainingSetAsLabeledDataArray(), batchSize, epochs, learningRate, UpdateTrainingStatus, dataContainer.TestingSetAsLabeledDataArray(), dataContainer.CheckIfOutputIsCorrect)); MessageBox.Show("Training done."); model.TrainingActive = false; }