[MATLAB] sieć neuronowa Hopfielda

Awatar użytkownika
Vigl
Użytkownik
Użytkownik
Posty: 283
Rejestracja: 28 wrz 2007, o 12:19
Płeć: Mężczyzna
Lokalizacja: Krosno/Kraków
Podziękował: 13 razy
Pomógł: 67 razy

[MATLAB] sieć neuronowa Hopfielda

Post autor: Vigl »

Mam stworzyć prostą sieć neuronową Hopfielda i nauczyć ją stosując regułę Hebba. Mam przy tym wykorzystać 3 wzory będące macierzami 3x3 (elementy przyjmują wartości 1 lub -1).
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); 
Komentarze po angielsku nie z czystego pozerstwa, ale po prostu przedmiot mamy po angielsku, a kod później będzie oceniany :)

Any ideas? Co zrobiłem źle, co poprawić? Czy może w ogóle inaczej?

Thx in advance.
ODPOWIEDZ