예제 #1
0
        /// <summary>
        /// Метод для загрузки формы
        /// </summary>
        private void MainForm_Load(object sender, EventArgs e)
        {
            // на весь экран
            WindowState = FormWindowState.Maximized;

            // добавление пунктов выбора в настройках
            optimizerBox.DropDownStyle = ComboBoxStyle.DropDownList;
            optimizerBox.Items.AddRange(NeuralNetworkParams.OPTIMIZER);
            metricsBox.Items.AddRange(NeuralNetworkParams.METRICS);
            lossBox.Items.AddRange(NeuralNetworkParams.LOSSES);

            // добавление возможности работать со слоями
            mainPanel.AllowDrop = true;

            // добавление возможности скролить панель
            mainPanel.AutoScroll = true;

            // установление названия нейронной сети в качестве заголовка
            Text = Save.NNetwork.Name;

            // добавление слоев на панель
            foreach (Layer layer in Save.NNetwork.Layers)
            {
                AddControl(layer.Component);
            }

            // установление параметров
            string[] paramsN = new string[] { Save.NNetwork.Params["optimizer"], Save.NNetwork.Params["metrics"], Save.NNetwork.Params["loss"] };
            optimizerBox.SelectedItem = paramsN[0] == "" ? NeuralNetworkParams.OPTIMIZER[0] : paramsN[0];
            metricsBox.SelectedItem   = paramsN[1] == "" ? NeuralNetworkParams.METRICS[0] : paramsN[1];
            lossBox.SelectedItem      = paramsN[2] == "" ? NeuralNetworkParams.LOSSES[0] : paramsN[2];

            // отрисовка соединений
            LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections);
        }
예제 #2
0
        /// <summary>
        /// Метод для обработки удаления соединения между слоями
        /// </summary>
        private void MainPanel_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                return;
            }

            // нахождение соединения, на который нажал пользователь
            Connection connection = ConnectionLine.IsIntersection(Save.NNetwork.Connections, new Point(e.X, e.Y));

            if (connection is null)
            {
                return;
            }

            DialogResult result = MessageBox.Show("Do you wanna to delete this connection?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                // удаление соединения
                connection.ComponentFirst.Layer.NextLayer = null;
                Save.NNetwork.Connections.Remove(connection);
                LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections);
                BlockTrain(sender, e);
            }
        }
        /// <summary>
        /// Метод для добавления нового соединения между двумя слоями
        /// </summary>
        /// <param name="selectedLayer2">Вторая компонента, которая участвует в соединении</param>
        private static void AddConnection(Component selectedLayer2)
        {
            // проверка на то, что соединения между слоями еще не было
            foreach (Connection connection in Save.NNetwork.Connections)
            {
                if ((connection.ComponentFirst == selectedLayer && connection.ComponentSecond == selectedLayer2) || (connection.ComponentSecond == selectedLayer && connection.ComponentFirst == selectedLayer2))
                {
                    return;
                }
            }

            // добавление соединения
            Save.NNetwork.Connections.Add(new Connection(selectedLayer, selectedLayer2));
            selectedLayer.Layer.NextLayer = selectedLayer2.Layer;
            // отрисовка соединений после изменения
            LayersControls.DrawLines(selectedLayer.Parent, Save.NNetwork.Connections);
        }
예제 #4
0
        /// <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);
            }
        }
예제 #5
0
 /// <summary>
 /// Метод обработки события сворачивания и других манипуляций с формой
 /// </summary>
 private void MainPanel_Paint(object sender, PaintEventArgs e)
 {
     // отрисовка соединений
     LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections);
 }
예제 #6
0
 /// <summary>
 /// Метод для обработки изменения положения слоя в пространстве
 /// </summary>
 private void LayerPanel_LocationChanged(object sender, EventArgs e)
 {
     // отрисовка всех соединений между слоями
     LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections);
 }