/// <summary>
        /// Метод для получения нейронной сети из файла
        /// </summary>
        /// <param name="name">Название нейронной сети</param>
        public static void ReadFromFile(string name, EventHandler eventHandler)
        {
            string filename = FileNetwork.GetFile(name, FileNetwork.SAVE_FILE);
            string bin      = FileNetwork.ReadFromFile(filename);

            DictToNetwork(name, JsonConvert.DeserializeObject <Dictionary <string, object> >(bin), eventHandler);
        }
        /// <summary>
        /// Получение и вывод графика по accuracy во время тренировки нейронной сети
        /// </summary>
        private void WriteAccuracy()
        {
            string programPath, accuracyPath = "";

            while (true)
            {
                string result = Client.GetMetrics("accuracy");
                if (result.Contains(".zip"))
                {
                    programPath = result;
                    break;
                }
                if (result != "")
                {
                    accuracyPath = result;
                    accuracyPictureBox.ImageLocation = result;
                }
                Thread.Sleep(1000);
            }
            MessageBox.Show("Neural network training has ended", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            isEnd = true;

            // сохранение результатов
            string newPath = FileNetwork.Copy(Save.NNetwork.Name, programPath);

            if (newPath != "")
            {
                MessageBox.Show("Weights has been saved to " + FileNetwork.GetFullPath(newPath), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            newPath = FileNetwork.Copy(Save.NNetwork.Name, accuracyPath);
            if (newPath != "")
            {
                MessageBox.Show("Accuracy graph has been saved to " + FileNetwork.GetFullPath(newPath), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        /// <summary>
        /// Метод для сохранения нейронной сети в файл
        /// </summary>
        public static void WriteToFile()
        {
            string filename = FileNetwork.GetFile(Save.NNetwork.Name, FileNetwork.SAVE_FILE, true);
            string bin      = JsonConvert.SerializeObject(NetworkToDict());

            FileNetwork.WriteToFile(filename, bin);
        }
        /// <summary>
        /// Получение и вывод графика по loss во время тренировки нейронной сети
        /// </summary>
        private void WriteLoss()
        {
            string lossPath = "";

            while (true)
            {
                string result = Client.GetMetrics("loss");
                if (result.Contains(".zip"))
                {
                    break;
                }
                if (result != "")
                {
                    lossPath = result;
                    lossPictureBox.ImageLocation = result;
                }
                Thread.Sleep(1000);
            }

            // сохранение результатов
            while (!isEnd)
            {
                Thread.Sleep(500);
            }
            string newPath = FileNetwork.Copy(Save.NNetwork.Name, lossPath);

            if (newPath != "")
            {
                MessageBox.Show("Loss graph has been saved to " + FileNetwork.GetFullPath(newPath), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
 /// <summary>
 /// Метод генерации диалога для сохранения нейронной сети
 /// </summary>
 private void SaveNeuralNetworkDialog()
 {
     if (MessageBox.Show("Do you want to save neural network?", "Saving", MessageBoxButtons.YesNo) == DialogResult.Yes)
     {
         SerializationNetwork.WriteToFile();
         MessageBox.Show("Neural network was saved successfully", "Saving", MessageBoxButtons.OK);
     }
     else
     {
         if (!FileNetwork.FileExists(Save.NNetwork.Name, FileNetwork.SAVE_FILE))
         {
             FileNetwork.DeleteDirectory(Save.NNetwork.Name);
         }
     }
 }
        /// <summary>
        /// Метод, который обрабатывает событие нажатия на кнопку с названием нейронной сети (загрузка или удаление)
        /// </summary>
        private void DirectoryButton_Click(object sender, MouseEventArgs e)
        {
            // проверка принадлежности кнопки, которая была нажата на мыши
            switch (e.Button)
            {
            case MouseButtons.Right:
                // удаление нейронной сети
                if (MessageBox.Show("Do you wanna to delete this neural network?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    FileNetwork.DeleteDirectory(((Button)sender).Text);
                    CreateNetworksList();
                }
                break;

            case MouseButtons.Left:
                OpenMainForm(sender);
                break;
            }
        }
        /// <summary>
        /// Метод для создания списка уже созданных нейронных сетей
        /// </summary>
        private void CreateNetworksList()
        {
            directoriesPanel.Controls.Clear();
            string[] directories = FileNetwork.GetDirectories();

            // настройки местоположения
            int location = -40, decrease = directories.Length <= 3 ? 2 : 20;

            foreach (string directory in directories)
            {
                Button button = new Button
                {
                    Width    = directoriesPanel.Width - decrease,
                    Height   = 40,
                    Location = new Point(0, location += 40),
                    Text     = directory
                };
                button.MouseDown += DirectoryButton_Click;
                directoriesPanel.Controls.Add(button);
            }
        }
示例#8
0
        /// <summary>
        /// Метод для конвертации нейронной сети в json
        /// </summary>
        /// <param name="nnetwork">ссылка на нейронную сеть</param>
        /// <returns>Полный путь на файл json</returns>
        public static string NetworkToJson(NeuralNetwork nnetwork)
        {
            if (nnetwork.FirstLayer == null)
            {
                return("");                             // проверка на наличие слоев
            }
            if (nnetwork.TypeSupervised == null || nnetwork.TypeData == null)
            {
                return("");
            }

            // создание списка слоев и работа с первым, так как необходимо добавить ему параметр
            Layer            layer  = nnetwork.FirstLayer;
            List <JsonLayer> layers = new List <JsonLayer>
            {
                new JsonLayer(layer.Type, GetParamsFirstLayer(layer))
            };

            layer = layer.NextLayer;

            // добавление всех слоев нейронной сети через соединения
            while (layer != null && layer.NextLayer != nnetwork.FirstLayer)
            {
                layers.Add(new JsonLayer(layer.Type, layer.GetParams()));
                layer = layer.NextLayer;
            }

            // проверка на то, что все слои участвуют в нейронной сети
            if (layers.Count != nnetwork.Layers.Count)
            {
                return("");
            }

            // конвертация в json
            string filename = FileNetwork.GetFile(nnetwork.Name, FileNetwork.JSON_FILE, true);
            string json     = JsonConvert.SerializeObject(new JsonNeuralNetwork(layers, nnetwork.Params, nnetwork.TypeSupervised, nnetwork.TypeData));

            FileNetwork.WriteToFile(filename, json);
            return(json);
        }
        /// <summary>
        /// Метод для обработки события нажатия на кнопку ОК (пользователь ввел название новой нейронной сети)
        /// </summary>
        private void OkButton_Click(object sender, EventArgs e)
        {
            string text = inputNameTextBox.Text;

            // проверка на принадлежность правилам для имени нейронной сети
            if (text.Length == 0 || char.IsNumber(text[0]) || !new Regex(@"^[a-zA-Z0-9_]+$").IsMatch(text))
            {
                MessageBox.Show("Error in name. You can use only english latters, numbers or _", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            // проверка на то, что данная нейронная сеть уже была создана
            else if (FileNetwork.DirectoryExists(text))
            {
                MessageBox.Show("This neural network is already exist", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                // создание нейронной сети
                FileNetwork.CreateDirectory(text);
                Save.NNetwork = new NeuralNetwork(text);
                MessageBox.Show("Network was created successfully", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);

                OpenMainForm(null);
            }
        }