-
Notifications
You must be signed in to change notification settings - Fork 0
/
mlp.m
44 lines (43 loc) · 2.1 KB
/
mlp.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function [model, mse] = mlp(X, Y, h)
% Multilayer perceptron
% Input:
% X: d x n data matrix %% eğitim seti giriş(input) kümesi
% Y: p x n response matrix %% eğitim seti hedef(target) kümesi
% h: L x 1 vector specify number of hidden nodes in each layer l %% her
% bir katmandaki nöron sayısı. mesela [2,3] , 1. gizli katmanda iki tane
% ve 2. gizli katmanda 3 tane nöron bulunduğunu gösterir.
% Bunun dışındaki giriş ve çıkış işlemlerini yapan katmanlardaki nöronların sayısı giriş ve target eğitim seti
% kümesinden otomatik olarak ayarlanır.
% Ouput:
% model: model structure
% mse: mean square error % ortalama kare hata.
h = [size(X,1);h(:);size(Y,1)]; %% burada görüldüğü üzere X giriş vektörleri kümemizin satır sayısı yapay sinir ağı girişi sayısı otomatik olarak alındı. aynı işlem target(hedef) küme içinde yapıldı. gizli katmanlar ve bu katmanlardaki nöron sayıları h ile önceden belirlenmişti.
L = numel(h); %% numel eleman sayısını hesaplar bu durumda L gizli katman sayısı olacaktır.
W = cell(L-1);
for l = 1:L-1
W{l} = randn(h(l),h(l+1)); %% mesela ilk döngüde 1. katman nöron sayısı x 2. katman nöron sayısı w1 değerini oluşturur. {} indisleme için kullanılır.
end
Z = cell(L); %% katman sayısı x katmansayısı büyüklüğünde boş matrix
Z{1} = X;
eta = 1/size(X,2);
% eta=0.04;
maxiter = 20000; %% maximum iterasyon sayısı belirledik
mse = zeros(1,maxiter);
for iter = 1:maxiter
% forward %1. adım ileri yönlü yayılım
for l = 2:L
Z{l} = SigmoidTF(W{l-1}'*Z{l-1});
end
% backward %2. adım geri yönlü yayılım
E = Y-Z{L};
mse(iter) = mean(dot(E(:),E(:))); % ortalama kare hesapladık. burada LMS WidrofHoff kuralının genelleştirmiş hali kullanıldı, backpropagation algorithm MSE..
for l = L-1:-1:1
df = Z{l+1}.*(1-Z{l+1});
dG = df.*E;
dW = Z{l}*dG';
W{l} = W{l}+eta*dW;
E = W{l}*dG;
end
end
mse = mse(1:iter); %aproximate yani yaklaşık MSE(ORTALAMA KARE HATA) değeri alındığından k. iterasyonda uygulandığındaki oluşan gerçek hata değeri ortalam hata değeri olarak kabul edilir.
model.W = W;