HERSEY BURDA
Would you like to react to this message? Create an account in a few clicks or log in to continue.

HERSEY BURDA

HERSEYİ BULABİLDECEĞİN TEK ADRES
 
AnasayfaLatest imagesAramaKayıt OlGiriş yap
Arama
 
 

Sonuç :
 
Rechercher çıkıntı araştırma
En son konular
» free slot machines win cash
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimeÇarş. Ağus. 03, 2011 3:57 am tarafından Misafir

» watch naruto hentai watch naruto hentai free
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimeÇarş. Ağus. 03, 2011 3:52 am tarafından Misafir

» major fish oil
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimeSalı Ağus. 02, 2011 10:26 pm tarafından Misafir

» hentai about hentai academy
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimeSalı Ağus. 02, 2011 10:10 am tarafından Misafir

» гинекология ответы
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimePtsi Ağus. 01, 2011 9:18 am tarafından Misafir

» x-Hack hack you
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimePtsi Ağus. 01, 2011 8:00 am tarafından Misafir

» When the first Whirlpool Duet album was released in December 2001
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimePtsi Ağus. 01, 2011 3:05 am tarafından Misafir

» women at work hentai online women at work hentai stream
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimePtsi Ağus. 01, 2011 2:56 am tarafından Misafir

» facebook likes xb
Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimePaz Tem. 31, 2011 9:22 am tarafından Misafir

Tarıyıcı
 Kapı
 Indeks
 Üye Listesi
 Profil
 SSS
 Arama
Forum
HABERLER
Fikri Türkel köşe yazıları

 

 Yapay Sinir Ağları ve MATLAB ile kullanımı

Aşağa gitmek 
YazarMesaj
Admin
Admin



Mesaj Sayısı : 3361
KULLANICI PUANLARI : 9918
Kayıt tarihi : 16/05/10

Yapay Sinir Ağları ve MATLAB ile kullanımı Empty
MesajKonu: Yapay Sinir Ağları ve MATLAB ile kullanımı   Yapay Sinir Ağları ve MATLAB ile kullanımı Icon_minitimeSalı Haz. 29, 2010 4:21 pm

Yapay Sinir Ağları ve MATLAB ile kullanımı

Tarih: 25.02.2007 > Kaç kez okundu? 10914
Yapay Sinir Ağı (YSA) nedir? Nöron modeli, Çok katmanlı perseptron (MLP) yapısı, ileri beslemeli (feed forward) geriye yayılımlı (back propagation) ağlar, ön işleme seçenekleri (normalizasyon ve PCA) ve örnek problemler içeren bir 'tutorial'





YAPAY SİNİR AĞLARI ve MATLAB ile KULLANIMI

Sinir ağları, nöron ismi verilen hesaplama elemanlarının paralel bir şekilde çalışmasından meydana gelir. Bu elemanlar biyolojik sinir sistemlerinden esinlenerek tasarlanmıştır. Belirli bir fonksiyonu gerçekleştirmek için bir sinir ağını, elemanlar arasındaki bağlantıların (ağırlıkların) değerlerini ayarlayarak eğitebiliriz.

Genelde, sinir ağları eğitilerek belirli bir girişe karşılık verilen arzu edilen çıkışı elde ederler. Bu durum aşağıdaki şekilde verilmiştir. Ağın çıkışı arzu edilen hedefe ulaşıncaya kadar çıkış ile hedef karşılaştırılarak ağın eğitimi (ağırlık değerlerlerinin ayarlanması) gerçekleştirilir. En basit tanımıyla yapay sinir ağları, bilinen en iyi eğri uydurma tekniklerinden birisidir.



Sinir ağları, örüntü tanıma, kimliklendirme, sınıflandırma, konuşma işleme, bilgisayarla görü ve kontrol sistemleri gibi karmaşık problemler içeren pek çok sahada kullanılmaktadır.

Nöron Modeli

Basit bir yapay nöron, bir ya da birden çok skaler girişe ve bir çıkışa sahip olan bir hesaplama elemanıdır. Tek girişli nöron modeli aşağıda verilmiştir.



burada, p: nöronun girişi olan skaler değeri, w: p girişi ile nöron arasındaki ağırlık değerini, b: nöronun bias değerini, f: transfer fonksiyonunu, a: nöronun çıkışını belirtmektedir. p girişi önce w ağırlığı ile çarpılır. Ardından b bias değeri ile toplanır ve transfer fonksiyonundan geçirilerek a çıkışı hesaplanır. Transfer fonksiyonu doğrusal ya da doğrusal olmayan türevlenebilir bir fonksiyondur. İşte bu basit nöron modelinde, giriş ile çıkış arasında basit bir matematiksel bağıntı kurulmuştur. Fakat nöronun arzu edilen çıkışı verebilmesi için w ve b ağırlık değerlerinin optimum olacak şekilde ayarlanması gerekmektedir.

