/entrega3/som.m

http://github.com/melisabok/RedesNeuronales · Objective C · 39 lines · 35 code · 4 blank · 0 comment · 3 complexity · 5d71d864bfc451a41995835fb9d382ae MD5 · raw file

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