Yapay Sinir Ağları (Ysa)
-
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...
-
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 yaBence 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ı.
