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
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
İ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ı