folder Tahribat.com Forumları
linefolder C - C++
linefolder Yapay Sinir Ağları (Ysa)



Yapay Sinir Ağları (Ysa)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    FlareCaster
    FlareCaster's avatar
    Kayıt Tarihi: 24/Ağustos/2005
    Erkek

    Yapay sinir ağları hakkında ne biliyorsunuz bi sormak istedim :)) Neyi, nasıl yapıyor, mantığı ne... Wlla sandığım gibiyse biçok konuda çok işe yarar bi mevzu.


    Küçük bir alıntı;
    "İnsanlığın doğayı araştırma ve taklit etme çabalarının en son ürünlerinden bir tanesi Yapay Sinir Ağları (YSA) teknolojisidir. Yapay Sinir Ağları, basit biyolojik sinir sisteminin çalışma şeklini simüle etmek için tasarlanan programlardır. Simüle edilen sinir hücreleri (nöronlar) içerirler ve bu nöronlar çeşitli şekillerde birbirlerine bağlanarak ağı oluştururlar. Bu ağlar öğrenme, hafızaya alma ve veriler arasındaki ilişkiyi ortaya çıkarma kapasitesine sahiptirler. Diğer bir ifadeyle, YSA'lar, normalde bir insanın düşünme ve gözlemlemeye yönelik doğal yeteneklerini gerektiren problemlere çözüm üretmektedir. Bir insanın, düşünme ve gözlemleme yeteneklerini gerektiren problemlere yönelik çözümler üretebilmesinin temel sebebi ise insan beyninin ve dolayısıyla insanın sahip olduğu yaşayarak veya deneyerek öğrenme yeteneğidir."


     


     


    Bu da  C ile yazılmış bir uygulama;






    //Maksimum alti girisli tek bir nöronun agirliklarini egitebilecek bir program
    //yazarak ögrenme algoritmalarini gerçekleyiniz.
    //Program, kullanicinin ögrenme kuralini, aktivasyon fonksiyonunun tipini, lamda' yi (gerekiyorsa),
    //egitme datasini ve belirlenen sayida egitme adiminin yürütülmesini belirlemesine izin vermelidir.
    //Kurallar: Hebb, Perceptron, Delta, Widrow-Hoff.


    #include<stdio.h>
    #include<conio.h>
    #include<math.h>

    //Yazar: Erdem Halit HAKI - 4505016
    //Ders:  Noron Aglari ve Uygulamalari - Odev2

    //SORU :
    //Maksimum alti girisli tek bir nöronun agirliklarini egitebilecek bir program
    //yazarak ögrenme algoritmalarini gerçekleyiniz.
    //Program, kullanicinin ögrenme kuralini, aktivasyon fonksiyonunun tipini, lamda' yi (gerekiyorsa),
    //egitme datasini ve belirlenen sayida egitme adiminin yürütülmesini belirlemesine izin vermelidir.
    //Kurallar: Hebb, Perceptron, Delta, Widrow-Hoff.

    main()
    {

    int i,j,giris_sayisi,giris_eleman_sayisi,egitme_adim_sayisi,sec,sec1;
    long int x[6][6][1];
    float u[6][1][1],fu[6][1][1],w[7][6][1],d[6],r[6];

    //kullanilacak ogrenme kuralinin secilmesi

    tekrar :
    clrscr();
    printf("\nlutfen kullanmak istediginiz ogrenme kuralini (a, b, c veya d olarak) seciniz\n\n");
    printf("\na)..Hebb ogrenme kurali\n");
    printf("\nb)..Perceptron ogrenme kurali\n");
    printf("\nc)..Delta ogrenme kurali\n");
    printf("\nd)..Widrow-Hoff ogrenme kurali\n");
    printf("\nseciminiz = ");

    sec=getch();
    clrscr();

    switch(sec)
    {
    /////////////////////////////////////Hebb ogrenme kurali//////////////////////////////////////////////////////////////
    case 'a':
    {

    printf("\n-->Hebb ogrenme kurali ile bir noronun agirliklarinin egitilesi\n\n");
       printf("\nLutfen aktivasyon fonksiyonunun tipini belirleyiniz\n\n");
          printf("\na)..Bipolar surekli  f(u)=[2/(1+exp(-lamda.u))]-1\n\n");
    printf("\nb)..Bipolar binary   f(u)=sgn(u)= +1   ,  u>0\n");
          printf("                -1   ,  u<0\n");
          printf("\nseciminiz = ");
          sec1=getch();

          if (sec1==97||sec1==65)              /////bipolar sürekli/////
           {
           clrscr();
           printf("\n-->Hebb ogrenme kurali ile bir noronun agirliklarinin egitilesi\n");
         printf("\n-->Aktivasyon fonksiyonunun tipi Bipolar surekli\n\n");
                printf("Giris sayisini(x) belirtiniz (max 6) \n\n");
                scanf("%d",&i);
                giris_sayisi=i;
                printf("\nGiris vektorlerinin eleman sayisini belirtiniz (max 6) \n\n");
                scanf("%d",&j);
                giris_eleman_sayisi=j;

         //giris vektorlerinin girilmesi

                for(i=0;i<giris_sayisi;i++)
           {printf("\n%d. giris vektorunu giriniz\n\n",i+1);
               for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%d",&x[j][0]);
                 }
                   }

         //baslangic agirlik vekrorunun girilmesi

                 printf("\nLutfen baslangic agirlik vektorunu giriniz\n\n");
                      for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%f",&w[0][j][0]);
                 }

         //egitme adim sayisinin girilmesi

                 printf("\nLutfen egitme adim sayisini giriniz\n\n");
                 scanf("%d",&egitme_adim_sayisi);


         //yeni agirliklarin hesaplanmasi

                   u[0][0][0]=0;
                   fu[0][0][0]=0;

       for(i=0;i<egitme_adim_sayisi;i++)
       {

           for(j=0;j<giris_eleman_sayisi;j++)
             {
               u[0][0]=u[0][0]+w[0][j]*x[j][0];
                               fu[0][0]=2/(1+exp(-1*u[0][0]))-1 ;
                            }
                             printf("\nu%d degeri= ",i+1);
                   printf("%.3f\t\n",u[0][0]);
                         printf("\nfu%d degeri= ",i+1);
                         printf("%.3f\t\n\n",fu[0][0]);

                         printf("yeni agirliklar (w%d) :\n\n",i+2);
                         for(j=0;j<giris_eleman_sayisi;j++)
                         {
                               w[i+1][j][0]=w[j][0]+fu[0][0]*x[j][0];
                         printf("%.3f\t\n",w[i+1][j][0]);
                               }

                      }
             }

          if(sec1==98||sec1==66)               /////bipolar binary/////
             {
           clrscr();
           printf("\n-->Hebb ogrenme kurali ile bir noronun agirliklarinin egitilesi\n");
         printf("\n-->Aktivasyon fonksiyonunun tipi Bipolar binary\n\n");
                printf("Giris sayisini(x) belirtiniz (max 6) \n\n");
                scanf("%d",&i);
                giris_sayisi=i;
                printf("\nGiris vektorlerinin eleman sayisini belirtiniz (max 6) \n\n");
                scanf("%d",&j);
                giris_eleman_sayisi=j;

         //giris vektorlerinin girilmesi

                for(i=0;i<giris_sayisi;i++)
           {
                   printf("\n%d. giris vektorunu giriniz\n\n",i+1);
               for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%d",&x[j][0]);
                 }
                   }

         //baslangic agirlik vekrorunun girilmesi

                 printf("\nLutfen baslangic agirlik vektorunu giriniz\n\n");
                      for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%f",&w[0][j][0]);
                 }

         //egitme adim sayisinin girilmesi

                 printf("\nLutfen egitme adim sayisini giriniz\n\n");
                 scanf("%d",&egitme_adim_sayisi);

         //yeni agirliklarin hesaplanmasi

                   u[0][0][0]=0;
                   fu[0][0][0]=0;

       for(i=0;i<egitme_adim_sayisi;i++)
       {

           for(j=0;j<giris_eleman_sayisi;j++)
             {
               u[0][0]=u[0][0]+w[0][j]*x[j][0];
                                  if(u[0][0]>0)
                               fu[0][0]=1;
                                  else
                                     fu[0][0]=-1;


                            }
                             printf("\nu%d degeri= ",i+1);
                   printf("%.3f\t\n",u[0][0]);
                         printf("\nfu%d degeri= ",i+1);
                         printf("%.3f\t\n\n",fu[0][0]);

                         printf("yeni agirliklar (w%d) :\n\n",i+2);
                         for(j=0;j<giris_eleman_sayisi;j++)
                         {
                               w[i+1][j][0]=w[j][0]+fu[0][0]*x[j][0];
                         printf("%.3f\t\n",w[i+1][j][0]);
                               }

                      }

           }
        }break;

    /////////////////////////////////////Perceptron ogrenme kurali//////////////////////////////////////////////////////////////
    case 'b':
    {

    printf("\n-->Perceptron ogrenme kurali ile bir noronun agirliklarinin egitilesi\n\n");
       printf("\nLutfen aktivasyon fonksiyonunun tipini belirleyiniz\n\n");
          printf("\na)..Bipolar surekli  f(u)=[2/(1+exp(-lamda.u))]-1\n\n");
    printf("\nb)..Bipolar binary   f(u)=sgn(u)= +1   ,  u>0\n");
          printf("                -1   ,  u<0\n");
          printf("\nseciminiz = ");
          sec1=getch();

          if (sec1==97||sec1==65)              /////bipolar sürekli/////
           {
           clrscr();
           printf("\n-->Perceptron ogrenme kurali ile bir noronun agirliklarinin egitilesi\n");
         printf("\n-->Aktivasyon fonksiyonunun tipi Bipolar surekli\n\n");
                printf("Giris sayisini(x) belirtiniz (max 6) \n\n");
                scanf("%d",&i);
                giris_sayisi=i;
                printf("\nGiris vektorlerinin eleman sayisini belirtiniz (max 6) \n\n");
                scanf("%d",&j);
                giris_eleman_sayisi=j;

         //giris vektorlerinin girilmesi

                for(i=0;i<giris_sayisi;i++)
           {
                   printf("\n%d. giris vektorunu giriniz\n\n",i+1);
               for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%d",&x[j][0]);
                 }
                   }

         //istenilen cikis degerlerinin girilmesi

              for(i=0;i<giris_sayisi;i++)
         {
                   printf("\n%d. istenilen cikis degerlerini giriniz\n\n",i+1);
                   scanf("%f",&d);
                 }


         //baslangic agirlik vekrorunun girilmesi

                 printf("\nLutfen baslangic agirlik vektorunu giriniz\n\n");
                      for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%f",&w[0][j][0]);
                 }

         //egitme adim sayisinin girilmesi

                 printf("\nLutfen egitme adim sayisini giriniz\n\n");
                 scanf("%d",&egitme_adim_sayisi);

         //yeni agirliklarin hesaplanmasi

                   u[0][0][0]=0;
                   fu[0][0][0]=0;

       for(i=0;i<egitme_adim_sayisi;i++)
       {

           for(j=0;j<giris_eleman_sayisi;j++)
             {
               u[0][0]=u[0][0]+w[0][j]*x[j][0];

                               fu[0][0]=2/(1+exp(-1*u[0][0]))-1 ;

                                r=d-1*fu[0][0];

                            }
                             printf("\nu%d degeri= ",i+1);
                   printf("%.3f\t\n",u[0][0]);
                         printf("\nfu%d degeri= ",i+1);
                         printf("%.3f\t\n\n",fu[0][0]);

                         printf("yeni agirliklar (w%d) :\n\n",i+2);
                         for(j=0;j<giris_eleman_sayisi;j++)
                         {

                               w[i+1][j][0]=w[j][0]+r*x[j][0];
                         printf("%.3f\t\n",w[i+1][j][0]);
                               }

                      }

           }


          if(sec1==98||sec1==66)               /////bipolar binary/////
           {
           clrscr();
           printf("\n-->Hebb ogrenme kurali ile bir noronun agirliklarinin egitilesi\n");
         printf("\n-->Aktivasyon fonksiyonunun tipi Bipolar binary\n\n");
                printf("Giris sayisini(x) belirtiniz (max 6) \n\n");
                scanf("%d",&i);
                giris_sayisi=i;
                printf("\nGiris vektorlerinin eleman sayisini belirtiniz (max 6) \n\n");
                scanf("%d",&j);
                giris_eleman_sayisi=j;

         //giris vektorlerinin girilmesi

                for(i=0;i<giris_sayisi;i++)
           {
                   printf("\n%d. giris vektorunu giriniz\n\n",i+1);
               for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%d",&x[j][0]);
                 }
                   }

         //istenilen cikis degerlerinin girilmesi

              for(i=0;i<giris_sayisi;i++)
         {
                   printf("\n%d. istenilen cikis degerlerini giriniz\n\n",i+1);
                   scanf("%f",&d);
                 }


         //baslangic agirlik vekrorunun girilmesi

                 printf("\nLutfen baslangic agirlik vektorunu giriniz\n\n");
                      for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%f",&w[0][j][0]);
                 }


         //egitme adim sayisinin girilmesi

                 printf("\nLutfen egitme adim sayisini giriniz\n\n");
                 scanf("%d",&egitme_adim_sayisi);

         //yeni agirliklarin hesaplanmasi

                   u[0][0][0]=0;
                   fu[0][0][0]=0;

       for(i=0;i<egitme_adim_sayisi;i++)
       {

           for(j=0;j<giris_eleman_sayisi;j++)
             {
               u[0][0]=u[0][0]+w[0][j]*x[j][0];
                                  if(u[0][0]>0)
                               fu[0][0]=1;
                                  else
                                     fu[0][0]=-1;

                                r=d-1*fu[0][0];

                            }
                             printf("\nu%d degeri= ",i+1);
                   printf("%.3f\t\n",u[0][0]);
                         printf("\nfu%d degeri= ",i+1);
                         printf("%.3f\t\n\n",fu[0][0]);

                         printf("yeni agirliklar (w%d) :\n\n",i+2);
                         for(j=0;j<giris_eleman_sayisi;j++)
                         {

                               w[i+1][j][0]=w[j][0]+r*x[j][0];
                         printf("%.3f\t\n",w[i+1][j][0]);
                               }

                      }

           }
        }break;

    /////////////////////////////////////Delta ogrenme kurali//////////////////////////////////////////////////////////////
    case 'c':
    {


           printf("\n-->Delta ogrenme kurali ile bir noronun agirliklarinin egitilesi\n");
         printf("\n-->Aktivasyon fonksiyonunun tipi Bipolar surekli \n\n");
                printf("\n               f(u)=[2/(1+exp(-lamda.u))]-1\n\n\n");
                printf("Giris sayisini(x) belirtiniz (max 6) \n\n");
                scanf("%d",&i);
                giris_sayisi=i;
                printf("\nGiris vektorlerinin eleman sayisini belirtiniz (max 6) \n\n");
                scanf("%d",&j);
                giris_eleman_sayisi=j;

         //giris vektorlerinin girilmesi

                for(i=0;i<giris_sayisi;i++)
           {printf("\n%d. giris vektorunu giriniz\n\n",i+1);
               for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%d",&x[j][0]);
                 }
                   }
         //istenilen cikis degerlerinin girilmesi

               for(i=0;i<giris_sayisi;i++)
         {
                   printf("\n%d. istenilen cikis degerlerini giriniz\n\n",i+1);
                     scanf("%f",&d);
                  }

         //baslangic agirlik vekrorunun girilmesi

                 printf("\nLutfen baslangic agirlik vektorunu giriniz\n\n");
                      for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%f",&w[0][j][0]);
                 }

         //egitme adim sayisinin girilmesi

                 printf("\nLutfen egitme adim sayisini giriniz\n\n");
                 scanf("%d",&egitme_adim_sayisi);



         //yeni agirliklarin hesaplanmasi

                   u[0][0][0]=0;
                   fu[0][0][0]=0;

       for(i=0;i<egitme_adim_sayisi;i++)
       {

           for(j=0;j<giris_eleman_sayisi;j++)
             {
               u[0][0]=u[0][0]+w[0][j]*x[j][0];
                               fu[0][0]=2/(1+exp(-1*u[0][0]))-1 ;
                            }
                             printf("\nu%d degeri= ",i+1);
                   printf("%.3f\t\n",u[0][0]);
                         printf("\nfu%d degeri= ",i+1);
                         printf("%.3f\t\n\n",fu[0][0]);

                         printf("yeni agirliklar (w%d) :\n\n",i+2);
                         for(j=0;j<giris_eleman_sayisi;j++)
                         {
                               w[i+1][j][0]=w[j][0]+(1/8)*(d-fu[0][0])*(1-(fu[0][0]*fu[0][0]))*x[j][0];
                         printf("%.3f\t\n",w[i+1][j][0]);
                               }

                      }


        }break;

    /////////////////////////////////////Widrow-Hoff ogrenme kurali//////////////////////////////////////////////////////////////
    case 'd':
    {


           printf("\n-->Widrow-Hoff ogrenme kurali ile bir noronun agirliklarinin egitilesi\n\n\n");
                printf("Giris sayisini(x) belirtiniz (max 6) \n\n");
                scanf("%d",&i);
                giris_sayisi=i;
                printf("\nGiris vektorlerinin eleman sayisini belirtiniz (max 6) \n\n");
                scanf("%d",&j);
                giris_eleman_sayisi=j;

         //giris vektorlerinin girilmesi

                for(i=0;i<giris_sayisi;i++)
           {printf("\n%d. giris vektorunu giriniz\n\n",i+1);
               for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%d",&x[j][0]);
                 }
                   }
         //istenilen cikis degerlerinin girilmesi

               for(i=0;i<giris_sayisi;i++)
         {
                   printf("\n%d. istenilen cikis degerlerini giriniz\n\n",i+1);
                     scanf("%f",&d);
                  }

         //baslangic agirlik vekrorunun girilmesi

                 printf("\nLutfen baslangic agirlik vektorunu giriniz\n\n");
                      for(j=0;j<giris_eleman_sayisi;j++)
                 {
                         scanf("%f",&w[0][j][0]);
                 }

         //egitme adim sayisinin girilmesi

                 printf("\nLutfen egitme adim sayisini giriniz\n\n");
                 scanf("%d",&egitme_adim_sayisi);



         //yeni agirliklarin hesaplanmasi

                   u[0][0][0]=0;

       for(i=0;i<egitme_adim_sayisi;i++)
       {

           for(j=0;j<giris_eleman_sayisi;j++)
             {
               u[0][0]=u[0][0]+w[0][j]*x[j][0];

                            }
                             printf("\nu%d degeri= ",i+1);
                   printf("%.3f\t\n",u[0][0]);
                               r=d-u[0][0];
                             printf("r%d degeri= ",i+1);
                   printf("%.3f\t\n\n",r);

                         printf("yeni agirliklar (w%d) :\n\n",i+2);
                         for(j=0;j<giris_eleman_sayisi;j++)
                         {
                               w[i+1][j][0]=w[j][0]+(1/4)*r*x[j][0];
                         printf("%.3f\t\n",w[i+1][j][0]);

                              
                               }

                      }


         }break;

       default:printf("\n\nHatali Secim...!  a,b,c veya d seceneklerinden biri secilebilir.");

       goto tekrar;

    }

    getch();
    return(0);

    }


     


     


     


    Daha geniş bilgiler verirseniz sevirim. Teşekkürler...

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MaD_BoY
    MaD_BoY's avatar
    Kayıt Tarihi: 12/Ocak/2003
    Erkek

    SuNNeTcHi_eFhEnDy bunu yazdı:



    a.k tam kodlama ya merak sarıorum şak biri böle uzun bişey yazıo a.k diorum ben hiç başlamayim =D .. hevesimi kırmayın ya



    Bence Tam tersi boyle seyler gorunce bir heves gelmeli. Bende Yakın zamanda bunun gibi seyler yazacagım demelisin.


    Bende iyi bir programci degilim ama baslayinca ilk dakikalarda ne kadar sıkıcı geldigini daha sonraları ise
    ortaya boyle sanki ise yarar birseyler yaptım ben dedigin programciklar cikmaya baslayınca Hevesin iyice artacak.


    ve daha sonra Cok iyi seyler yapacaksin.


     


    YSA ile ilgili Benimde Yuksek okulda Bununla ilgil web sitesi yapma odevim vardı.
    Bir seyler yaptim ama hep sagdan soldan yazıları kopyaladıgım icin hic bir isime yaramamıstı.


    Geç olmadan, Güç olmadan, Çözüm istiyorum, çözüm, iş işten geçmeden, bu dünyadan göçmeden, Ben ölmeden ....
Toplam Hit: 2898 Toplam Mesaj: 2