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);