Yapay Sinir Ağı Eğitim Veri Seti Oluşturmak – Matematiksel Model 1

Yapay Sinir Ağlarında eğitim veri seti farklı şekillerde elde edilebilmektedir. Bu yazıda matematiksel Modeli verilmiş sistemler üzerinden veri seti oluşturma ve bu veri seti ile YSA eğitimi üzerinde durulacaktır. Denklem (1)’de X giriş, Y ise çıkışı göstermektedir.

denk_1

Denklem (1)’de verilen matematiksel modele ait örnek giriş çıkış veri seti aşağıdaki gibidir.

tab_1

Sınırları tanımlanan aralıklarda rastgele sayı üretme Matlab kodu aşağıdaki gibidir.

 

  1. function X = INPUT_SET(g_X, g_In, UPPER_LIMIT, LOWER_LIMIT)
  2.     X = (UPPER_LIMIT - LOWER_LIMIT) * rand(g_In, g_X) + LOWER_LIMIT;

 

Yukarıda verilen INPUT_SET fonksiyonu ile oluşturulmuş olan giriş veri setinin Denklem (1)’de tanımlanan matematiksel modelde elde edilecek çıkış değerlerinin elde edilmesini sağlayan MATLAB kodu aşağıda verilmiştir.

  1. function Y = CIRCLE_EQ(X)
  2.     Y = sqrt(1 - X.^2);

Denklem (1)’de verilen matematiksel modelin ve fonksiyonların kullanımını gösteren MATLAB kodu ve grafiği aşağıdadır.

 

  1. g_In = 1;
  2. g_X = 20;
  3. UPPER_LIMIT = 1;
  4. LOWER_LIMIT = -1;
  5. X = INPUT_SET(g_X, g_In, UPPER_LIMIT, LOWER_LIMIT)
  6. Y = CIRCLE_EQ(X)
  7.  
  8. figure, plot(X, Y, 'o')
  9. axis([ LOWER_LIMIT UPPER_LIMIT  min(Y) max(Y)])
  10. xlabel('X')
  11. ylabel('Y')

fig_1

Uygulamada 1-5-1 yapısında bir Yapay Sinir Ağı tasarlanmıştır. Aktivasyon fonksiyonu olarak logaritmik sigmoidal aktivasyon fonksiyonu kullanılmıştır. Ağ eğitiminde kullanılan 50 örnekli giriş-çıkış veri seti aşağıda gösterilmiştir.

orneklem

Eğitim sonucunda elde edilen ağırlık değerleri ile 0.01 adım aralıklar ile test edilmiştir. Test sonucunda beklenen ve elde dilen sonuç aşağıda gösterilmiştir. Şekilden de görüleceği üzere örneklerin yoğunluğuna bağlı olarak başarım değişmektedir.

test sonucu

Yapay Sinir Ağı eğitimine ilişkin MATLAB kodları aşağıda verilmiştir.

  1. g_In = 1;
  2. g_X = 50;
  3. UPPER_LIMIT = 1;
  4. LOWER_LIMIT = -1;
  5. X = INPUT_SET(g_X, g_In, UPPER_LIMIT, LOWER_LIMIT)
  6. Y = CIRCLE_EQ(X)
  7.  
  8. figure, plot(X, Y, 'o')
  9. axis([ LOWER_LIMIT UPPER_LIMIT  min(Y) max(Y)])
  10. xlabel('X')
  11. ylabel('Y')
  12.  
  13. %% Agırlıklar oluşturuldu
  14. g_Layer_Cell = 5;
  15. [n_X n_Samples] = size(X);
  16. [n_Y n_Samples] = size(Y);
  17. [w_1 b_1 w_2 b_2] = WEIGTH_CREATE(X, Y, g_Layer_Cell, n_X, n_Y);
  18.  
  19. g_L = 0.5;
  20. g_ITER = 1000;
  21. E_n = zeros(1, g_ITER);
  22. for n_i = 1 : g_ITER      
  23.     for n_j = 1 : n_Samples
  24.         [ol_out hl_out] = MLP(X(:, n_j), w_1, b_1, w_2, b_2);
  25.         [error E_n(n_i)] = FITNESS_VALUE(E_n(n_i), Y(n_j), ol_out);
  26.         [d_w_1 d_b_1 d_w_2 d_b_2] = BACK_PROPAGATION(X(:, n_j), w_2, hl_out, error);
  27.         [w_1 b_1 w_2 b_2] = PARAM_UPDATE(w_1, b_1, w_2, b_2,...
  28.                                           d_w_1, d_b_1, d_w_2, d_b_2, g_L);
  29.        
  30.     end
  31. end
  32. figure, plot(E_n)
  33.  
  34. X_TEST = -1 : 0.01 : 1
  35. Y_TEST = CIRCLE_EQ(X_TEST)
  36.  
  37. [n_X n_Samples] = size(X_TEST);
  38. [n_Y n_Samples] = size(Y_TEST);
  39.  
  40. E_n_t = 0;
  41. for n_j = 1 : n_Samples
  42.     [ol_out(n_j) hl_out] = MLP(X_TEST(:, n_j), w_1, b_1, w_2, b_2);
  43.     [error_t(n_j) E_n_t] = FITNESS_VALUE(E_n_t, Y_TEST(n_j), ol_out(n_j));
  44. end
  45.  
  46. figure, plot(X_TEST, Y_TEST, 'r');
  47. hold on;
  48. plot(X_TEST, ol_out, 'b');
  49. xlabel('X')
  50.  
  51. figure, plot(error_t)
  52. xlabel('X')
  53. ylabel('Error')

  1. function [w_1 b_1 w_2 b_2] = WEIGTH_CREATE(X, Y, g_Layer_Cell, n_X, n_Y)
  2.  
  3.     w_1 = rand(g_Layer_Cell, n_X);
  4.     b_1 = rand(g_Layer_Cell, 1);
  5.     w_2 = rand(g_Layer_Cell, 1);
  6.     b_2 = rand(n_Y, 1);

  1. function [ol_out hl_out] = MLP(X, w_1, b_1, w_2, b_2)
  2.  
  3.     hl_sum = w_1 * X' + b_1;
  4.    hl_out = logsig(hl_sum);
  5.    ol_out = hl_out' * w_2 +b_2;

  1. function [error E_n] = FITNESS_VALUE(E_n, Outputs, ol_out)
  2.     error = Outputs - ol_out;
  3.     E_n = E_n + error^2/2;

  1. function [d_w_1 d_b_1 d_w_2 d_b_2]= BACK_PROPAGATION(X, w_2, hl_out, error)
  2.  
  3.     d_b_2 = error;
  4.     d_w_2 = error * hl_out;
  5.  
  6.     s = error * w_2 .* hl_out .* (1- hl_out);
  7.    
  8.     d_b_1 = s;
  9.     d_w_1 = s * X;

  1. function [w_1 b_1 w_2 b_2] = PARAM_UPDATE(w_1, b_1, w_2, b_2,...
  2.                                           d_w_1, d_b_1, d_w_2, d_b_2, g_L)
  3.     w_1 = w_1 + g_L * d_w_1;
  4.     w_2 = w_2 + g_L * d_w_2;
  5.     b_1 = b_1 + g_L * d_b_1;
  6.     b_2 = b_2 + g_L * d_b_2;