Exemplo n.º 1
0
        // Вычисление выходного значения. Передаем сюда "строку" выходных параметров
        public List <double> GetCalculation(CParam lst)
        {
            // Присваиваем входные значения нейронов
            LayersMass[0].NeuronsMass[0].OutputValue = lst._a;
            LayersMass[0].NeuronsMass[1].OutputValue = lst._b;
            LayersMass[0].NeuronsMass[2].OutputValue = lst._c;
            LayersMass[0].NeuronsMass[3].OutputValue = lst._d;
            LayersMass[0].NeuronsMass[4].OutputValue = lst._e;
            LayersMass[0].NeuronsMass[5].OutputValue = lst._f;
            LayersMass[0].NeuronsMass[6].OutputValue = lst._g;

            // Пересчитываем выходные значения остальным нейронам
            for (int i = 1; i < LayersMass.Count; i++)
            {
                //Parallel.ForEach(LayersMass[i].NeuronsMass, el => el.Calculation());
                foreach (var temp in LayersMass[i].NeuronsMass)
                {
                    temp.Calculation();
                }
            }

            // Возвращаем значение выходного параметра
            var res_lst = LayersMass.LastOrDefault().NeuronsMass.Select(o => o.OutputValue).ToList();

            return(res_lst);
        }
Exemplo n.º 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            chart_errorDynamic.Series[0].Points.Clear();
            chart_sick.Series[0].Points.Clear();
            chart_sick.Series[1].Points.Clear();
            chart_sick.Series[2].Points.Clear();

            if (rb2.Checked == true)
            {
                pictureBox1.Visible = false;
                pictureBox2.Visible = false;
                parseLearnTxt();
                this.web = new Web();
                this.web = web.createWeb(7, Decimal.ToInt32(nudNeuro.Value), Decimal.ToInt32(nudLayer.Value), rnd);
                List <double> error_list = web.getErrorList();
                lbl_done.Text = this.web.learnWeb(learn, rnd, Decimal.ToDouble(nudAge.Value)) + "  " + error_list.Count.ToString();
                plot();
            }
            else
            {
                // Включить анимацию
                pictureBox1.Visible = true;

                // Создать сеть
                network = new CNetwork(Decimal.ToInt32(nudLayer.Value), Decimal.ToInt32(nudNeuro.Value));

                // Количество эпох
                int N = Decimal.ToInt32(nudAge.Value);

                // Текущая и старая ошибка
                double Enow = 0, Eold = 0;

                // Работа с выборкой
                string[]      lines = File.ReadAllLines("learn.txt");
                double        _a, _b, _c, _d, _e, _f, _g, _res;
                List <CParam> lst = new List <CParam>();
                foreach (string str in lines)
                {
                    string[] param = str.Split(new char[] { ';' });
                    Double.TryParse(param[0], out _a);
                    Double.TryParse(param[1], out _b);
                    Double.TryParse(param[2], out _c);
                    Double.TryParse(param[3], out _d);
                    Double.TryParse(param[4], out _e);
                    Double.TryParse(param[5], out _f);
                    Double.TryParse(param[6], out _g);
                    Double.TryParse(param[7], out _res);
                    CParam temp = new CParam(_a, _b, _c, _d, _e, _f, _g, _res);
                    lst.Add(temp);
                }

                // Цикл по всем эпохам
                for (int i = 0; i < N; i++)
                {
                    // Цикл по выборке
                    double sum = 0;
                    foreach (CParam param in lst)
                    {
                        List <double> resLst = network.GetCalculation(param);
                        sum += Math.Pow(param._res - resLst[0], 2);
                    }

                    // Текущая ошибка
                    Enow = sum / N;

                    // При привышении текущей ошибки над старой сделать откат
                    if (i > 0 && Eold < Enow)
                    {
                        network.Recoil();
                        Enow = Eold;
                    }
                    else
                    {
                        Eold = Enow;
                    }

                    // Обучить нейронную сеть
                    network.Education();

                    // Добавить ошибку в лист
                    network.ErrorLst.Add(Enow);

                    // Отрисовать прямо в цикле
                    if (checkBox8.Checked == true)
                    {
                        if (i > 0)
                        {
                            DrawGraphics();
                        }
                        this.Refresh();

                        lbl_done.ForeColor  = Color.Blue;
                        lbl_epoxi.ForeColor = Color.Blue;
                        lbl_err.ForeColor   = Color.Blue;
                        lbl_done.Text       = "Обучаюсь.";
                        lbl_epoxi.Text      = "Эпоха: " + i.ToString();
                        richTextBox1.AppendText(network.ErrorLst[i].ToString().Substring(0, 13) + Environment.NewLine);
                        lbl_err.Text = "Ошибка = " + network.ErrorLst[i].ToString().Substring(0, 13);
                    }
                }

                // Откатить сеть
                network.Recoil();

                // Отрисовать графики после обучения
                if (!checkBox8.Checked)
                {
                    DrawGraphics();
                }

                // Пост-обработка
                lbl_done.ForeColor     = Color.Green;
                lbl_epoxi.ForeColor    = Color.Green;
                lbl_err.ForeColor      = Color.Green;
                lbl_done.Text          = "Обучена.";
                lbl_epoxi.Text         = "Кол-во эпох: " + network.ErrorLst.Count.ToString();
                lbl_err.Text           = "Ошибка = " + network.ErrorLst[N - 1].ToString().Substring(0, 13);
                button_diagnos.Enabled = true;
                button_check.Enabled   = true;
                button_save.Enabled    = true;
                pictureBox1.Visible    = false;
                pictureBox2.Visible    = true;
            }
        }