Birden fazla girişi olan nöron modeli aşağıda verilmiştir.



burada, R nöronun giriş sayısıdır. Görüleceği üzere giriş sayısı kadar da w ağırlık değeri vardır. Bu durumda yukardaki modelin matematiksel ifadesi şu şekilde olur:



Transfer Fonksiyonları

Bir nöronun çıkışı hesaplanırken çok çeşitli transfer fonksiyonları kullanılabilir. Burada en çok kullanılan 4 transfer fonksiyonu tanıtılacaktır.

1)

Keskin-limitli (hard-limit) transfer fonksiyonunun grafiği yukarıda verilmiştir. Burada, n fonksiyonun girişi, a ise çıkışıdır: a=f (n). Bu fonksiyonda, giriş değeri 0 (sıfır)’dan büyükse çıkış değeri 1 (bir), giriş değeri 0 (sıfır)’dan küçükse çıkış değeri 0 (sıfır) olmaktadır. Genelde sınıflandırma uygulamalarında kullanılmaktadır.

2)

Doğrusal (linear) transfer fonksiyonunun grafiği yukarda verilmiştir. Görüldüğü gibi giriş hiçbir değişikliğe uğramadan aynen çıkmaktadır (a=n). Doğrusal süzgeç problemlerinde sıklıkla kullanılmaktadır.

3)

Sigmoid fonksiyonunun grafiği yukarda verilmiştir. Sigmoid, doğrusal olmayan (non-linear) logaritmik bir fonksiyondur. Giriş değerleri hangi aralıkta olursa olsun, çıkış 0 ile 1 arasında olmaktadır. Türevlenebilir olduğu için geriye yayılım algoritmaları ile kullanılabilir. Doğrusal olmayan problemlerin çözümünde tercih edilmektedir. Matematiksel ifadesi şu şekildedir: a=logsig(n) = 1 / (1 + exp(-n))

4)

Hiperbolik tanjant sigmoid fonksiyonunun grafiği yukarda verilmiştir. Algoritması:

a = tansig(n) = 2/(1+exp(-2*n))-1 olarak verilmiştir.

MATLAB’de kullanabileceğiniz pek çok transfer fonksiyonu bulunmaktadır. Bunların listesine şu adresten erişilebilir.

Çok Katmanlı Perseptron (ÇKP) Ağı (Multi-layer Perceptron)

Yapay sinir ağlarında çok çeşitli ağ yapıları ve modelleri vardır. En çok kullanılan ağ yapılarından birisi ÇKP’dir. Bu ağda bilginin akışı ileri yönlüdür. Öğrenme ve eğitme algoritması olarak genelde türeve dayalı geriye yayılım (back propagation) algoritmaları tercih edilir. Burada, aşağıdaki şekilden de görüleceği üzere nöronlar katmanlar şeklinde organize edilmiştir. Her bir katmanda en az bir nöron bulunur. Bir önceki katmandaki tüm nöronlar bir sonraki katmandaki nöronlara bağlantı içermektedir. Bu şekilde arzu edildiği kadar katman oluşturulabilir. Aşağıdaki şekilde, katman transfer fonksiyonu logsig olan bir perseptron katmanı görülmektedir. Burada, giriş sayısı R, katmandaki nöron sayısı da S olarak verilmiştir.



Aşağıda ise üç katmanlı bir ÇKP YSA yapısı verilmiştir. Burada giriş vektörleri, aslında nöron olmamalarına rağmen bir sonraki katmana herbiri birer çapraz bağlantı içermektedir. 3 adet nöron katmanı bulunmaktadır. Son katman çıkış katmanı olarak da isimlendirilir. Giriş ile çıkış katmanı arasında yer alan katmanlar gizli katman (hidden layer) olarak da anılmaktadır. Bu durumda giriş ile çıkış arasında paralel bir matematiksel ilişki kurulmuş olur. Uygun bir öğrenme algoritması ile ağırlık değerleri ağın arzu edilen çıkışını verecek şekilde ayarlanmaktadır.



MATLAB’de İleri Beslemeli (Feed Forward) ÇKP Ağların Tasarımı

Öncelikle bu ağ yapısını kullanabilmek için bir ileri beslemeli ağ nesnesi oluşturmamız gerekir. MATLAB’deki newff komutu bu işlemi gerçekleştirmektedir. newff komutunun yazım biçimi aşağıda verilmiştir:

