/entrega2/ejercicio1/neurona_no_lineal.m

http://github.com/melisabok/RedesNeuronales · Objective C · 63 lines · 39 code · 24 blank · 0 comment · 5 complexity · 71bb5a4d6e42e8d30a672c2c950b8059 MD5 · raw file

  1. % Neurona no lineal.
  2. % Algoritmo que resuelve una neurona no lineal
  3. % P : Patrones
  4. % T : clase, tiene que estar compuesta en base a la funcion utilizada
  5. % alfa : tasa de aprendizaje
  6. % CotaError: cota del error
  7. % MAX_ITE: cantidad maxima de iteraciones
  8. % funcion: funcion a aplicar a los valores netos obtenidos en la red
  9. % detalle: puede tener valor 1 o 0, significa si se guarda la eficiencia
  10. % cada 100 iteraciones realizadas, se utiliza para la estimacion de
  11. % parametros
  12. function[ite, W, b] = neurona_no_lineal(P, T, alfa, CotaError, MAX_ITE, funcion, detalle)
  13. [CantAtrib, CantPatrones] = size(P);
  14. W = rand(1,CantAtrib) - 0.5 * ones(1,CantAtrib);
  15. b = rand - 0.5;
  16. errorAct = 1;
  17. ite = 0;
  18. while (ite < MAX_ITE) & (errorAct > CotaError)
  19. ite = ite + 1;
  20. errorAct = 0;
  21. for patr = 1 : CantPatrones
  22. neta = W*P(:,patr) + b;
  23. f_neta = feval(funcion, neta);
  24. f_prima_neta = feval([ 'd' funcion], neta, f_neta);
  25. errorK = T(patr) - f_neta;
  26. gradiente = -2*errorK*f_prima_neta*P(:, patr);
  27. W = W - alfa * gradiente';
  28. b = b - alfa * (-2*errorK*f_prima_neta);
  29. errorAct = errorAct + errorK^2;
  30. end
  31. %[ite ErrorAct]
  32. if (detalle == 1 & mod(ite,100) == 0)
  33. correctos_train = evaluar_clase_funcion(T, feval(funcion, W*P+b), funcion);
  34. R = [alfa ite correctos_train (correctos_train / CantPatrones) * 100];
  35. R
  36. archivo = strcat('estimar_parametros_', funcion, '.csv');
  37. dlmwrite(archivo,R,'delimiter','\t','-append');
  38. end
  39. end