YAPAY SİNİR AĞLARI

Yapay sinir ağları sinapslara benzer ve bunu temel alarak bir öğrenme modeli oluşturur. Tek katmanlı (single-layer) ve çok katmanlı (multi-layer) olarak iki farklı yapıya ayrılırlar. Çok katmanlı yapay sinir ağlarına birden fazla gizli katman (hidden-layer) ekleyerek daha iyi sonuç elde edebiliriz. Ayrıca hangi aktivasyon fonksiyonunu belirlediğimiz de önemlidir.

Burada verilen bir veri seti üzerinde Matlab’de bu veri setini eğiterek sonuca ulaşmaya çalışacağız.

Bir Elektrik motorunun zamana bağlı ölçülen değerleri aşağıda verilmiştir. Bu
değerleri kullanarak Matlab te ileri beslemeli sinir ağı kullanarak motorun durumunu tespit etmek için m file yazınız. Ağa ait bütün parametreleri komut satırından giriniz. Ayrıca ağırlık ve eşik değerlerini başlangıçta değerlerini rastgele atama yapınız.
Ağın performansını ve Öğrenme durumunu gösteren grafiklerini, giriş verileri ile elde edilenler arasındaki ilişkiyi gösteren
grafikleri ve tercih ettiğiniz ağ topolojisini açıklayınız.

Bize verilen örnek elektrik motorunun zamana bağlı durumu gözükmektedir. Motorun 4 farklı durumu bulunmaktadır. Bunlar duruş, kalkış, kısa devre ve normal çalışma olarak tanımlanmış. Bizlere ileri beslemeli sinir ağı yapısını kullanarak ağı eğitip sonuçlara ulaşmamızı istemiştir. Ayrıca ağa ait sinir hücresi sayısı ve iterasyon değerlerini kendimizin belirlememizi istemiş.

Tabloya baktığımızda zaman içerisinde değişkenlik gösteren 3 ayrı değer ve bunları sonuçları olarak bizlere verdiği 4 adet farklı durumlara sahip 10 birimlik bir vektör bulunuyor. Çözüm olarak matlabı kullanacağız ve verileri elle gireceğiz. Ayrıca veriler bir excel dosyasında oluşturulup matlab’e import edilebilir.

Bizden yalnızca ileri beslemeli istediği istediği için zaman verisini kullanmayacağız. Ancak zaman serisi deseydi timeseriesfeedforwardnet çözümünü kullanabilirdik.

B=[0 8 10 25 20 18 20 12 11 12];
akim=B;

Akım değerlerini sırasıyla girdik

C=[100 95 86 75 70 80 70 84 88 90];
gerilim=C;

Daha sonra gerilim değerleri,

D=[0 12 325 450 600 700 735 750 740 750];
devir=D;

Son olarak da devir değerlerini sırası ile girdik. Burada dikkat edilmesi gereken vektör uzunluğunun eşit olması gerektiğidir.

Girdiğimiz veriler giriş vektörleridir. Bu vektörlerin tamamını tek bir matrisde gösterelim.

giris=[akim; gerilim; devir;];

Giriş verilerini tek bir matrisde gösterdik. Şimdi bizim eğitim için sinir ağına bir hedef (target) verisi vermemiz gerekiyor.

E=[0 0.25 0.25 0.75 0.75 0.75 0.75 1 1 1];
hedef=E;

Optimizasyon genelde 0-1 arası yapıldığı için ben de bu şekilde yaptım ancak artan bir vektör olarak göstermemin hata olduğunu da biliyorum. Siz daha iyi optimizasyon yapabilirsiniz.

0 ->Duruş 0,25 ->Kalkış 0,75 ->Kısa devre 1 ->Normal Çalışma

Giriş değerlerini matris içerisinde tanımladık. Çıkış değerlerini de tek boyutlu dizi (vektör) şeklinde oluşturduk. Şimdi sıra sinir hücresi sayısını (ağın boyutunu) belirleyip, giriş verilerinin orta noktasını belirleyip ağırlık değerleri olarak belirlemektir. Bu işlemleri ise;

neuron_size=input('Sinir Hücresi Sayısını giriniz');
net=competlayer(neuron_size);
wts = midpoint(neuron_size,giris)
biases = initcon(neuron_size)

Bias değerlerini sinir hücresi sayısı kadar aldık. Şimdi ağımızı oluşturalım.