net = newff(PR,[S1 S2…SNl],{TF1 TF2…TFNl},BTF,BLF,PF)

Burada;

PR - R elemanlı giriş vektörünün minimum ve maksimum değerlerini içeren Rx2 ‘lik matris.
Si - i’nci katmanda bulunan nöron sayısı.
TFi - i’nci katmanın transfer fonksiyonu, varsayılan= 'tansig'.
BTF - Geriye yayılım ağ eğitim fonksiyonu, varsayılan = 'trainlm'.
BLF - Geriye yayılım ağırlık/bias öğrenme fonksiyonu, varsayılan = 'learngdm'.
PF - Performans fonksiyonu, varsayılan = 'mse' dir.

Aşağıdaki kod ile 2 katmanlı bir ağ oluşturmaktayız. Bu problemde iki elamanlı bir giriş vektörü vardır. Giriş vektörünün ilk parametresinin değer aralığı -1 ve 2 olarak belirtilmiştir. İkinci parametrenin değer aralığı ise 0 – 5 olarak verilmiştir. İlk katmanda 3 nöron, ikinci katmanda bir diğer ifadeyle çıkış katmanında ise 1 nöron bulunmaktadır. İlk katmanın transfer fonksiyonu tanjant sigmoid, ikinci katmanınki ise lineer’dir. Öğrenme algoritması, gradyent azaltım algoritması traingd’dir. Problem iki girişli bir çıkışlı bilinmeyen bir sistem olarak düşünülebilir. Amacımız örnek giriş ve çıkış verileri vererek sistemi karakterize etmektir.

net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');

Bu komut ağ nesnesi oluşturur ve aynı zamanda ağırlık ve bias değerlerinin ilklendirme (initialization) işlemini rastgele değerler atamak suretiyle gerçekleştirir. Haliyle ağ eğitime hazır olarak beklemektedir. Bazı durumlarda ağı tekrar ilklendirmek (reset’lemek) gerekebilir. Bu durumda;

net = init(net);

komutu kullanılabilir.

Tasarlanan ağın simulasyonu için sim komutu kullanılır. Similasyon’dan kasıt, ağa bir giriş değeri verip ağın çıkışını hesaplatmaktır.

p = [1;2];
a = sim(net,p)
a =
-0.1011

Burada p ağın giriş verisini temsil etmektedir. Ağın iki girişi olduğu için p matrisi iki satırdan meydana gelmektedir. Görüleceği üzere ağ bir çıkış üretmektedir. Ancak bu, ağ henüz eğitilmediği ve ağırlık değerleri rastgele atandığı için arzu edilen çıkış değildir. Bu komutları kendi bilgisayarınızda çalıştırdığınızda muhtemelen farklı bir çıkış elde edeceksiniz. Çünkü ağırlık değerleri ilklendirilirken rastgele olarak atanmaktadır.

Diğer bir yandan ağı çoklu örneklerle de simüle edebilirsiniz.

p = [1 3 2;2 4 1];
a=sim(net,p)
a =
-0.1011 -0.2308 0.4955

Burada iki girişli ağ için 3’er adet değer verilmiştir. Haliyle ağ her bir örnek için bir çıkış üretmiştir. Buradan açıkça görülüyorki ağın girişi için (simulasyon veya eğitim aşamasında) organize edilecek matrisin satırları parametrelere, sütunları ise örneklere karşılık gelmektedir.

Ağırlıklar ve bias değerleri ilklendirildikten sonra ağ eğitime hazırdır. Eğitim işleminde ağın davranışını ortaya koyacak giriş (p) ve çıkış (t) verileri gereklidir. Bunlar eğitim verisi olarak adlandırılır. Eğitim verileri çözüm uzayının tamamını veya en azından büyük bölümünü temsil edecek şekilde seçilmelidir. Eğitim esnasında ağırlık ve bias değerleri iteratif olarak hata fonksiyonunu minimize edecek şekilde güncellenir. Hata fonksiyonunun MSE olması durumunda hata, arzu edilen çıkış (t) ile ağın o anki çıkışı arasındaki farkın karesinin ortalamasıdır.

YSA’da kullanılan en temel öğrenme algoritması geriye yayılım (back propagation) algoritmasıdır. Basit anlamda ağırlıklar negatif gradyent yönünde güncellenir. Pek çok geriye yayılım algoritması vardır. En temel yapısı şu şekildedir:



burada, ağırlık vektörünün k anındaki değerlerini, k anındaki gradyenti, ise öğrenme oranını temsil etmektedir.

