IRIS (Süsen Çiçeği) Veritabanı Kullanılarak Yapay Sinir Ağı Eğitimi

Bu yazıda süsen çiçieği (Iris) türlerinden (Setosa, Versicolor, Verginica) oluşturulan veri tabanı  kullanılarak yapay sinir ağı eğitimi gerçekleştirilmiştir. Eğitim esnasında her bir türden 30 adet örnek kullanılmış ve eğitimde kullanılan örnekler ile birlikte toplam 50’şer örnekler ile test edilmiştir. Eğitim sonucunda elde edilen hata değeri aşağıda gösterilmiştir. Eğitim geriye yayılım algoritması ile gerçeklenmiştir.

Setosa, Versicolor, Verginica türlerine ait veriler için tıklayınız….

Eğitime ait MATLAB kodları aşağıda verilmiştir.

clc, clear all, close all;
 
load IRIS_Setosa.mat;
load IRIS_Versicolor.mat;
load IRIS_Verginica.mat;
 
g_In = 4;
g_X = 30;
 
X = [IRIS_Setosa(1 : g_In, 1)...
     IRIS_Versicolor(1 : g_In, 1)...
     IRIS_Verginica(1 : g_In, 1)];
Y = [IRIS_Setosa(5, 1)...
     IRIS_Versicolor(5, 1)...
     IRIS_Verginica(5, 1)];
 
for n_i = 2 : g_X
    X = [X IRIS_Setosa(1 : g_In, n_i)...
     IRIS_Versicolor(1 : g_In, n_i)...
     IRIS_Verginica(1 : g_In, n_i)];
    Y = [Y IRIS_Setosa(5, n_i)...
         IRIS_Versicolor(5, n_i)...
         IRIS_Verginica(5, n_i)];
 
end
 
%% Agırlıklar oluşturuldu
g_Layer_Cell = 10;
[n_X n_Samples] = size(X);
[n_Y n_Samples] = size(Y);
[w_1 b_1 w_2 b_2] = WEIGTH_CREATE(X, Y, g_Layer_Cell, n_X, n_Y);
 
g_L = 0.1;
g_ITER = 100000;
E_n = zeros(1, g_ITER);
for n_i = 1 : g_ITER      
    for n_j = 1 : n_Samples
        [ol_out hl_out] = MLP(X(:, n_j), w_1, b_1, w_2, b_2);
        [error E_n(n_i)] = FITNESS_VALUE(E_n(n_i), Y(:, n_j), ol_out);
        [d_w_1 d_b_1 d_w_2 d_b_2] = BACK_PROPAGATION(X(:, n_j), w_2, hl_out, error);
        [w_1 b_1 w_2 b_2] = PARAM_UPDATE(w_1, b_1, w_2, b_2,...
                                          d_w_1, d_b_1, d_w_2, d_b_2, g_L);
       
    end
end
figure, plot(E_n)
 
X_TEST = [IRIS_Setosa(1 : g_In, : )...
     IRIS_Verginica(1 : g_In, : )...
     IRIS_Versicolor(1 : g_In, : )];
Y_TEST = [IRIS_Setosa(5, : )...
     IRIS_Verginica(5, : )...
     IRIS_Versicolor(5, : )];
 
 
[n_X n_Samples] = size(X_TEST);
[n_Y n_Samples] = size(Y_TEST);
 
E_n_t = 0;
for n_j = 1 : n_Samples
    [ol_out(n_j) hl_out] = MLP(X_TEST(:, n_j), w_1, b_1, w_2, b_2);
    [error_t(n_j) E_n_t] = FITNESS_VALUE(E_n_t, Y_TEST(n_j), ol_out(n_j));
end
 
figure, plot(error_t)
xlabel('X')
ylabel('Error')
function [d_w_1 d_b_1 d_w_2 d_b_2]= BACK_PROPAGATION(X, w_2, hl_out, error)
 
 d_b_2 = error;
 d_w_2 = error * hl_out;
 
 s = error * w_2 .* hl_out .* (1- hl_out);
 d_b_1 = s;
 d_w_1 = s * X';
function [error E_n] = FITNESS_VALUE(E_n, Outputs, ol_out)
 error = Outputs - ol_out;
 E_n = E_n + error^2/2;
function [ol_out hl_out] = MLP(X, w_1, b_1, w_2, b_2)
 
 hl_sum = w_1 * X + b_1;
 hl_out = logsig(hl_sum);
 ol_out = hl_out' * w_2 +b_2;
function [w_1 b_1 w_2 b_2] = PARAM_UPDATE(w_1, b_1, w_2, b_2,...
 d_w_1, d_b_1, d_w_2, d_b_2, g_L)
 w_1 = w_1 + g_L * d_w_1;
 w_2 = w_2 + g_L * d_w_2;
 b_1 = b_1 + g_L * d_b_1;
 b_2 = b_2 + g_L * d_b_2;
function [w_1 b_1 w_2 b_2] = WEIGTH_CREATE(X, Y, g_Layer_Cell, n_X, n_Y)
 
 w_1 = rand(g_Layer_Cell, n_X);
 b_1 = rand(g_Layer_Cell, 1);
 w_2 = rand(g_Layer_Cell, 1);
 b_2 = rand(n_Y, 1);

Bir yanıt yazın

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