Exemplo n.º 3
0
        private void button_diagnos_Click(object sender, EventArgs e)
        {
            if (rb2.Checked == true)
            {
                List <double> error_list = web.getErrorList();
                double[]      param      = new double[7];
                if (checkBox1.Checked)
                {
                    param[0] = 1;
                }
                else
                {
                    param[0] = -1;
                }
                if (checkBox2.Checked)
                {
                    param[1] = 1;
                }
                else
                {
                    param[1] = -1;
                }
                if (checkBox3.Checked)
                {
                    param[2] = 1;
                }
                else
                {
                    param[2] = -1;
                }
                if (checkBox4.Checked)
                {
                    param[3] = 1;
                }
                else
                {
                    param[3] = -1;
                }
                if (checkBox5.Checked)
                {
                    param[4] = 1;
                }
                else
                {
                    param[4] = -1;
                }
                if (checkBox6.Checked)
                {
                    param[5] = 1;
                }
                else
                {
                    param[5] = -1;
                }
                if (checkBox7.Checked)
                {
                    param[6] = 1;
                }
                else
                {
                    param[6] = -1;
                }

                double bbb = this.web.testWeb(param);

                if (bbb < 0)
                {
                    lbl_res.ForeColor     = Color.Green;
                    lbl_diagnos.ForeColor = Color.Green;
                    lbl_diagnos.Text      = "Вероятно, Вы здоровы";
                }
                else
                {
                    lbl_res.ForeColor     = Color.Red;
                    lbl_diagnos.ForeColor = Color.Red;
                    lbl_diagnos.Text      = "Вероятно, у Вас волчанка!";
                }
                lbl_res.Text = bbb.ToString();
                chart_sick.Series[2].Points.Clear();
                chart_sick.Series[2].Points.AddXY(bbb, 0);
                chart_sick.Series[2].Points.AddXY(bbb, error_list.Count - 1);
            }
            else
            {
                double Artrit, Disk, Antitela, Yazva, Skuli, Pochki, Serozit;
                if (checkBox1.Checked)
                {
                    Artrit = 1;
                }
                else
                {
                    Artrit = -1;
                }
                if (checkBox2.Checked)
                {
                    Disk = 1;
                }
                else
                {
                    Disk = -1;
                }
                if (checkBox3.Checked)
                {
                    Antitela = 1;
                }
                else
                {
                    Antitela = -1;
                }
                if (checkBox4.Checked)
                {
                    Yazva = 1;
                }
                else
                {
                    Yazva = -1;
                }
                if (checkBox5.Checked)
                {
                    Skuli = 1;
                }
                else
                {
                    Skuli = -1;
                }
                if (checkBox6.Checked)
                {
                    Pochki = 1;
                }
                else
                {
                    Pochki = -1;
                }
                if (checkBox7.Checked)
                {
                    Serozit = 1;
                }
                else
                {
                    Serozit = -1;
                }
                CParam param = new CParam(Artrit, Disk, Antitela, Yazva, Skuli, Pochki, Serozit, 0);
                double res   = network.GetCalculation(param)[0];
                lbl_res.Text = res.ToString();
                if (res < 0)
                {
                    lbl_res.ForeColor     = Color.Green;
                    lbl_diagnos.ForeColor = Color.Green;
                    lbl_diagnos.Text      = "Вероятно, Вы здоровы";
                }
                else
                {
                    lbl_res.ForeColor     = Color.Red;
                    lbl_diagnos.ForeColor = Color.Red;
                    lbl_diagnos.Text      = "Вероятно, у Вас волчанка!";
                }
            }
        }