Toplu gradyent azaltım (batch gradient descent) eğitme algoritması MATLAB’de traingd ile temsil edilir.

Verdiğimiz problemin eğitim verilerini oluşturup ağın eğitimini şu şekilde gerçekleştirebiliriz:

p = [-1 -1 2 2;0 5 0 5];
t = [-1 -1 1 1];

burada, p matrisi ağın eğitimi için kullanılacak giriş verisini temsil etmektedir. Görüldüğü üzere 2 satırdan ve 4 sütundan oluşmaktadır. Problem iki parametreli olduğu için satır sayısı 2’dir. Ağın eğitimi için ise 4 örnek verilmektedir. Ağın çıkışını t matrisi temsil etmektedir. Tek satır olduğuna göre tek çıkış parametresi vardır (hatırlanırsa sistemimiz 2 girişili 1 çıkışlıdır). Her bir örnek için birer çıkış verilmiştir. Daha açık bir ifadeyle verilen sistemin doğruluk tablosu şu şekildedir:

p1

p2

t

-1

0

-1

-1

5

-1

2

0

1

2

5

1

Ağın eğitimi ile ilgili temel parametreleri şu şekilde düzenleyebilirsiniz:

net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.epochs = 300;
net.trainParam.goal = 1e-5;

burada, show parametresi kaç iterasyonda bir eğitim durumunun MATLAB ekranına aktarılacağını belirmekte, epoch parametresi iterasyon sayısını, goal parametresi hedeflenen hata değerini, lr ise geriye yayılım algoritması için öğrenme oranını belirtmektedir. epoch veya goal parametrelerinden birisi sağlandığında eğitim işlemi durdurulacaktır.

Ağın eğitimine başlamak için train komutu kullanılır.

[net,tr]=train(net,p,t);
TRAINGD, Epoch 0/300, MSE 1.59423/1e-05, Gradient 2.76799/1e-10
TRAINGD, Epoch 50/300, MSE 0.00236382/1e-05, Gradient 0.0495292/1e-10
TRAINGD, Epoch 100/300, MSE 0.000435947/1e-05, Gradient 0.0161202/1e-10
TRAINGD, Epoch 150/300, MSE 8.68462e-05/1e-05, Gradient 0.00769588/1e-10
TRAINGD, Epoch 200/300, MSE 1.45042e-05/1e-05, Gradient 0.00325667/1e-10
TRAINGD, Epoch 211/300, MSE 9.64816e-06/1e-05, Gradient 0.00266775/1e-10
TRAINGD, Performance goal met.

Görüleceği üzere 211. iterasyonda hedeflenen hata oranına erişilmiş ve ağın eğitimi durdurulumuştur. Ağın eğitilip eğitilmediğini test etmek için giriş verisi (p) ile ağı tekrar simule edelim:

a = sim(net,p)
a =
-1.0010 -0.9989 1.0018 0.9985

Görüleceği üzere ağ arzu edilen çıkışları sağlamaktadır. Yani YSA verilen sistemi modellemiştir. Sistemin girişi ve çıkışı arasındaki bağıntıyı bulmuştur. Bunuda uygun ağırlık değerlerini seçerek yapmıştır. Bu aşamadan sonra eğitim verisinde kullanmadığımız yeni veriler vererek ağı test edebiliriz.

MATLAB’de kullanabileceğimiz pek çok eğitim algoritması bulunmaktadır. En temel algoritma yukarda bahsedilen geriye yayılım tabanlı toplu gradyent azaltım algoritmasıdır. Fakat MATLAB’de varsayılan eğitim algoritması olarak Levenberg-Marquardt (trainlm) seçilmiştir. Bu algoritma çok hızlıdır ancak çalışabilmesi için fazla hafızaya ihtiyaç duymaktadır. Bunların yanı sıra trainbfg ve trainrp algoritmaları da tercih edilebilir.

Ön-işleme Seçenekleri (Pre-processing)

Bazı temel ön işlemleri gerçekleştirerek YSA’nın eğitim ve öğrenme performanısını artırabilirsiniz. En temel ön-işleme yöntemlerden birisi giriş verilerinin normalize edilmesidir. premnmx komutu ile giriş ve çıkış verilerini -1 ile 1 arasına ölçekleyebilirsiniz:

[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);
net = train(net,pn,tn);

Eğitimden sonra simulasyon aşamasında ise normalize edilen verilerin tekrar eski haline çevrilmesi gerekmektedir. Bu işlem için postmnmx komutu kullanılır.

an = sim(net,pn);
[a] = postmnmx(an,mint,maxt);

