Este documento describe un experimento para entrenar un perceptrón para clasificar aviones utilizando el aprendizaje supervisado. Se generan vectores de entrada y salida de entrenamiento y se inicializan los pesos de forma aleatoria. Luego, se actualizan los pesos a través de la regla del perceptrón o mediante descenso de gradiente durante 50 épocas. Finalmente, se grafica el error cuadrático total frente al número de épocas para evaluar el aprendizaje.
1. Página 1
UNIVERSIDAD DE FUERZAS ARMADAS “ESPE”
DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA
ASIGNATURA: CONTROL INTELIGENTE
Actividad No 5. Aprendizaje del perceptrón
Fecha: Lunes, 16 de abril de 2014
Nombre alumno: Evelyn Gabriela Lema – Fernando Javier Villalba Portilla.
NRC: 2055
Entrenamiento de un perceptrón para que realice clasificación de aviones
Desarrollo en MATLAB
A. Regla de aprendizaje del perceptrón
1. Escriba en un vector “inputs” de dimensión nx2 las entradas de los patrones de
entrenamiento. Cada fila tiene un patrón de entrenamiento. Escriba el vector “tag” de
dimensión nx1 con las salidas de cada patrón de entrenamiento
2. Escriba una línea de código para tomar el primer patrón de aprendizaje y encontrar la
actualización de los pesos. Factor de aprendizaje=0.5.
Vector inputs:
inputs=[1.0 0.1 ;2.0 0.2; 0.1 0.3; 2.0 0.3; 0.2 0.4 ; 3.0 0.4; 0.1
0.5; 1.5 0.5 ;0.5 0.6 ;1.6 0.7]
Vector tag:
target=[1 1 0 1 0 1 0 1 0 0]
w2=rand();
w1=rand();
w0=rand();
in0=1;
n=0.5;
inputs=[1.0 0.1 ;2.0 0.2; 0.1 0.3; 2.0 0.3; 0.2 0.4
3.0 0.4; 0.1 0.5; 1.5 0.5 ;0.5 0.6 ;1.6 0.7];
out=hardlim(inputs(1,1)*w1+inputs(1,2)*w2+w0*in0);
target =[1 1 0 1 0 1 0 1 0 0];
delta_w0=n*(target(1)-out)*in0;
delta_w1=n*(target(1)-out)*inputs(1,1);
delta_w2=n*(target(1)-out)*inputs(1,2);
w0=w0+ delta_w0;
w1=w1+ delta_w1;
w2=w2+ delta_w2;
w0
w1
w2
2. Página 2
3. Escriba las líneas de código para calcular la actualización de pesos y completar una
época.
4. Utilice un lazo for para que el programa ejecute 50 épocas. Dibuje el diagrama de flujo y
transcriba el programa:
w2=rand();
w1=rand();
w0=rand();
in0=1;
n=0.5;
inputs=[1.0 0.1 ;2.0 0.2; 0.1 0.3; 2.0 0.3; 0.2 0.4 ; 3.0 0.4; 0.1
0.5; 1.5 0.5 ;0.5 0.6 ;1.6 0.7];
tag=[1 1 0 1 0 1 0 1 0 0];
for i=1:10
out=hardlim(inputs(i,1)*w1+inputs(i,2)*w2+w0*in0);
Dw0=0.5*(tag(i)-out)*in0;
Dw1=0.5*(tag(i)-out)*inputs(i,1);
Dw2=0.5*(tag(i)-out)*inputs(i,2);
w0=w0+Dw0;
w1=w1+Dw1;
w2=w2+Dw2;
end
w0
w1
w2
w2=rand();
w1=rand();
w0=rand();
in0=1;
n=0.5;
inputs=[1.0 0.1 ;2.0 0.2; 0.1 0.3; 2.0 0.3; 0.2 0.4 ; 3.0 0.4; 0.1 0.5;
1.5 0.5 ;0.5 0.6 ;1.6 0.7];
tag=[1 1 0 1 0 1 0 1 0 0];
for j=1:50
for i=1:10
out=hardlim(inputs(i,1)*w1+inputs(i,2)*w2+w0*in0);
Dw0=0.5*(tag(i)-out)*in0;
Dw1=0.5*(tag(i)-out)*inputs(i,1);
Dw2=0.5*(tag(i)-out)*inputs(i,2);
w0=w0+Dw0;
w1=w1+Dw1;
w2=w2+Dw2;
end
end
w0
w1
w2
4. Página 4
5. Complete el programa para que se grafique el error cuadrático total versus la época.
Transcriba el programa y el gráfico obtenido
Valores Obtenidos: Gráfica de Resultados:
B. Aprendizaje por descenso de gradiente
0 5 10 15 20 25 30 35 40 45 50
0
1
2
3
4
5
6
ERRORCUADRATICO
EPOCA
w0=rand();
w1=rand();
w2=rand();
in0=1;
n=0.5;
inputs=[1.0 0.1 ;2.0 0.2; 0.1 0.3; 2.0 0.3; 0.2 0.4 ; 3.0 0.4; 0.1 0.5; 1.5
0.5 ;0.5 0.6 ;1.6 0.7];
target=[1 1 0 1 0 1 0 1 0 0];
for j=1:50
err_T=0;
for i=1:10
out=hardlim(inputs(i,1)*w1+inputs(i,2)*w2+w0*in0);
delta_w0=0.5*(target(i)-out)*in0;
delta_w1=0.5*(target(i)-out)*inputs(i,1);
delta_w2=0.5*(target(i)-out)*inputs(i,2);
w0=w0+ delta_w0;
w1=w1+ delta_w1;
w2=w2+ delta_w2;
err_i=(target(i)-out)^2;
err_T=err_T+err_i;
end
vector_epocas(j)=j;
vector_err(j)=err_T;
plot(vector_epocas,vector_err);
ylabel('ERROR CUADRATICO')
xlabel('EPOCA')
end
w0
w1
w2
5. Página 5
6. Escriba en detalle la ecuación de cálculo de actualización de cada peso
7. Modifique el programa de la regla de aprendizaje para que ejecute el entrenamiento por
descenso de gradiente. Transcriba el programa y el gráfico del aprendizaje
w0=rand();
w1=rand();
w2=rand();
in0=1;
n=0.5;
alpha=4;
inputs=[1.0 0.1 ;2.0 0.2; 0.1 0.3; 2.0 0.3; 0.2 0.4 ; 3.0 0.4; 0.1 0.5; 1.5 0.5 ;0.5 0.6
;1.6 0.7];
target=[1 1 0 1 0 1 0 1 0 0];
for j=1:50
errT=0;
for i=1:10
net=(inputs(i,1)*w1+inputs(i,2)*w2+w0*in0);
out=1/1+exp(-alpha*net);
delta_w0=0.5*(target(i)-out)*in0*alpha*out*(1-out);
delta_w1=0.5*(target(i)-out)*alpha*out*(1-out)*inputs(i,1);
delta_w2=0.5*(target(i)-out)*alpha*out*(1-out)*inputs(i,2);
w0=w0+ delta_w0;
w1=w1+ delta_w1;
w2=w2+ delta_w2;
erri=(target(i)-out)^2;
errT=errT+erri;
end
vector_epocas(j)=j;
vector_err(j)=errT;
plot(vector_epocas,vector_err);
ylabel('ERROR CUADRATICO')
xlabel('EPOCA')
end
∑
6. Página 6
Valores Obtenidos: Gráfica de Resultados
Evelyn Gabriela Lema y Fernando Javier Villalba Portilla afirmamos que esta actividad es de
nuestra autoría y establecemos que para la elaboración de la misma se ha seguido los
lineamientos del Código de Ética de la Universidad de las Fuerzas Armadas ESPE.
0 5 10 15 20 25 30 35 40 45 50
5
5.05
5.1
5.15
5.2
5.25
ERRORCUADRATICO
EPOCA
w0
w1
w2