Gdzieś popełniam błąd i moja "sieć" działa jak filtr; dla elementów macierzy wejściowej |Xij|<1 dostaję Yij=0, Xij>=1 --> Yij=1, Xij<=-1 --> Yij=-1. A to nie do końca powinno być tak.
Mam przykład podany w zadaniu projektowym bazujący na wzorach 1D, - wektory zamiast macierzy (niestety nie zamieszczę go tutaj, bo to 3,5mB plik z prezentacją ppt :/ ). Starałem się go odwzorować w swojej implementacji, ale pewnie gdzieś zawiodłem. I jest jedna rzecz, której nie zrobiłem i której nie rozumiem: dlaczego akurat naprzemienna kolejność produkowania wyjściowych elementów (dla wektora X=[x1 x2 x3 x4] produkuje się wyjście Y=... w kolejności: y1, y3, y2, y4)? Czy to aż tak wpływa na proces nauki sieci? I jak to zrobić poprawnie dla problemu 2D (u mnie na razie jest pętelka po elementach 'po kolei')?
Mój kod:
Kod: Zaznacz cały
X=input('Enter input matrix: ');
Y=X; %initial output matrix = input matrix
%patterns
s1=[1 1 1;-1 -1 1;-1 -1 1];
s2=[1 -1 -1;1 -1 -1;1 1 1];
s3=[1 1 1;1 -1 -1;1 1 1];
%weight
w1=(s1')*s1-eye(3);
w2=(s2')*s2-eye(3);
w3=(s3')*s3-eye(3);
W=w1+w2+w3;
%produce output matrix Y
for i=1:3
for j=1:3
NET = X(i,j)+Y(i,:)*W(j,:)';
%activation function
if (NET >= 1)
Y(i,j)=1;
elseif (NET <= -1)
Y(i,j)=-1;
else
Y(i,j)=0;
end
end
end
disp('output matrix: '); disp(Y);
Any ideas? Co zrobiłem źle, co poprawić? Czy może w ogóle inaczej?
Thx in advance.