Bir diğer normalizasyon yöntemi de verilerin ortalamasını 0 ve standart sapmasını -1 olacak şekilde yeniden düzenlemekdir. Bu amaç için prestd ve poststd komutları kullanılmaktadır.

p = [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93];
t = [-0.08 3.4 -0.82 0.69 3.1];
[pn,meanp,stdp,tn,meant,stdt] = prestd(p,t);
net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');
net = train(net,pn,tn);
an = sim(net,pn);
a = poststd(an,meant,stdt);

Bazı durumlarda ağın girişi çok fazladır. Bu durumlarda eğitim işlemi çok uzun sürmektedir. Eğer giriş verileri arasında birbirleri ile ilintili veriler varsa bunlar ağın eğitimi için bir katkıda bulunmayacaktır. Temel bileşen analizi (principle component analysis - PCA) adı verilen teknikle ağın eğitimine katkıda bulunmayacak veriler indirgenerek giriş verisi azaltılabilir. Böylece giriş verilerinin kendi aralarında korelasyonlu olması engellenmiş olur.

p=[-1.5 -0.58 0.21 -0.96 -0.79; -2.2 -0.87 0.31 -1.4 -1.2];
[pn,meanp,stdp] = prestd(p);
[ptrans,transMat] = prepca(pn,0.02);

Buradaki örnekte giriş verisinin ikinci satırı birinci satırın yaklaşık olarak belli bir katsayı ile çarpılmış halidir. Temel bileşen analizi sonucunda iki parametreli giriş vektörü tek parametreli hale getirilmiştir (ptrans).

Örnek 1: Çarpım Tablosunun YSA’na Öğretilmesi

Çarpma işlemi doğrusal olmayan bir işlemdir ve yapay zekâ için zor bir problemdir. Bu örnekte 1 ile 10 arasındaki sayıların çarpım işlemi YSA’ya öğretilmiştir. Çarpma işleminde iki giriş ve bir çıkış vardır. Eğitimde 20 adet rastgele sayı seçilmiş ve test aşamasında yine 20 adet rastgele sayı seçilerek sistemin performansı oraya konmuştur.

clear all, close all,clc;
p=round(rand(2,20)*10) % Giris verisi 2x20’lik matris, rastgele 0-10
t = p(1,Smile.*p(2,Smile % Cikis verisi p1*p2

%Normalizasyon islemi
[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);

%YSA’nin tasarimi, egitimi ve simulasyonu
net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');
net = train(net,pn,tn);
an = sim(net,pn);
[a] = postmnmx(an,mint,maxt); %Normalizasyonun tersi

%Egitim verilerinin gercek ve YSA cikisinin gosterimi
figure(1),plot3(p(1,Smile,p(2,Smile,t,'o');
hold on,plot3(p(1,Smile,p(2,Smile,a,'r*'),grid on;
legend('Gerçek deger','YSA cikisi'),xlabel('p1'),ylabel('p2'),zlabel('t'),title('Egitim verisi')

%Test verilerinin hazirlanmasi, farkli 20 adet ornek
ptest=round(rand(2,20)*10)
ttest = ptest(1,Smile.*ptest(2,Smile
[ptn,minpt,maxpt,ttn,mintt,maxtt] = premnmx(ptest,ttest);
atn = sim(net,ptn); %Simulasyon
[at] = postmnmx(atn,mintt,maxtt);

%Test verilerinin gercek ve YSA cikisinin gosterimi
figure(2),plot3(ptest(1,Smile,ptest(2,Smile,ttest,'o');
hold on,plot3(ptest(1,Smile,ptest(2,Smile,at,'r*'),grid on;
legend('Gerçek deger','YSA cikisi'),xlabel('p1'),ylabel('p2'),zlabel('t'),title('Test verisi')







Kaynak: H. Demuth, M. Beale, M. Hagan, "Neural Network Toolbox, for use with MATLAB", "User Guide Version 5", Mathworks, 2006.

Derleyen:
Rifat KURBAN
Bilgisayar Yük. Müh.

rkurban [ a.t ] erciyes edu tr



Sayfa başına dön Aşağa gitmek
http://dessas.yetkinforum.com
 
Yapay Sinir Ağları ve MATLAB ile kullanımı
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Hamilelikte Folik Asit Kullanımı
» Şirketler sosyal ağları nasıl yönetmeli?
» kadınların kadınları sinir eden özellikleri
» Yapay Zeka (film)
» Erciyes’te yapay kar sevinci

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
HERSEY BURDA :: SORU - CEVAP - EN EŞKİ SÖZLÜK :: TEKNOLOJİ - İNTERNET-
Buraya geçin: