using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.ComponentModel;
namespace hata_yayma_wpf
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
List<hepsi> tumu = new List<hepsi>();
public double Emiz = 0.0001;
public double alfa = 2;
public Window1()
{
InitializeComponent();
cikis.Click += (sss, eee) => App.Current.Shutdown();
Canvas.SetZIndex(Ekran, 20);
gizle_goster(gorsel.gizle);
System.Windows.Threading.DispatcherTimer zaman =
new System.Windows.Threading.DispatcherTimer();
zaman.Interval = new TimeSpan(0, 0, 0, 0, 500);
zaman.Tick += (sss, eee) =>
{
foreach (UIElement item in Ekran.Children)
{
if (item.Opacity==0)
{
Ekran.Children.Remove(item);
break;
}
}
};
zaman.Start();
#region Değerleri Girme
deger_e.Click += (sss, eee) =>
{
uc_girilme uc = new uc_girilme();
Ekran.Children.Add(uc);
anime an = new anime(uc, 1);
uc.btn_iptal.Click += (ss, ee) => { anime anii = new anime(uc, 0); };
uc.btn_tamam.Click += (ss, ee) =>
{
Emiz = double.Parse(uc.tt_giris.Text);
anime aniiii = new anime(uc, 0);
};
};
deger_alfa.Click += (sss, eee) =>
{
uc_girilme uc = new uc_girilme();
Ekran.Children.Add(uc);
anime anime = new anime(uc, 1);
uc.tt_parama_adi.Text = "Öğrenme Hızı";
uc.btn_iptal.Click += (ss, ee) => { anime ani = new anime(uc, 0); };
uc.btn_tamam.Click += (ss, ee) =>
{
alfa = double.Parse(uc.tt_giris.Text);
anime an = new anime(uc, 0);
};
};
deger_moment.Click += (sss, eee) =>
{
uc_girilme uc = new uc_girilme();
Ekran.Children.Add(uc);
uc.tt_parama_adi.Text = "Momentum";
uc.btn_iptal.Click += (ss, ee) => { anime ani = new anime(uc, 0); };
uc.btn_tamam.Click += (ss, ee) =>
{
anime an = new anime(uc, 0);
};
};
#endregion
}
public hepsi getir(int sira)
{
#region Katmanların Hazırlanması
string ikili = to_ikili(sira);
while (ikili.Length < 5)
{
ikili = "0" + ikili;
}
List<agirlik> giris_katmani = new List<agirlik>();
for (int i = 0; i < 6; i++)
{
System.Threading.Thread.Sleep(100 + i);
agirlik yeni;
if (sira!=0)
{
yeni = new agirlik("X" + i.ToString(),0);
}else
yeni = new agirlik("X" + i.ToString());
giris_katmani.Add(yeni);
if (i!=0)
{
yeni.cikis = int.Parse(ikili[i-1].ToString());
}
}
List<agirlik> gizli_katman = new List<agirlik>();
for (int i = 6; i < 8; i++)
{
agirlik yeni;
if (sira != 0)
{
yeni = new agirlik("X" + i.ToString(), 0);
}
else
yeni = new agirlik("X" + i.ToString());
gizli_katman.Add(yeni);
}
List<agirlik> cikis_katmani = new List<agirlik>();
for (int i = 8; i < 10; i++)
{
agirlik yeni;
if (sira != 0)
{
yeni = new agirlik("X" + i.ToString(), 0);
}
else
yeni = new agirlik("X" + i.ToString());
cikis_katmani.Add(yeni);
}
#endregion
hepsi hep = new hepsi(giris_katmani, gizli_katman, cikis_katmani, sira);
#region istenelerin kosulu
switch (hep.sirasi)
{
case 0:
hep.istek.y1 = 0;
hep.istek.y2 = 0;
break;
case 1:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 2:
hep.istek.y1 = 0;
hep.istek.y2 = 0;
break;
case 3:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 4:
hep.istek.y1 = 0;
hep.istek.y2 = 0;
break;
case 5:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 6:
hep.istek.y1 = 0;
hep.istek.y2 = 0;
break;
case 7:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 8:
hep.istek.y1 = 0;
hep.istek.y2 = 0;
break;
case 9:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 10:
hep.istek.y1 = 0;
hep.istek.y2 = 0;
break;
case 11:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 12:
hep.istek.y1 = 0;
hep.istek.y2 = 1;
break;
case 13:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 14:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 15:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 16:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 17:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 18:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 19:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 20:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 21:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 22:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 23:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 24:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 25:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 26:
hep.istek.y1 = 1;
hep.istek.y2 = 0;
break;
case 27:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 28:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 29:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 30:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
case 31:
hep.istek.y1 = 1;
hep.istek.y2 = 1;
break;
default:
break;
}
#endregion
return hep;
}
public class agirlik
{
public double deger1;
public double deger2;
public double deger3;
public double deger4;
public string adi;
public double cikis;
public agirlik(string gelen)
{
Random rnd = new Random();
adi = gelen;
deger1 = Math.Round(rnd.NextDouble() * 2 - 1, 3);
deger2 = Math.Round(rnd.NextDouble() * 2 - 1, 3);
deger3 = Math.Round(rnd.NextDouble() * 2 - 1, 3);
deger4 = Math.Round(rnd.NextDouble() * 2 - 1, 3);
if (gelen == "X0")
{
cikis = 1;
}
}
public agirlik(string gelen,int sifir)
{
Random rnd = new Random();
adi = gelen;
if (gelen == "X0")
{
cikis = 1;
}
}
}
public class istenen
{
public double y1=0;
public double y2=0;
}
public class hepsi
{
public List<agirlik> giris;
public List<agirlik> gizli;
public List<agirlik> cikis;
public istenen istek;
public int sirasi;
public hepsi(List<agirlik> giris_, List<agirlik> gizli_, List<agirlik> cikis_, int sirasi_)
{
giris = giris_;
gizli = gizli_;
cikis = cikis_;
sirasi = sirasi_;
istek = new istenen();
}
}
public string to_ikili(int gelen)
{
int base_ = 2;
string binary = Convert.ToString(gelen, base_);
return binary;
}
public System.Collections.ObjectModel.ObservableCollection<listeye> ll = new System.Collections.ObjectModel.ObservableCollection<listeye>();
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
Stopwatch ss = new Stopwatch();
ss.Start();
for (int i = 0; i <32; i++)
{ hepsi hh=getir(i);
tumu.Add(hh);
//hesapla(i);
listeye yl = new listeye
{
E = "0",
sec = false,
sira = i.ToString()
,
X0 = hh.giris[0].cikis.ToString(),
X1 = hh.giris[1].cikis.ToString(),
X2 = hh.giris[2].cikis.ToString(),
X3 = hh.giris[3].cikis.ToString(),
X4 = hh.giris[4].cikis.ToString(),
X5 = hh.giris[5].cikis.ToString(),
Y1 = hh.istek.y1.ToString(),
Y2 = hh.istek.y2.ToString(),
XB6= hh.giris[0].deger1.ToString("n3"),
XB7 = hh.giris[0].deger2.ToString("n3"),
XB8 = hh.giris[0].deger3.ToString("n3"),
XB9 = hh.giris[0].deger4.ToString("n3"),
X16 = hh.giris[1].deger1.ToString("n3"),
X17 = hh.giris[1].deger2.ToString("n3"),
X26 = hh.giris[2].deger1.ToString("n3"),
X27 = hh.giris[2].deger2.ToString("n3"),
X36 = hh.giris[3].deger1.ToString("n3"),
X37 = hh.giris[3].deger2.ToString("n3"),
X46 = hh.giris[4].deger1.ToString("n3"),
X47 = hh.giris[4].deger2.ToString("n3"),
X56 = hh.giris[5].deger1.ToString("n3"),
X57 = hh.giris[5].deger2.ToString("n3"),
X68 = hh.gizli[0].deger1.ToString("n3"),
X69 = hh.gizli[0].deger2.ToString("n3"),
X78 = hh.gizli[1].deger1.ToString("n3"),
X79 = hh.gizli[1].deger2.ToString("n3"),
};
ll.Add(yl);
}
dg.ItemsSource = ll;
ss.Stop();
ss.Elapsed.TotalSeconds.ToString();
anime an = new anime(dg, 1);
}
public class listeye
{
public string sira { get; set; }
public string X0 { get; set; }
public string X1 { get; set; }
public string X2 { get; set; }
public string X3 { get; set; }
public string X4 { get; set; }
public string X5 { get; set; }
public bool kont { get; set; }
public string Y1 { get; set; }
public string Y2 { get; set; }
public bool sec { get; set; }
public string XB6 { get; set; }
public string XB7 { get; set; }
public string X16 { get; set; }
public string X17 { get; set; }
public string X26 { get; set; }
public string X27 { get; set; }
public string X36 { get; set; }
public string X37 { get; set; }
public string X46 { get; set; }
public string X47 { get; set; }
public string X56 { get; set; }
public string X57 { get; set; }
public string XB8 { get; set; }
public string XB9 { get; set; }
public string X68 { get; set; }
public string X69 { get; set; }
public string X78 { get; set; }
public string X79 { get; set; }
public string E { get; set; }
public string c2 { get; set; }
public string c1{ get; set; }
}
private void calistir_Click(object sender, RoutedEventArgs e)
{
calis();
watch.Start();
}
System.Windows.Threading.DispatcherTimer timer =
new System.Windows.Threading.DispatcherTimer();
private void calis()
{
ObservableCollection<listeye> yeni = new ObservableCollection<listeye>();
List<hepsi> yeni_tumu = new List<hepsi>();
int i = 0;
foreach (listeye item in ll)
{
if (item.kont == false)
{
yeni.Add(item);
var l = (from p in tumu
where p.sirasi.ToString() == item.sira
select p).Single();
yeni_tumu.Add(l);
}
}
ll = yeni;
tumu = yeni_tumu;
dg.Items.Refresh();
timer.Interval = new TimeSpan(0, 0, 0, 0, 1);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
//timer.Interval = new TimeSpan(0, 0, 0, 0, 1);
//timer.Tick += new EventHandler(timer_Tick);
//timer.Start();
////BackgroundWorker bw = new BackgroundWorker();
////bw.DoWork += (sss, eee) =>
////{
//// bool tamam = false;
//// while (tamam==false)
//// {
//// for (int i = 0; i < tumu.Count; i++)
//// {
//// if (i!=tumu.Count-1)
//// {
//// tamam = hesapla(tumu[i].sirasi, tumu[i + 1].sirasi);
//// //dg.Items.Refresh();
//// }
//// System.Threading.Thread.Sleep(500);
//// }}
////};
////bw.RunWorkerAsync();
}
double epok = 0;
double iterasyon = 0;
decimal eeeee = 0;
Stopwatch watch = new Stopwatch();
void timer_Tick(object sender, EventArgs e)
{
epok++;
lab_epok.Content = "Epok : " + epok.ToString();
bool tamam = false;
for (int i = 0; i < tumu.Count; i++)
{
if (i != tumu.Count - 1)
{
tamam = hesapla(tumu[i], tumu[i + 1]);
}
else
{
tamam = hesapla(tumu[i], tumu[0]);
}
dg.Items.Refresh();
if (tamam == true)
{
dg.Items.Refresh();
timer.Stop();
watch.Stop();
sonuc son = new sonuc();
son.l_itersyon.Content = lab_iterasyon.Content;
son.l_epok.Content = lab_epok.Content;
son.l_sure.Content = "Geçen Süre : " + watch.Elapsed.Seconds.ToString()+ " saniye";
son.l_e.Content = "Hata Oranı : " + eeeee.ToString();
lab_iterasyon.Visibility = Visibility.Collapsed;
lab_epok.Visibility = Visibility.Collapsed;
Ekran.Children.Add(son);
Canvas.SetLeft(son, (this.Width / 2)-son.Width/2);
Canvas.SetTop(son, (this.Height / 2)-son.Height/2);
anime an = new anime(son, 1);
son.btn_tamam.Click += (sss, eeee) =>
{
anime animmmm = new anime(son, 0);
};
}
iterasyon++;
lab_iterasyon.Content = "İterasyon : " + iterasyon.ToString();
}
}
public bool hesapla(hepsi gelen_,hepsi siradaki_)
{
hepsi hsp = gelen_;
hepsi srdk = siradaki_;
int gelen = hsp.sirasi;
int siradaki = srdk.sirasi;
double E_;
double net_6 = 0;
foreach (agirlik item in hsp.giris)
{
net_6 += (item.cikis * item.deger1);
}
double net_7 = 0;
foreach (agirlik item in hsp.giris)
{
net_7 += (item.cikis * item.deger2);
}
double f6 = 1 / (1 + Math.Exp(0 - net_6));
double f7 = 1 / (1 + Math.Exp(0 - net_7));
hsp.gizli[0].cikis = f6;
hsp.gizli[1].cikis = f7;
double net8 = f6 * hsp.gizli[0].deger1 + f7 * hsp.gizli[1].deger1 + hsp.giris[0].deger3;
double net9 = f6 * hsp.gizli[0].deger2 + f7 * hsp.gizli[1].deger2 + hsp.giris[0].deger4;
double f8 = 1 / (1 + Math.Exp(0 - net8));
double f9 = 1 / (1 + Math.Exp(0 - net9));
var tt = (from p in ll
where int.Parse(p.sira) == gelen_.sirasi
select p).Single();
tt.c1 = f8.ToString();
tt.c2 = f9.ToString();
hsp.cikis[0].cikis = f8;
hsp.cikis[1].cikis = f9;
double s8 = f8 * (1 - f8) * (hsp.istek.y1 - f8);
double s9 = f9 * (1 - f9) * (hsp.istek.y2 - f9);
E_ = 0.5 * ((hsp.istek.y1 - f8) * (hsp.istek.y1 - f8) + (hsp.istek.y2 - f9) * (hsp.istek.y2 - f9));
if (E_ > Emiz)
{
double s6 = f6 * (1 - f6) * ((s8 * hsp.gizli[0].deger1) + (s9 * hsp.gizli[0].deger2));
double s7 = f7 * (1 - f7) * ((s8 * hsp.gizli[1].deger1) + (s9 * hsp.gizli[1].deger2));
srdk.gizli[0].deger1 = hsp.gizli[0].deger1 + (alfa * s8 * hsp.gizli[0].cikis);
srdk.gizli[0].deger2 = hsp.gizli[0].deger2 + (alfa * s9 * hsp.gizli[0].cikis);
srdk.gizli[1].deger1 = hsp.gizli[1].deger1 + (alfa * s8 * hsp.gizli[1].cikis);
srdk.gizli[1].deger2 = hsp.gizli[1].deger2 + (alfa * s9 * hsp.gizli[1].cikis);
srdk.giris[0].deger1 = hsp.giris[0].deger1 + (alfa * s6);
srdk.giris[0].deger2 = hsp.giris[0].deger2 + (alfa * s7);
srdk.giris[0].deger3 = hsp.giris[0].deger3 + (alfa * s8);
srdk.giris[0].deger4 = hsp.giris[0].deger4 + (alfa * s9);
//foreach (agirlik item in hsp.giris)
//{
// item.deger1 = item.deger1 +(alfa * s6 * item.cikis);
// item.deger2 = item.deger2 +(alfa * s7 * item.cikis);
//}
srdk.giris[1].deger1 = hsp.giris[1].deger1 + (alfa * s6 * hsp.giris[1].cikis);
srdk.giris[1].deger2 = hsp.giris[1].deger2 + (alfa * s7 * hsp.giris[1].cikis);
srdk.giris[2].deger1 = hsp.giris[2].deger1 + (alfa * s6 * hsp.giris[2].cikis);
srdk.giris[2].deger2 = hsp.giris[2].deger2 + (alfa * s7 * hsp.giris[2].cikis);
srdk.giris[3].deger1 = hsp.giris[3].deger1 + (alfa * s6 * hsp.giris[3].cikis);
srdk.giris[3].deger2 = hsp.giris[3].deger2 + (alfa * s7 * hsp.giris[3].cikis);
srdk.giris[4].deger1 = hsp.giris[4].deger1 + (alfa * s6 * hsp.giris[4].cikis);
srdk.giris[4].deger2 = hsp.giris[4].deger2 + (alfa * s7 * hsp.giris[4].cikis);
srdk.giris[5].deger1 = hsp.giris[5].deger1 + (alfa * s6 * hsp.giris[5].cikis);
srdk.giris[5].deger2 = hsp.giris[5].deger2 + (alfa * s7 * hsp.giris[5].cikis);
var k = (from p in ll
where int.Parse(p.sira) == siradaki
select p).Single();
k.E = Math.Round(E_, 9).ToString();
k.sira = siradaki.ToString();
k.X0 = srdk.giris[0].cikis.ToString();
k.X1 = srdk.giris[1].cikis.ToString();
k.X2 = srdk.giris[2].cikis.ToString();
k.X3 = srdk.giris[3].cikis.ToString();
k.X4 = srdk.giris[4].cikis.ToString();
k.X5 = srdk.giris[5].cikis.ToString();
k.Y1 = srdk.istek.y1.ToString();
k.Y2 = srdk.istek.y2.ToString();
k.XB6 = srdk.giris[0].deger1.ToString("n3");
k.XB7 = srdk.giris[0].deger2.ToString("n3");
k.XB8 = srdk.giris[0].deger3.ToString("n3");
k.XB9 = srdk.giris[0].deger4.ToString("n3");
k.X16 = srdk.giris[1].deger1.ToString("n3");
k.X17 = srdk.giris[1].deger2.ToString("n3");
k.X26 = srdk.giris[2].deger1.ToString("n3");
k.X27 = srdk.giris[2].deger2.ToString("n3");
k.X36 = srdk.giris[3].deger1.ToString("n3");
k.X37 = srdk.giris[3].deger2.ToString("n3");
k.X46 = srdk.giris[4].deger1.ToString("n3");
k.X47 = srdk.giris[4].deger2.ToString("n3");
k.X56 = srdk.giris[5].deger1.ToString("n3");
k.X57 = srdk.giris[5].deger2.ToString("n3");
k.X68 = srdk.gizli[0].deger1.ToString("n3");
k.X69 = srdk.gizli[0].deger2.ToString("n3");
k.X78 = srdk.gizli[1].deger1.ToString("n3");
k.X79 = srdk.gizli[1].deger2.ToString("n3");
return false;
}
else
{
var k = (from p in ll
where int.Parse(p.sira) == siradaki
select p).Single();
eeeee =decimal.Parse( k.E);
dg.Items.Refresh();
return true;
}
}
private void yazdir_click(object sender, RoutedEventArgs e)
{
PrintDialog pr = new PrintDialog();
if (pr.ShowDialog().Value)
{
pr.PrintVisual(dg, "Sonuçlar");
}
}
private void secilenleri_click(object sender, RoutedEventArgs e)
{
ObservableCollection<listeye> yeni = new ObservableCollection<listeye>();
List<hepsi> yeni_tumu = new List<hepsi>();
int i=0;
foreach (listeye item in ll)
{
if (item.kont==false)
{
yeni.Add(item);
var l = (from p in tumu
where p.sirasi.ToString() == item.sira
select p).Single();
yeni_tumu.Add(l);
}
}
ll = yeni;
tumu = yeni_tumu;
dg.Items.Refresh();
timer.Interval = new TimeSpan(0, 0, 0, 0, 1);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
#region gizle göster kısmı
public enum gorsel
{
gizle, goster
}
public void gizle_goster(gorsel gor)
{
if (gor == gorsel.gizle)
{
d1.Visibility = Visibility.Collapsed;
d3.Visibility = Visibility.Collapsed;
d4.Visibility = Visibility.Collapsed;
d5.Visibility = Visibility.Collapsed;
d6.Visibility = Visibility.Collapsed;
d7.Visibility = Visibility.Collapsed;
d2.Visibility = Visibility.Collapsed;
d8.Visibility = Visibility.Collapsed;