1. a)

Transkript

1. a)
Yapay Sinir Ağları Ödev 1
Öğrenci No: 081501014
Muhammet Emre Irmak
Çözümler
1. a)
Eğitim kümesinin verileri oluşturulurken matlabda rastgele değişkenler oluşturmak için rand
komutu kullanılmıştır. Ayrıca 4x8’lik her bir matris oluşturulan matriste tek bir satırda
oluşturulmuştur. Yani 32 elemanlık bir satır, bir 4x8’lik matrisi temsil etmektedir.Ardından
temiz isimli bir matris oluşturulmuştur. Bu matris ise hatasız olan 4x8’lik matrisi temsil
etmektedir. Daha sonra oluşturulan girdi matrisindeki verilerin satırları değiştirilip aralara
“temiz” matrisler yerleştirilerek , bir doğru bir hatalı satırlardan oluşan 30x32 lik bir matris
elde edilmiştir. A matrisi bu girdi matrisidir. Daha sonrasında veriler 0 dan büyük olduğu için
ve ayrıca ağın eğitimi sırasında “logsig” transfer fonksiyonu kullanılacağından verilerin 0-1
arasında olması için aşağıdaki “normalizasyon “ fonksiyonu kullanılmıştır. Bu sayede değeri 1
olan veriler 0.9 , 0 olan veriler 0.1 değeri almıştır.
for i=1:30
for j=1:32
A(i,j)=0.8*A(i,j)+0.1
j=j+1
end
i=i+1
end
temiz=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 ]
Çıktı verisi ve normalizsayonu
C=[0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1]
for i=1:30
C(1,i)=0.8*C(1,i)+0.1
end
Çıktı verilerinin normalize edilmiş hali
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
Girdi verileri
Not: Matlabda verilerin yatay olarak girilmesi gerekmektedir , bundan dolay oluşturulan A
matrisinin A=A’ kodu ile transpozu alınmıştır.
Test kümeside aynı şekilde 5x32’lik bir matris rastgele matris oluşturulmuş ardından temiz
matrisi arala serpiştirilerek aynı eğitim kümesinde olduğu gibi bir hatalı bir düzgün matris
olacak şekilde 10x32 lik bir test matrisi oluşturulmuştur.Yine veriler matlabda yatay olarak
girileceğinden T=T’ kodu ile matrisin transpozu alınmıştır.
T = randi([0 1],5,32);
T(7,:)=T(2,:)
T(9,:)=T(4,:)
T(2,:)=temiz
T(4,:)=temiz
T(6,:)=temiz
T(8,:)=temiz
T(10,:)=temiz
for i=1:10
for j=1:32
T(i,j)=0.8*T(i,j)+0.1
j=j+1
end
i=i+1
end
T=T’
Test Kümesi Matrisi
0,9
0,1
0,9 0,1
0,1 0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,1 0,1
0,1 0,1
0,1
0,1
0,9
0,1
0,1
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,1
0,1
0,1
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,1
0,1
0,9
0,1
0,9 0,1
0,1 0,1
0,9
0,1
0,1
0,1
0,1
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,1
0,1
0,9
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,1 0,1
0,1 0,1
0,1
0,1
0,1
0,1
0,1
0,1
0,1 0,1
0,9 0,1
0,1
0,1
0,9
0,1
0,9
0,9
0,9 0,9
0,1 0,9
0,9
0,9
0,1
0,9
0,9
0,9
0,9 0,9
0,9 0,9
0,1
0,9
0,9
0,9
0,1
0,9
0,9 0,9
0,9 0,9
0,1
0,9
0,9
0,9
0,1
0,9
0,9 0,9
0,1 0,9
0,1
0,9
0,1
0,9
0,9
0,9
0,1 0,9
0,1 0,9
0,1
0,9
0,9
0,9
0,9
0,9
0,9 0,9
0,1 0,9
0,1
0,9
0,9
0,9
0,1
0,1
0,1 0,1
0,1 0,1
0,1
0,1
0,1
0,1
0,9
0,1
0,9 0,1
0,9 0,1
0,1
0,1
0,1
0,1
0,1
0,9
0,9 0,9
0,1 0,9
0,9
0,9
0,1
0,9
0,9
0,9
0,1 0,9
0,1 0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,1 0,9
0,9 0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9 0,9
0,1 0,9
0,9
0,9
0,1
0,9
0,1
0,9
0,9 0,9
0,1 0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,1 0,9
0,9 0,9
0,1
0,9
0,1
0,9
0,1
0,1
0,1 0,1
0,1 0,1
0,1
0,1
0,1
0,1
0,9
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,1
0,1
0,9
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,1
0,1
0,1
0,1
0,9 0,1
0,9 0,1
0,1
0,1
0,9
0,1
0,9
0,1
0,1 0,1
0,1 0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9 0,1
0,9 0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9 0,1
0,1 0,1
0,9
0,1
0,9
0,1
0,1
0,1
0,1 0,1
0,1 0,1
0,9
0,1
0,9
0,1
1. b)
Eğitim Safhası
Öncelikle ağın kaç katmalı olacağı , katmanların transfer
fonksiyonları ve eğitim şekli belirlenecektir.
Örneğin aşağıda 1.katmada 2 ,2.katmanda 5 ve son katmanda 1 nöron
olacak şekilde tasarlanmıştır. Transfer fonksiyonları ise her üç
katman için logsig olarak seçilmiştir. Geri yayılım fonksiyonu
olarak “trainlm” varsayılan değeri seçilmiştir.
Logsig transfer fonksiyonu
net=newff(minmax(A),[2,5,1],{'logsig','logsig','logsig'},'trainlm')
Ağımızı tanımladıktan sonra ağın eğitim parametlerini gireriz.
net.trainParam.show = 50
komutu eğitimin ilerleyişini kaç döngüde bir
göstereceğini ifade eder.
net.trainParam.epochs = 3000
komutu ise eğitimim kaç iterasyona
kadar devam edeceğini ifade eder.
net.trainParam.goal = 1e-10
Bu komut, hata karelerinin toplamı kaç olduğunda döngü sonlansın sorusuna
cevaptır. Eğer yukarıda verdiğimiz azami 3000 iterasyon sonunda bu hata
oranına ulaşılamazsa eğitim başarısız demektir.
net.trainparam.min_grad = 1e-10
ise ağın performans değeridir.
Düşük olursa istediğimiz MSE (mean squared error- ortalama karesel hata )
değerine ulaşamayabiliriz, bu anlamda yüksek tutmakta fayda var.
[net,tr]=train(net,A,C);
YSA’nın eğitim kodudur.
sonuc=sim(net,A)
Ağın eğitiminden sonar girişlere
verdiği çıktıları görmek için gerekli olan koddur.
sonuctest1=sim(net,T)
Test verilerine eğitilmiş olan
ağın verdiği sonuçları görmek için gereken komuttur.
Aşağıda ise katman sayıları ve katmandaki nöron sayıları
değiştirilerek YSA’nın eğitim performansı incelenmiştir.
[3
[3
[4
[4
[4
katman
katman
katman
katman
katman
;
;
;
;
;
10,10,1 ]
6,10,1 ]
8,4,5,1 ]
8,10,8,1 ]
20,10,15,1 ]
net=newff(minmax(A),[10,10,1],{'logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest2=sim(net,T)
net=newff(minmax(A),[6,10,1],{'logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest3=sim(net,T)
net=newff(minmax(A),[8,4,5,1],{'logsig','logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest4=sim(net,T)
net=newff(minmax(A),[8,10,8,1],{'logsig','logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
Sonuctest5=sim(net,T)
net=newff(minmax(A),[20,10,15,1],{'logsig','logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest6=sim(net,T)
1. c) 10 X 32 ‘ lik test matrisimizde satırlar bir hatalı bir düzgün matris olacak şekilde
yerleştirilmişti. Yani 5 hatasız 5 tanede hatalı şekil mevcuttur.
Test veri sonuçlarımız [0.1 0.9 0.1 0.9 0.1 0.9 0.1 0.9 0.1 0.9]
6 farklı değerde eğitiğimiz ağların test sonuçları ve yuvarlanmış değerleri ;
0,1
0,9 0,1
0,9
0,1
0,9
0,1
0,9
0,1
0,9
0,21 0,9 0,354651 0,9
0,046114 0,9
0,379847 0,9
0,585502 0,9
0,1
0,9 0,079328 0,9
0,11054
0,9
0,122752 0,9
0,154206 0,9
0,1
0,9 0,100892 0,9
0,100744 0,9
0,100868 0,9
0,1011
0,9
0,09 0,9 0,09534
0,9
0,095689 0,9
0,099808 0,9
0,10507
0,9
0,08 0,9 0,0853
0,9
0,116104 0,9
0,103313 0,9
0,11324
0,9
test1_sonuc
0,1
0,9 0,1 0,9
0,1 0,9 0,1 0,9 0,1 0,9
test2_sonuc
0,21 0,9 0,4 0,9
0
test3_sonuc
0,1
0,9 0,1 0,9
0,1 0,9 0,1 0,9 0,2 0,9
test4_sonuc
0,1
0,9 0,1 0,9
0,1 0,9 0,1 0,9 0,1 0,9
test5_sonuc
0,09 0,9 0,1 0,9
0,1 0,9 0,1 0,9 0,1 0,9
test6_sonuc
0,08 0,9 0,1 0,9
0,1 0,9 0,1 0,9 0,1 0,9
0,9 0,4 0,9 0,6 0,9
Sonuçlara göre 1. YSA mızda sonuçların tamamı beklenen değeri verdiği için %100
doğrulukla çalışmıştır. Yani YSA mız 5 hatalı matrisi ve 5 düzgün matrisi ayırt edebilmiştir.
2. YSA mızda ise 5 adet yanlış veri olduğundan ağın eğitiminde bir problem olduğu ve ancak
%50 doğrulukla çalışabildiği görülmüştür.Yani YSA’mız hatalı verileri tespit edememiştir.
3.YSA mızda 1 adet yanlış veri olduğundan %90 doğrulukla çalışmaktadır.
4, 5 ve 6. YSA larımızda %100 doğrulukla çalışmaktadır.
Son olarak ağlarımızın eğitimine ait grafikler verilerek kaç iterasyonda eğitimin tamamlandığı
ve ortalama karesel hata değerleri incelenecektir.
1.YSA (62 iterasyonda 10^-18 ortalama karesel hata değerine ulaştı)
2.YSA (7 iterasyonda 10^-21 ortalama karesel hata değerine ulaştı)
3.YSA (8 iterasyonda 10^-21 ortalama karesel hata değerine ulaştı)
4.YSA (9 iterasyonda 10^-29 ortalama karesel hata değerine ulaştı)
5.YSA ( 9 iterasyonda 10^-21 ortalama karesel hata değerine ulaştı)
6.YSA (7 iterasyonda 10^-21 ortalama karesel hata değerine ulaştı)
m file kodları
A = randi([0 1], 15,32);
temiz=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 ]
A(17,:)=A(2,:)
A(19,:)=A(4,:)
A(21,:)=A(6,:)
A(23,:)=A(8,:)
A(25,:)=A(10,:)
A(27,:)=A(12,:)
A(29,:)=A(14,:)
A(2,:)=temiz
A(4,:)=temiz
A(6,:)=temiz
A(8,:)=temiz
A(10,:)=temiz
A(12,:)=temiz
A(14,:)=temiz
A(16,:)=temiz
A(18,:)=temiz
A(20,:)=temiz
A(22,:)=temiz
A(24,:)=temiz
A(26,:)=temiz
A(28,:)=temiz
A(30,:)=temiz
for i=1:30
for j=1:32
A(i,j)=0.8*A(i,j)+0.1
j=j+1
end
i=i+1
end
C=[0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1]
for i=1:30
C(1,i)=0.8*C(1,i)+0.1
end
T = randi([0 1],5,32);
T(7,:)=T(2,:)
T(9,:)=T(4,:)
T(2,:)=temiz
T(4,:)=temiz
T(6,:)=temiz
T(8,:)=temiz
T(10,:)=temiz
for i=1:10
for j=1:32
T(i,j)=0.8*T(i,j)+0.1
j=j+1
end
i=i+1
end
A=A'
T=T'
net.trainParam.show = 50
net.trainParam.epochs = 3000
net.trainParam.goal = 1e-10
net.trainparam.min_grad = 1e-10
net=newff(minmax(A),[2,5,1],{'logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest1=sim(net,T)
net=newff(minmax(A),[10,10,1],{'logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest2=sim(net,T)
net=newff(minmax(A),[6,10,1],{'logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest3=sim(net,T)
net=newff(minmax(A),[8,4,5,1],{'logsig','logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest4=sim(net,T)
net=newff(minmax(A),[8,10,8,1],{'logsig','logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
Sonuctest5=sim(net,T)
net=newff(minmax(A),[20,10,15,1],{'logsig','logsig','logsig','logsig'},'trainlm')
[net,tr]=train(net,A,C);
sonuc=sim(net,A)
sonuctest6=sim(net,T)

Benzer belgeler

karakter tanıma - Dr. Aybars UĞUR

karakter tanıma - Dr. Aybars UĞUR T = [[0.5;-0.5;-0.5] [-0.5;0.5;-0.5] [-0.5;-0.5;0.5] ] net=newff(minmax(P),[10,3],{'logsig','purelin'},'trainrp'); net.trainParam.epochs = 500; net.trainParam.goal=1e-7; [net,tr]=train(net,P,T); c ...

Detaylı

Tam Metin - Fen Dergisi

Tam Metin - Fen Dergisi İleri beslemeli geri yayılımlı “trainlm” eğitim algoritması kullanılarak gizli katmandaki nöron sayıları beş ile elli arasında aşamalı olarak değiştirilerek farklı model oluşturulmuştur. Oluşturula...

Detaylı