/// <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); } }
/// <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); } }