Sunteți pe pagina 1din 15

Universitatea VALAHIA din Trgovite

Facultatea de Inginerie Electric


Specializarea Automatic i Informatic Aplicat

APLICAIE PENTRU CUNOASTERE A


FORMELOR DINTR-O IMAGINE
BINARA CU AJUTORUL RETELEI
HOPFIELD
Disciplina:
Inteligen artificial

Student
SERBAN Laurentiu- Florin
Anul IV (2015-2016)

Cuprins

Capitolul 1 - Introducere

Capitolul 2 - Algoritmul de antrenare al retelei Hopfield

Capitolul 3 - Realizarea aplicatiei cu ajutorul retelei Hopfield

Capitolul 4 - Codul sursa al aplicatiei

Bibliografie

14

Capitolul 1
INTRODUCERE
Reeaua neurala Hopfield poate fi folosita ca memorie asociativ sau pentru
rezolvarea unor probleme de optimizare. Folosete neuroni cu intrri binare, a cror ieire
conine nelineariti de tipul limitare hardware. Arhitectura unei reele Hopfield cu N neuroni
este prezentat n Figura 1.2. Ieirea fiecrui neuron este aplicat tuturor celorlalte noduri
prin intermediul unor ponderi. Hopfield a demonstrat c aceast reea converge dac
ponderile sunt simetrice. Dei simplitatea ei o face atractiv, aceast reea prezint dou
limitri majore cnd este utilizat ca memorie adresabil prin coninut. n primul rnd,
numrul de forme prototip care pot fi stocate i apoi regsite corect n reea este limitat la
aproximativ 15% din numrul de neuroni. Dac se ncearc stocarea prea multor forme
prototip, reeaua ar putea converge ctre un prototip fictiv. A doua limitare prezent la reeaua
Hopfield apare dac prototipurile memorate n reea sunt foarte asemntoare (prezint un
mare numr de bii identici), caz n care reeaua devine instabil.

Dac reeaua Hopfield este folosit drept clasificator, ieirea reelei (dup convergen)
trebuie comparat cu fiecare form prototip, dup care se poate lua decizia de apartenen la
una din clasele ataate formelor prototip.

Capitolul 2
2.1. ALGORITMUL DE ANTRENARE AL RETELEI HOPFIELD

Pasul 1. Initializarea ponderilor conexiunilor

unde tij este ponderea conexiunii de la nodul i la nodul j

Pasul 2. Se aplica un vector de intrare necunoscut

Pasul 3. Itereaza pana la convergenta:

unde functia neliniara fh este de tipul limitare hardware. Operatia se repeta pana cand toate
iesirile neuronilor raman neschimbate. In acest caz, configuratia iesirilor coincide cu forma
prototip cea mai apropiata de forma necunoscuta de intrare.

Pasul 4. Repeta pasii 2-3 pentru orice alta forma necunoscuta de intrare

Capitolul 3
REALIZAREA APLICATIEI CU AJUTORUL RETELEI HOPFIELD
n primul rnd, se va deschide o interfa de lucru GUI, prin tastarea >>guide n
linie de comand n Matlab.

n fereastra nou deschis se poate observa o interfata de lucru. Aici se va creea


interfata aplicatiei.

Pentru interfata de mai sus am folosit urmatoarele:


5 butoane de tip Push Button;
1 diagrama de tip Axes;
1 panou de tip Panel;
2 butoane de tip Edit Text.

Toate acestea au fost redenumite din fereastra de proprietati:

Capitolul 4
CODUL SURSA AL APLICATIEI
1. Resetarea retelei:
a. Resetarea retelei se face accesand butonul RESETEAZA RETEAUA dupa
cum se vede in poza:

b. Codul care face posibila resetarea retelei este urmatorul:


function reset_Callback(hObject, eventdata, handles)
% cleans all data and enables the change of the number of neurons used
for n=1 : length(handles.hPatternsDisplay)
delete(handles.hPatternsDisplay(n));
end
handles.hPatternsDisplay = [];
set(handles.imageSize,'enable','on');
handles.W = [];
guidata(hObject, handles);

2. Incarcarea imaginii
a. Incarcarea imaginii se face accesand butonul INCARCA IMAGINEA dupa
cum se vede in poza:

b.Codul care face posibila incarcarea imaginii este urmatorul:


% --- Executes on button press in loadIm.
function loadIm_Callback(hObject, eventdata, handles)
[fName dirName] = uigetfile('*.bmp;*.tif;*.jpg;*.tiff');
if fName
set(handles.imageSize,'enable','off');
cd(dirName);
im = imread(fName);
N = str2num(get(handles.imageSize,'string'));
im = fixImage(im,N);
imagesc(im,'Parent',handles.neurons);
colormap('gray');
end