net=feedforwardnet([10 5]);

Ağımızı ileri beslemeli sinir ağı olarak eğitmemizi istediği için feedforwardnet() fonksiyonunu kullanıyoruz. Köşeli parantez içerisinde ise gizli katman (hidden-layer) sayısını belirliyoruz. Hidden layerlar daha komplike problemlerde çözüme ulaşmak için de kullanılabilir. Ayrıca hidden-layer olmadan da çözümleme yapabilirsiniz.

Şimdi kullanacağımız iterasyon sayısını kullanıcıdan isteyelim.

epoch_sayisi=input('İterasyon miktarını giriniz:');
net.trainParam.epochs=epoch_sayisi;

Kullanacağımız iterasyon sayısını kendimiz belirlememiz problemi ikinci ve üçüncü defa eğitecek olursan hangi iterasyonda çözüme daha fazla yaklaşacağı hususunda bizlere bilgi sağlar. Şimdi eğitimdeki maksimum doğrulama hata sayısını ve eğitimin süresini girelim (inf=infinity).

net.trainParam.max_fail=10;
net.trainParam.time=inf;

Şimdi giriş matrisini grafik olarak çizdirelim. Daha sonra sırasıyla ağ, giriş ve hedef verilerini verip ağı eğitelim. Son olarak giriş verilerini ağa vererek eğitilmiş ağın tahmin edilen değerlerini oluşturalım.

plot(giris)
net=train(net,giris,hedef);
y=net(giris)

Sinir hücresinin ağırlık ve eşik değerlerini gösterelim. Son olarak ise eğitim de ulaştığımız çıktı değerlerini ve hedef değerlerini art arda gösterip görüntüleyelim.


disp('Çıktılar:');
y
disp('Hedef Değerleri:');
hedef

Elde ettiğimiz çıktı değerleri aşağıda gösterilmektedir.

Sinir Hücresi Sayısını giriniz5

wts =

   12.5000   85.0000  375.0000
   12.5000   85.0000  375.0000
   12.5000   85.0000  375.0000


biases =

   13.5914
   13.5914
   13.5914
   13.5914
   13.5914

İterasyon miktarını giriniz:25

y =

  Columns 1 through 9

   -0.2708   -0.2873    0.6454    0.5802    0.5780    0.8496    0.6967    0.9220    0.9315

  Column 10

    0.9224

Sinir Hücresinin Ağırlık Değerleri

ans =

   -1.3870    1.5663    2.1508
    1.4340   -1.9245   -1.8835
    1.2740    0.0865    2.6388
   -2.1760    1.2914   -1.6081
   -1.5975    1.6598    1.9138
   -0.0420    2.8726   -1.0065
    2.5083    0.2690   -1.6927
   -1.0327   -2.3328   -1.6088
    0.6780   -2.7898    0.9256
   -2.2622   -1.9837   -0.2204

Sinir Hücresinin Eşik Değerleri

ans =

    3.0409
   -2.2991
   -1.7836
    1.0313
    0.1602
   -0.1922
    0.9234
   -1.6787
    2.3483
   -3.0124

Çıktılar:

y =

  Columns 1 through 9

   -0.2708   -0.2873    0.6454    0.5802    0.5780    0.8496    0.6967    0.9220    0.9315

  Column 10

    0.9224

Hedef Değerleri:

hedef =

  Columns 1 through 9

         0    0.2500    0.2500    0.7500    0.7500    0.7500    0.7500    1.0000    1.0000

  Column 10

    1.0000

Şimdi ulaştığımız sonuçları gözlemleyelim. İlk değerlerde hedef değerlere göre daha az yakınsayan sonuçlar gözükse de sonlara doğru sonuçlara daha fazla yakınlaştığını görüyoruz.

Oluşturduğumuz ağ yapısı yukarıda gözükmektedir.
Ağ Grafiği
5 İterasyon sonunda ölçü değerinin hedef değere yakınsamasını görmektesiniz. Gradyan değerinin düşmesi sonuca yaklaştığımız anlamına geliyor. 10^-8 de en doğru sonuca ulaştığını görüyoruz
4. Grafiği incelediğimizde verdiğimiz hedef verilerine %86 oranında yakınlaştığını görüyoruz. Yani bu veri setinin ilk eğitiminde %86’lık sonuç elde ettik. Birkaç defa eğiterek daha yüksek sonuçlara ulaşabiliriz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir