예제 #1
0
 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.");
     }
 }
예제 #2
0
        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;
        }