+ All Categories
Home > Documents > APLICAȚIE PENTRU CUNOASTERE A FORMELOR DINTR-O IMAGINE BINARA CU AJUTORUL RETELEI HOPFIELD

APLICAȚIE PENTRU CUNOASTERE A FORMELOR DINTR-O IMAGINE BINARA CU AJUTORUL RETELEI HOPFIELD

Date post: 15-Apr-2016
Category:
Upload: serban-laurentiu
View: 224 times
Download: 2 times
Share this document with a friend
Description:
APLICAȚIE PENTRU CUNOASTERE A FORMELOR DINTR-O IMAGINE BINARA CU AJUTORUL RETELEI HOPFIELD
18
Universitatea VALAHIA din Târgovişte Facultatea de Inginerie Electrică Specializarea Automatică şi Informatică Aplicată APLICAȚIE PENTRU CUNOASTERE A FORMELOR DINTR-O IMAGINE BINARA CU AJUTORUL RETELEI HOPFIELD Disciplina: Inteligență artificială Student SERBAN Laurentiu- Florin 1
Transcript

Universitatea VALAHIA din TârgovişteFacultatea de Inginerie ElectricăSpecializarea Automatică și Informatică Aplicată

APLICAȚIE PENTRU CUNOASTERE A FORMELOR DINTR-O IMAGINE BINARA CU AJUTORUL RETELEI HOPFIELD

Disciplina:Inteligență artificială

StudentSERBAN Laurentiu- Florin

Anul IV (2015-2016)

1

Cuprins

Capitolul 1 - Introducere 3

Capitolul 2 - Algoritmul de antrenare al retelei Hopfield 4

Capitolul 3 - Realizarea aplicatiei cu ajutorul retelei Hopfield 5

Capitolul 4 - Codul sursa al aplicatiei 7

Bibliografie 14

2

Capitolul 1

INTRODUCERE

Reţeaua neurala Hopfield poate fi folosita ca memorie asociativă sau pentru rezolvarea unor probleme de optimizare. Foloseşte neuroni cu intrări binare, a căror ieşire conţine nelinearităţi de tipul limitare hardware. Arhitectura unei reţele Hopfield cu N neuroni este prezentată în Figura 1.2. Ieşirea fiecărui neuron este aplicată tuturor celorlalte noduri prin intermediul unor ponderi. Hopfield a demonstrat că această reţea converge dacă ponderile sunt simetrice. Deşi simplitatea ei o face atractivă, această reţea prezintă două limitări majore când este utilizată ca memorie adresabilă prin conţinut. În primul rând, numărul de forme prototip care pot fi stocate şi apoi regăsite corect în reţea este limitat la aproximativ 15% din numărul de neuroni. Dacă se încearcă stocarea prea multor forme prototip, reţeaua ar putea converge către un prototip fictiv. A doua limitare prezentă la reţeaua Hopfield apare dacă prototipurile memorate în reţea sunt foarte asemănătoare (prezintă un mare număr de biţi identici), caz în care reţeaua devine instabilă.

Dacă reţeaua Hopfield este folosită drept clasificator, ieşirea reţelei (după convergenţă) trebuie comparată cu fiecare formă prototip, după care se poate lua decizia de apartenenţă la una din clasele ataşate formelor prototip.

3

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

4

Capitolul 3

REALIZAREA APLICATIEI CU AJUTORUL RETELEI HOPFIELD

În primul rând, 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.

5

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:

6

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

7

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

8

3. Antrenarea reteleia. 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

9

% 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 zgomotuluia. 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); im = fixImage(networkResult,N); imagesc(im,'Parent',handles.neurons);

13


Recommended