コード例 #1
0
 //initialize
 public void kur(double [] matris)
 {
     for (int i = 0; i < GIZLI_NORON; i++)
     {
         gizliNöronArr[i] = new Nöron();
     }
     for (int i = 0; i < 35; i++)
     {
         girişNöronArr[i]       = new Nöron();
         girişNöronArr[i].Net   = matris[i];
         girişNöronArr[i].Çıkış = matris[i];
         for (int j = 0; j < GIZLI_NORON; j++)
         {
             girişNöronArr[i].çıkanSinapsEkle(new Sinaps(girişNöronArr[i], gizliNöronArr[j], rnd.NextDouble()));
         }
     }
     for (int i = 0; i < GIZLI_NORON; i++)
     {
         biasGizliNöron.çıkanSinapsEkle(new Sinaps(biasGizliNöron, gizliNöronArr[i], rnd.NextDouble()));
     }
     for (int i = 0; i < GIZLI_NORON; i++)
     {
         gizliNöronArr[i].çıkanSinapsEkle(new Sinaps(gizliNöronArr[i], o1, rnd.NextDouble()));
         gizliNöronArr[i].çıkanSinapsEkle(new Sinaps(gizliNöronArr[i], o2, rnd.NextDouble()));
         gizliNöronArr[i].çıkanSinapsEkle(new Sinaps(gizliNöronArr[i], o3, rnd.NextDouble()));
         gizliNöronArr[i].çıkanSinapsEkle(new Sinaps(gizliNöronArr[i], o4, rnd.NextDouble()));
         gizliNöronArr[i].çıkanSinapsEkle(new Sinaps(gizliNöronArr[i], o5, rnd.NextDouble()));
     }
     biasÇıkışNöron.çıkanSinapsEkle(new Sinaps(biasÇıkışNöron, o1, rnd.NextDouble()));
     biasÇıkışNöron.çıkanSinapsEkle(new Sinaps(biasÇıkışNöron, o2, rnd.NextDouble()));
     biasÇıkışNöron.çıkanSinapsEkle(new Sinaps(biasÇıkışNöron, o3, rnd.NextDouble()));
     biasÇıkışNöron.çıkanSinapsEkle(new Sinaps(biasÇıkışNöron, o4, rnd.NextDouble()));
     biasÇıkışNöron.çıkanSinapsEkle(new Sinaps(biasÇıkışNöron, o5, rnd.NextDouble()));
 }
コード例 #2
0
 public Sinaps(Nöron girdi, Nöron çıktı, double ağırlık)
 {
     this.GirdiNöron = girdi;
     this.ÇıktıNöron = çıktı;
     this.Ağırlık    = ağırlık;
     çıktı.girenSinapsEkle(this);
 }
コード例 #3
0
 public void girisMatrisDegiştir(double [] matris)
 {
     for (int i = 0; i < 35; i++)
     {
         girişNöronArr[i]       = new Nöron();
         girişNöronArr[i].Net   = matris[i];
         girişNöronArr[i].Çıkış = matris[i];
     }
 }
コード例 #4
0
        public SinirAgı(double öğrenmeOranı, int epoch)
        {
            this.epoch        = epoch;
            this.öğrenmeOranı = öğrenmeOranı;
            rnd                  = new Random();
            girişNöronArr        = new Nöron[35];
            gizliNöronArr        = new Nöron[GIZLI_NORON];
            o1                   = new Nöron();
            o2                   = new Nöron();
            o3                   = new Nöron();
            o4                   = new Nöron();
            o5                   = new Nöron();
            biasÇıkışNöron       = new Nöron();
            biasGizliNöron       = new Nöron();
            biasÇıkışNöron.Net   = 1;
            biasÇıkışNöron.Çıkış = 1;

            biasGizliNöron.Net   = 1;
            biasGizliNöron.Çıkış = 1;
            yükle();
        }
コード例 #5
0
        public static void girisKatmanSinapsGüncelle(Sinaps sinaps,
                                                     double o1hedef, double o1gelen,
                                                     double o2hedef, double o2gelen,
                                                     double o3hedef, double o3gelen,
                                                     double o4hedef, double o4gelen,
                                                     double o5hedef, double o5gelen,
                                                     Nöron o1, Nöron o2, Nöron o3, Nöron o4, Nöron o5)
        {
            //o1 hata hesaplama
            double eox = 0.0;

            sinaps.ÇıktıNöron.ÇıkanSinapslar.ForEach(sin =>
            {
                if (sin.ÇıktıNöron == o1)
                {
                    eox = sin.Ağırlık;
                }
            });
            double türev = Fonksiyonlar.sigmoid_türev(o1.Çıkış);
            double hata1 = o1.YanlışlıkMiktarı * türev;

            hata1 *= eox;

            //o2 hata

            double eox2 = 0.0;

            sinaps.ÇıktıNöron.ÇıkanSinapslar.ForEach(sin =>
            {
                if (sin.ÇıktıNöron == o2)
                {
                    eox2 = sin.Ağırlık;
                }
            });
            double türev2 = Fonksiyonlar.sigmoid_türev(o2.Çıkış);
            double hata2  = o2.YanlışlıkMiktarı * türev2 * eox2;



            //o3

            double eox3 = 0.0;

            sinaps.ÇıktıNöron.ÇıkanSinapslar.ForEach(sin =>
            {
                if (sin.ÇıktıNöron == o3)
                {
                    eox3 = sin.Ağırlık;
                }
            });
            double türev3 = Fonksiyonlar.sigmoid_türev(o3.Çıkış);
            double hata3  = o3.YanlışlıkMiktarı * türev3 * eox3;


            //04

            double eox4 = 0.0;

            sinaps.ÇıktıNöron.ÇıkanSinapslar.ForEach(sin =>
            {
                if (sin.ÇıktıNöron == o4)
                {
                    eox4 = sin.Ağırlık;
                    //      MessageBox.Show("Eox" + eox2);
                }
            });
            double türev4 = Fonksiyonlar.sigmoid_türev(o4.Çıkış);
            double hata4  = o4.YanlışlıkMiktarı * türev4 * eox4;


            //o5

            double eox5 = 0.0;

            sinaps.ÇıktıNöron.ÇıkanSinapslar.ForEach(sin =>
            {
                if (sin.ÇıktıNöron == o5)
                {
                    eox5 = sin.Ağırlık;
                    //      MessageBox.Show("Eox" + eox2);
                }
            });
            double türev5 = Fonksiyonlar.sigmoid_türev(o5.Çıkış);
            double hata5  = o5.YanlışlıkMiktarı * türev5 * eox5;



            //devam


            double toplamHata = hata1 + hata2 + hata3 + hata4 + hata5;

            double çıktıtürev = Fonksiyonlar.sigmoid_türev(sinaps.ÇıktıNöron.Çıkış);
            double girdi      = sinaps.GirdiNöron.Çıkış;

            double rx = toplamHata * çıktıtürev * girdi;

            sinaps.Ağırlık -= (0.5 * rx);
        }