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