/entrega2/ejercicio1/neurona_no_lineal.m
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 12function[ite, W, b] = neurona_no_lineal(P, T, alfa, CotaError, MAX_ITE, funcion, detalle) 13 14 15[CantAtrib, CantPatrones] = size(P); 16 17W = rand(1,CantAtrib) - 0.5 * ones(1,CantAtrib); 18b = rand - 0.5; 19 20 21errorAct = 1; 22ite = 0; 23 24while (ite < MAX_ITE) & (errorAct > CotaError) 25 26 ite = ite + 1; 27 errorAct = 0; 28 29 for patr = 1 : CantPatrones 30 31 neta = W*P(:,patr) + b; 32 f_neta = feval(funcion, neta); 33 f_prima_neta = feval([ 'd' funcion], neta, f_neta); 34 35 errorK = T(patr) - f_neta; 36 gradiente = -2*errorK*f_prima_neta*P(:, patr); 37 38 W = W - alfa * gradiente'; 39 b = b - alfa * (-2*errorK*f_prima_neta); 40 errorAct = errorAct + errorK^2; 41 42 end 43 44 %[ite ErrorAct] 45 if (detalle == 1 & mod(ite,100) == 0) 46 47 correctos_train = evaluar_clase_funcion(T, feval(funcion, W*P+b), funcion); 48 R = [alfa ite correctos_train (correctos_train / CantPatrones) * 100]; 49 R 50 archivo = strcat('estimar_parametros_', funcion, '.csv'); 51 dlmwrite(archivo,R,'delimiter','\t','-append'); 52 end 53 54 55end 56 57 58 59 60 61 62 63