/entrega3/som.m
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