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