ALGORITMO DE LA FUNCIÓN PERCEPTRON IMPLEMENTADO EN MATLAB %implentacion del perceptron de multiples entradas Neuronas_entrada = 32; Neuronas_salida = 1; maxima_iteracion = 100; iteracion = 0; cuenta = 0; mal = 0; num_patrones = 2; bias = 1; error1 = [1 2]; error_salida = [1 2]; error_red = randn(maxima_iteracion,1); Datos_Entrada(1,1) = 12.50; Datos_Entrada(2,1) = 11.841; Datos_Entrada(3,1) = 10.576; Datos_Entrada(4,1) = 9.647; Datos_Entrada(5,1) = 9.424; Datos_Entrada(6,1) = 10.170; Datos_Entrada(7,1) = 12.106; Datos_Entrada(8,1) = 15.547; Datos_Entrada(9,1) = 17.746; Datos_Entrada(10,1) = 13.453; Datos_Entrada(11,1) = 9.383; Datos_Entrada(12,1) = 6.760; Datos_Entrada(13,1) = 5.161; Datos_Entrada(14,1) = 4.339; Datos_Entrada(15,1) = 4.210; Datos_Entrada(16,1) = 4.741; Datos_Entrada(17,1) = 5.951; Datos_Entrada(18,1) = 8.015; Datos_Entrada(19,1) = 11.196; Datos_Entrada(20,1) = 16.244; Datos_Entrada(21,1) = 24.508; Datos_Entrada(22,1) = 23.632; Datos_Entrada(23,1) = 19.461; Datos_Entrada(24,1) = 18.048; Datos_Entrada(25,1) = 16.578; Datos_Entrada(26,1) = 13.225; Datos_Entrada(27,1) = 9.377; Datos_Entrada(28,1) = 6.163; Datos_Entrada(29,1) = 3.709; Datos_Entrada(30,1) = 1.919; Datos_Entrada(31,1) = 0.704; Datos_Entrada(32,1) = 0; Datos_Entrada(1,2) = 13.711; Datos_Entrada(2,2) = 13.384; Datos_Entrada(3,2) = 12.586; Datos_Entrada(4,2) = 11.749; Datos_Entrada(5,2) = 11.111; Datos_Entrada(6,2) = 10.899; Datos_Entrada(7,2) = 11.199; Datos_Entrada(8,2) = 12.093; Datos_Entrada(9,2) = 13.615; Datos_Entrada(10,2) = 15.451; Datos_Entrada(11,2) = 15.552; Datos_Entrada(12,2) = 12.874; Datos_Entrada(13,2) = 9.749; Datos_Entrada(14,2) = 7.231; Datos_Entrada(15,2) = 5.325; Datos_Entrada(16,2) = 3.97; Datos_Entrada(17,2) = 3.103; Datos_Entrada(18,2) = 2.675; Datos_Entrada(19,2) = 2.680;
Datos_Entrada(20,2) Datos_Entrada(21,2) Datos_Entrada(22,2) Datos_Entrada(23,2) Datos_Entrada(24,2) Datos_Entrada(25,2) Datos_Entrada(26,2) Datos_Entrada(27,2) Datos_Entrada(28,2) Datos_Entrada(29,2) Datos_Entrada(30,2) Datos_Entrada(31,2) Datos_Entrada(32,2)
= = = = = = = = = = = = =
3.148; 4.136; 5.809; 8.471; 12.956; 20.097; 15.365; 9.712; 6.371; 4.211; 2.765; 1.829; 1.305;
Datos_Salida = zeros(1:2); Datos_Salida(1) = 0; Datos_Salida(2) = 1; pesos12 = randn(Neuronas_entrada+1,1); ern= max (pesos12); pesos12 = pesos12/ern;
pesos2 = pesos12.*pesos12; ern = max(pesos2); pesos2 = pesos2/ern; pesos12 = - pesos2; pesosin= pesos12; %normalizando los datos de entrada max_dat = max(Datos_Entrada); maxx = max(max_dat); Datos_Entrada = Datos_Entrada/maxx; delta = randn(Neuronas_entrada+1,1); cuenta = 0; salir = 1; c = 0.1; while salir ==1 cuenta = cuenta + 1; for i = 1:Neuronas_entrada capa1(i) = Datos_Entrada(i,cuenta); end capa1(33) = 1; for i = 1:Neuronas_salida d = Datos_Salida(cuenta); end R = 0; for i=1:Neuronas_entrada+1 R = capa1(i)*pesos12(i) + R; end error1(cuenta) = abs(R); if R >= 0 y = 1; else y= 0; end error = d-y; error_salida(cuenta) = error;
if error == 0 else %si es positivo hay que restar la entrada de los pesos for i = 1:Neuronas_entrada+1 delta(i) = c*capa1(i); if y == 0 pesos12(i) = pesos12(i)+delta(i); else pesos12(i) = pesos12(i)-delta(i); end end end if cuenta < 2 else cuenta = 0; iteracion = iteracion +1; error_red(iteracion) = max(error1); if iteracion == maxima_iteracion salir = 0; else end if error_salida(1) == 0 if error_salida(2) == 0 salir = 0; else end else end end end figure(1) plot(1:iteracion,error_red(1:iteracion)); xlabel('Numero de iteraciones') ylabel('Amplitud') title('ERROR DE APRENDIZAJE') figure(2) s= 1:33; plot(s, pesos12(s),s, pesosin(s)) xlabel('Numero de entradas al perceptron') ylabel('Amplitud') title('CAMBIO EN LOS PESOS') %text(15,pesosin(15),'\leftarrow pesos de entrada',... % 'HorizontalAlignment','left')
Fuente: Implementación propia