/// <summary> /// Метод для конвертации словаря в нейронну сеть /// </summary> /// <param name="name">Название нейронной сети</param> private static void DictToNetwork(string name, Dictionary <string, object> dictionary, EventHandler eventHandler) { // определение названия нейронной сети Save.NNetwork = new NeuralNetwork(name); // определение входных данных Save.NNetwork.InputShape[0] = ((JArray)dictionary["InputShape"]).ToObject <List <int> >()[0]; Save.NNetwork.InputShape[1] = ((JArray)dictionary["InputShape"]).ToObject <List <int> >()[1]; // определение параметров нейронной сети Dictionary <string, object> paramsN = ((JObject)dictionary["Params"]).ToObject <Dictionary <string, object> >(); foreach (string key in paramsN.Keys) { Save.NNetwork.Params[key] = (string)paramsN[key]; } // определение слоев и соединений нейронных сетей DictToLayers(((JArray)dictionary["Layers"]).ToObject <List <Dictionary <string, object> > >(), eventHandler); DictToConnection(((JArray)dictionary["Connections"]).ToObject <List <Dictionary <string, object> > >()); // определение первого слоя нейронной сети int index = (int)(long)dictionary["FirstLayer"]; if (index != -1) { SelectLayer.SelectFirst(Save.NNetwork.Layers[index].Component); } }
/// <summary> /// Метод для обработки двойного нажатия на слой (пользователь выбрал слой для соединения или пометки как главного) /// </summary> private void LayerPanel_MouseDoubleClick(object sender, MouseEventArgs e) { switch (e.Button) { case MouseButtons.Left: if (firstLayerRadioButton.Checked) { SelectLayer.SelectFirst((Component)sender); } else { SelectLayer.Select((Component)sender); } BlockTrain(sender, e); break; } }
/// <summary> /// Метод для обработки нажатия на правую кнопку мыши (удаление слоя) /// </summary> private void LayerPanel_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right && MessageBox.Show("Do you wanna to delete this layer?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { // проверка на то, был ли выбран данный слой if (SelectLayer.IsSelect((Component)sender)) { SelectLayer.ClearSelect(); } // удаление слоя из формы и нейронной сети Save.NNetwork.DeleteLayer(((Component)sender).Layer); mainPanel.Controls.Remove((Component)sender); BlockTrain(sender, e); // отрисовка всех соединений между слоями LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections); } }