PageRenderTime 22ms CodeModel.GetById 15ms app.highlight 6ms RepoModel.GetById 0ms app.codeStats 0ms

/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
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