3. Antrenarea retelei
a. Antrenarea retelei se face cu ajutorul invatarii imaginii incarcate ulterior
accesand butonul ANTRENEAZA RETEAUA.

b. Codul din care face posibila antrenarea retelei este urmatorul:


% --- Executes on button press in train.
function train_Callback(hObject, eventdata, handles)
Npattern = length(handles.hPatternsDisplay);
if Npattern > 9
msgbox('more then 10 paterns isn''t supported!','error');
return
end
im = getimage(handles.neurons);
N = get(handles.imageSize,'string');
N = str2num(N);
W = handles.W; %weights vector
avg = mean(im(:));
%removing the cross talk part
if ~isempty(W)
%W = W +( kron(im,im))/(N^2);
W = W + ( kron(im-avg,im-avg))/(N^2)/avg/(1-avg);
else
% W = kron(im,im)/(N^2);

W = ( kron(im-avg,im-avg))/(N^2)/avg/(1-avg);
end
% Erasing self weight
ind = 1:N^2;
f = find(mod(ind,N+1)==1);
W(ind(f),ind(f)) = 0;
handles.W = W;
% Placing the new pattern in the figure...
xStart = 0.01;
xEnd = 0.99;
height = 0.65;
width = 0.09;
xLength = xEnd-xStart;
xStep = xLength/10;
offset = 4-ceil(Npattern/2);
offset = max(offset,0);
y = 0.1;
if Npattern > 0
for n=1 : Npattern
x = xStart+(n+offset-1)*xStep;
h = handles.hPatternsDisplay(n);
set(h,'units','normalized');
set(h,'position',[x y width height]);
end
x = xStart+(n+offset)*xStep;
h = axes('units','normalized','position',[x y width height]);
handles.hPatternsDisplay(n+1) = h;
imagesc(im,'Parent',h);
else
x = xStart+(offset)*xStep;
h = axes('units','normalized','position',[x y width height]);
handles.hPatternsDisplay = h;
end
imagesc(im,'Parent',h);
set(h, 'YTick',[],'XTick',
[],'XTickMode','manual','Parent',handles.learnedPaterns);
guidata(hObject, handles);

10

4. Formele invatate vor aparea in partea de jos a aplicatiei in sectiunea


FORME INVATATE.

5. Adaugarea zgomotului
a. Pentru a testa reteaua se poate incarca orice imagine binara sau se poate
incarca una din formele invatate si se poate adauga zgomot. Se poate alege
orice nivel de zgomot de la 1% la 100%.

11

b. Codul pentru adaugarea zgomotului este urmatorul:


% --- Executes on button press in addNoise.
function addNoise_Callback(hObject, eventdata, handles)
im = getimage(handles.neurons);
% N = get(handles.imageSize,'string');
% N = floor(str2num(N)/2)+1;
noisePercent = get( handles.noiseAmount, 'value' );
N = round( length(im(:))* noisePercent );
N = max(N,1);
%minimum change one neuron
ind = ceil(rand(N,1)*length(im(:)));
%
im(ind) = -1*im(ind); %!!!!
im(ind) = ~im(ind);
imagesc(im,'Parent',handles.neurons);
colormap('gray');

6. Rularea aplicatiei se face apasand pe butonul EXECUTA:

12

a. Codul din spatele butonului EXECUTA este urmatorul:


% --- Executes on button press in run.
function run_Callback(hObject, eventdata, handles)
im = getimage(handles.neurons);
[rows cols] = size(im);
if rows ~= cols
msgbox('I don''t support non square images','error');
return;
end
N = rows;
W = handles.W;
if isempty(W)
msgbox('No train data - doing nothing!','error');
return;
end
%figure; imagesc(W)
mat = repmat(im,N,N);
mat = mat.*W;
mat = im2col(mat,[N,N],'distinct');
networkResult = sum(mat);
networkResult = reshape(networkResult,N,N);

13

im = fixImage(networkResult,N);
imagesc(im,'Parent',handles.neurons);

14

BIBLIOGRAFIE :

H. Demuth, M. Beale Neural Network Toolbox. User Guide


The MATHWORKS Inc. - www.mathworks.com
http://www.victorneagoe.com/university/prai/lab6c.pdf
http://engpedia.ir/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87%D8%B3%D9%88%D8%B1%D8%B3-hopfield-neural-network/

15

S-ar putea să vă placă și