Ejemplo n.º 1
0
        private void button5_Click(object sender, EventArgs e)
        {
            List <WynikNeuroneowej> wk = new List <WynikNeuroneowej>();
            Random r = new Random();

            int Długość    = 0;
            int IlośćPetli = 0;
            int Najlepsza  = 0; try

            {
                Długość    = Convert.ToInt32(textBox3.Text);
                IlośćPetli = Convert.ToInt32(textBox4.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("źle wpisane dane " + ex.Message);
                return;
            }
            listBox1.Items.Clear();
            t = new Thread(new ThreadStart(() =>
            {
                for (int i = 0; i < IlośćPetli; i++)
                {
                    SieciRywalizujące <string> tb = StwórzSieć();

                    for (int j = 0; j < Długość; j++)
                    {
                        TabelaUcząca rt = ZbiórUczący[r.Next(ZbiórUczący.Count)];
                        tb.Ucz(rt.Nazwa, rt.WejścieFloat);
                    }
                    int IlośćPoprawnych = 0;
                    foreach (var item in ZbiórUczący)
                    {
                        if (tb.PobierzWartośc(item.WejścieFloat) == item.Nazwa)
                        {
                            IlośćPoprawnych++;
                        }
                    }
                    wk.Add(new WynikNeuroneowej()
                    {
                        Poprawne = IlośćPoprawnych
                    });
                    if (Najlepsza < IlośćPoprawnych)
                    {
                        tb.Zapisz(Loto.StałeGlobalne.NazwaPlikuRywalizującejSieci + "uczenie", Zapis);
                        Najlepsza = IlośćPoprawnych;
                        Console.WriteLine(IlośćPoprawnych);
                        listBox1.Invoke(new TR(() => { listBox1.Items.Add(IlośćPoprawnych.ToString()); }));
                    }
                }

                this.Invoke(new TR(() => { this.Text = WynikNeuroneowej.Drukuj(wk); }));
            }));
            t.Start();
        }
Ejemplo n.º 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                DirectoryInfo   dr  = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
                DirectoryInfo[] drt = dr.GetDirectories();
                int             j   = 0;
                foreach (var item in drt)
                {
                    s.Add(item.Name);
                    FileInfo[] fi      = item.GetFiles();
                    double[]   wyjście = StwórzyWyjscie(j, drt.Length);
                    for (int i = 0; i < fi.Length; i++)
                    {
                        TabelaUcząca tb = new TabelaUcząca();
                        var          a  = new ObrazDoPorównywania(fi[i].FullName, Convert.ToSingle(textBox9.Text));
                        tb.Wejście = a.NaJedenWymiar;
                        PrzesóńWMinus(tb.Wejście, 0.2);
                        tb.WejścieFloat = a.NaJedenWymiarfloat;
                        tb.Nr           = j;
                        tb.Nazwa        = item.Name;
                        tb.Wyjście      = wyjście;
                        ZbiórUczący.Add(tb);
                    }
                    j++;
                }
            }
            FileStream   fs = new FileStream("zap.txt", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

            foreach (var item in s)
            {
                sw.WriteLine(item);
            }
            sw.Close();
        }
Ejemplo n.º 3
0
        private void button2_Click(object sender, EventArgs e)
        {
            List <WynikNeuroneowej> wk = new List <WynikNeuroneowej>();
            Random r = new Random();
            int    Najlepsza = 0;
            int    Długość = 0, IlośćPetli = 0;
            double WSPUczenia = 0, WspPendu = 0, Bias = 0;
            float  OstatniaPróbaUcząca, UczeniePopranego; try

            {
                Pobierz(out Długość, out IlośćPetli, out WSPUczenia, out WspPendu, out Bias, out OstatniaPróbaUcząca, out UczeniePopranego);
            }
            catch (Exception)
            {
                MessageBox.Show("źle wpisane dane");
                return;
            }
            Maks = Convert.ToInt32(textBox6.Text);
            listBox1.Items.Clear();
            t = new Thread(new ThreadStart(() =>
            {
                for (int i = 0; i < IlośćPetli; i++)
                {
                    ActivationNetwork network = null;
                    if (DomyślnaSiec == null)
                    {
                        network = KontrukcjaSieci(Bias);

                        Neuron.RandRange = new AForge.Range(-1, 1);
                        network.Randomize();
                    }
                    else
                    {
                        network = DomyślnaSiec;
                    }
                    BackPropagationLearning teacher = new BackPropagationLearning(network);
                    teacher.Momentum = WspPendu;

                    for (int j = 0; j < Długość; j++)
                    {
                        float Współczynik    = ((float)(Długość - j)) / Długość;
                        teacher.LearningRate = WSPUczenia * Współczynik + OstatniaPróbaUcząca;
                        TabelaUcząca rt      = ZbiórUczący[r.Next(ZbiórUczący.Count)];
                        double[] UczWyjście  = (double[])rt.Wyjście.Clone();
                        int p = 0;
                        bool CzyPoprawny;
                        while (p++ < Maks)
                        {
                            CzyPoprawny = (Loto.Matematyka.ZnajdźMaksymalną(network.Compute(rt.Wejście)) == rt.Nr);
                            if (!CzyPoprawny)
                            {
                                teacher.Run(rt.Wejście, rt.Wyjście);
                            }
                            else if (UczPoprawne)
                            {
                                teacher.LearningRate = UczeniePopranego * WSPUczenia;
                                teacher.Run(rt.Wejście, rt.Wyjście);
                                break;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    int IlośćPoprawnych = 0;
                    double Odhylenie    = 0;
                    StreamWriter sw     = null;
                    if (checkBox2.Checked)
                    {
                        sw = new StreamWriter(new FileStream($"zap{i}.txt", FileMode.Create));
                    }
                    foreach (var item in ZbiórUczący)
                    {
                        double[] tb = network.Compute(item.Wejście);
                        Odhylenie  += OdchylenieStadardowe(tb, item.Wyjście);
                        if (Loto.Matematyka.ZnajdźMaksymalną(tb) == item.Nr)
                        {
                            IlośćPoprawnych++;
                        }
                        foreach (var item2 in ListaNajlepszych(tb))
                        {
                            sw?.Write(item2);
                            sw?.Write('\t');
                        }
                        sw?.WriteLine(item.Nazwa);
                    }
                    sw?.Close();
                    Odhylenie /= ZbiórUczący.Count;
                    if (Najlepsza < IlośćPoprawnych)
                    {
                        network.Save("siec.tv");
                        Najlepsza = IlośćPoprawnych;
                        Console.WriteLine(IlośćPoprawnych);
                    }

                    wk.Add(new WynikNeuroneowej()
                    {
                        błąd = Odhylenie, Poprawne = IlośćPoprawnych
                    });
                    listBox1.Invoke(new TR(() => { listBox1.Items.Add(IlośćPoprawnych.ToString() + " odchylenie stadardowe " + Odhylenie); }));
                }
                this.Invoke(new TR(() => { this.Text = WynikNeuroneowej.Drukuj(wk); }));
            }));
            t.Start();
        }