PageRenderTime 44ms CodeModel.GetById 30ms app.highlight 8ms RepoModel.GetById 1ms app.codeStats 0ms

/entrega3/som.m

http://github.com/melisabok/RedesNeuronales
Objective C | 39 lines | 35 code | 4 blank | 0 comment | 3 complexity | 5d71d864bfc451a41995835fb9d382ae MD5 | raw file
 1function[W] = som(P, fil_ocultas, col_ocultas, vecinas, ITE_MAX, alfa)
 2
 3pos = gridtop( col_ocultas, fil_ocultas); 
 4pasos = linkdist(pos); 
 5[entradas, CantPatrones] = size(P); 
 6
 7ocultas = fil_ocultas * col_ocultas; 
 8% Pesos iniciales 
 9W = ones(entradas,ocultas) * 0.5; 
10ite = 0;
11Reduccion = 20;
12ITE_MIN = (vecinas+2)*Reduccion;
13
14WAnt = 100*ones(entradas, ocultas);
15Dife = mean(sqrt(sum(WAnt - W).^2));
16
17while (( ite <= ITE_MAX ) && (Dife > 0.01)) || (ite < ITE_MIN)% "W no cambie mucho?
18    ite = ite + 1;
19    WAnt = W;
20    for patr =1:CantPatrones, 
21        %buscar el W mas proximo
22        distancias = sqrt(sum((P(:,patr)*ones(1,ocultas) - W).^2));
23        [DMin, ganadora] = min(distancias);
24        
25        %Actualizar la neurona ganadora y su vecindad 
26        for c=1:ocultas
27            if pasos(ganadora,c) <= vecinas
28                %actualizar W porque es la ganadora o una vecina
29                W(:,c) = W(:,c) + alfa * (P(:,patr) - W(:,c));
30            end
31        end
32    end
33    Dife = mean(sqrt(sum(WAnt - W).^2));
34    if (vecinas>=1) & (mod(ite,Reduccion)==0), 
35        vecinas = vecinas-1; 
36    end 
37end
38
39end