You are on page 1of 3

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) = 3.148;
Datos_Entrada(21,2) = 4.136;
Datos_Entrada(22,2) = 5.809;
Datos_Entrada(23,2) = 8.471;
Datos_Entrada(24,2) = 12.956;
Datos_Entrada(25,2) = 20.097;
Datos_Entrada(26,2) = 15.365;
Datos_Entrada(27,2) = 9.712;
Datos_Entrada(28,2) = 6.371;
Datos_Entrada(29,2) = 4.211;
Datos_Entrada(30,2) = 2.765;
Datos_Entrada(31,2) = 1.829;
Datos_Entrada(32,2) = 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

You might also like