actividad no8. 1er parcial lema evelyn
TRANSCRIPT
Página 1
UNIVERSIDAD DE FUERZAS ARMADAS “ESPE” DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA
ASIGNATURA: CONTROL INTELIGENTE
Actividad No8. Aprendizaje del perceptrón multicapa mediante retropropagación del error
Fecha: Lunes, 28 de Abril del 2014.
Nombre alumno: Evelyn Gabriela Lema Vinueza.
NRC: 2055
1. Dibuje un perceptrón multicapa con 2 entradas, 2 neuronas escondidas y una neurona de salida.
2. Escriba las fórmulas de actualización de cada uno de los pesos de conexión entre las neuronas de la
capa oculta y la capa de salida. Utilice la nomenclatura del ejercicio 1.
3. Escriba las fórmulas de actualización de cada uno de los pesos de conexión entre las entradas y
las neuronas de la capa oculta. Utilice la nomenclatura del ejercicio 1.
) ) ) )
) )
Actualización de los pesos entre las neuronas de la capa oculta y la capa de salida.
) ) ) ) ) )
) ) ) ) ) )
) ) ) ) ) )
Página 2
4. Escriba el programa para realizar el aprendizaje por retropropagación del error para que la red
neuronal del ejercicio 1 aprenda a partir de los patrones de entrenamiento de una compuerta
XOR. Considere un factor de aprendizaje de 0.1; alfa=4. Grafique la curva de aprendizaje.
Considere aprendizaje en línea (ejemplo por ejemplo).
Grafique las líneas de frontera de la red neuronal de acuerdo a lo realizado en la actividad 7.
title('Funcion de la neurona z') xlabel('in1') ylabel('in2')
subplot(3,2,6); z11=round(z); %redondeo de la salida para q sea como funcion step mesh(in11,in22,z11) title('Linea de frontera') xlabel('in1') ylabel('in2')
Código del Programa:
in1=[0;0;1;1];
in2=[0;1;0;1];
inputs=[0 0;0 1;1 0;1 1];
targ=[0;1;1;0];
w=randn(1,9);
a01=w(1,1);
a11=w(1,2);
a12=w(1,3);
a21=w(1,4);
a22=w(1,5);
a02=w(1,6);
b0=w(1,7);
b1=w(1,8);
b2=w(1,9);
n=0.1;
alfa=4;
for j=1:500
serror=0;
for i=1:4
net1=a01+in1(i)*a11+in2(i)*a21;
y1=1./(1+exp(-alfa*net1));
net2=a02+in1(i)*a12+in2(i)*a22;
y2=1./(1+exp(-alfa*net2));
net=b0+y1*b1+y2*b2;
z=1./(1+exp(-alfa*net));
e=0.5*(targ(i)-z)^2;
db0=n*(targ(i)-z)*alfa*z*(1-z);
db1=n*(targ(i)-z)*alfa*z*(1-z)*y1;
db2=n*(targ(i)-z)*alfa*z*(1-z)*y2;
b0=b0+db0;
b1=b1+db1;
b2=b2+db2;
da01=n*(targ(i)-z)*(alfa^2)*z*(1-z)*b1*(1-y1)*y1;
da11=n*(targ(i)-z)*(alfa^2)*z*(1-z)*b1*(1-y1)*y1*in1(i);
da12=n*(targ(i)-z)*(alfa^2)*z*(1-z)*b2*(1-y2)*y2*in1(i);
a01=a01+da01;
a11=a11+da11;
a12=a12+da12;
da02=n*(targ(i)-z)*(alfa^2)*z*(1-z)*b2*(1-y2)*y2;
da21=n*(targ(i)-z)*(alfa^2)*z*(1-z)*b1*(1-y1)*y1*in2(i);
da22=n*(targ(i)-z)*(alfa^2)*z*(1-z)*b2*(1-y2)*y2*in2(i);
a02=a02+da02;
a21=a21+da21;
a22=a22+da22;
serror=serror+e;
end
E(j)=serror;
end
Página 3
plot(E);xlabel('Épocas');ylabel('Error cuadrático medio');title('Error')
[in11,in22]=meshgrid(0:0.01:1,0:0.01:1);
net1=a01+in11*a11+in22*a21; y1=1./(1+exp(-alfa*net1));
net2=a02+in11*a12+in22*a22; y2=1./(1+exp(-alfa*net2));
net=b0+y1*b1+y2*b2; z=1./(1+exp(-alfa*net));
figure subplot(1,2,1); mesh(in11,in22,z); title('funcion de la neurona');xlabel('in1');ylabel('in2')
subplot(1,2,2); z11=round(z); %redondeo de la salida para q sea como funcion step mesh(in11,in22,z11) title('linea de frontera');xlabel('in1');ylabel('in2')
subplot(3,2,1); mesh(in11,in22,y1); title('Funcion de la neurona y1');xlabel('in1');ylabel('in2')
subplot(3,2,2); y11=round(y1); %redondeo de la salida para q sea como funcion step mesh(in11,in22,y11) title('Linea de frontera');xlabel('in1');ylabel('in2')
subplot(3,2,3); mesh(in11,in22,y2); title('Funcion de la neurona y2');xlabel('in1');ylabel('in2')
subplot(3,2,4);
y22=round(y2); %redondeo de la salida para q sea como funcion step mesh(in11,in22,y22) title('Linea de frontera') xlabel('in1') ylabel('in2') % %z subplot(3,2,5); mesh(in11,in22,z); title('Funcion de la neurona z');xlabel('in1');ylabel('in2')
subplot(3,2,6); z11=round(z); %redondeo de la salida para q sea como funcion step mesh(in11,in22,z11) title('Linea de frontera');xlabel('in1');ylabel('in2')
0 50 100 150 200 250 300 350 400 450 5000
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Épocas
Err
or
cuadrá
tico m
edio
Página 4
5. Repita el numeral 4 pero con aprendizaje en paquete (“batch”). Grafique las líneas de
frontera de la red neuronal de acuerdo a lo realizado en la actividad 7.
En esta caso en la actualización en paquete solamente se modifica la siguiente parte del
código, de manera que la actualización de pesos de produzca al finalizar una época.
Código del Programa:
in1=[0;0;1;1]; in2=[0;1;0;1]; inputs=[0 0;0 1;1 0;1 1]; targ=[0;1;1;0]; w=randn(1,9); a01=w(1,1); a11=w(1,2); a12=w(1,3); a21=w(1,4); a22=w(1,5); a02=w(1,6); b0=w(1,7); b1=w(1,8); b2=w(1,9); n=0.1; alfa=4;
Página 5
for j=1:1000
serror=0;
db0=0;
db1=0;
db2=0;
da01=0;
da11=0;
da12=0;
da02=0;
da21=0;
da22=0;
for i=1:4
net1=a01+in1(i)*a11+in2(i)*a21;
y1=1./(1+exp(-alfa*net1));
net2=a02+in1(i)*a12+in2(i)*a22;
y2=1./(1+exp(-alfa*net2));
net=b0+y1*b1+y2*b2;
z=1./(1+exp(-alfa*net));
e=0.5*(targ(i)-z)^2;
db0=db0+n*(targ(i)-z)*alfa*z*(1-z);
db1=db1+n*(targ(i)-z)*alfa*z*(1-z)*y1;
db2=db2+n*(targ(i)-z)*alfa*z*(1-z)*y2;
da01=da01+n*(targ(i)-z)*(alfa^2)*z*(1-z)*b1*(1-y1)*y1;
da11=da11+n*(targ(i)-z)*(alfa^2)*z*(1-z)*b1*(1-y1)*y1*in1(i);
da12=da12+n*(targ(i)-z)*(alfa^2)*z*(1-z)*b2*(1-y2)*y2*in1(i);
da02=da02+n*(targ(i)-z)*(alfa^2)*z*(1-z)*b2*(1-y2)*y2;
da21=da21+n*(targ(i)-z)*(alfa^2)*z*(1-z)*b1*(1-y1)*y1*in2(i);
da22=da22+n*(targ(i)-z)*(alfa^2)*z*(1-z)*b2*(1-y2)*y2*in2(i);
serror=serror+e;
end
b0=b0+db0;
b1=b1+db1;
b2=b2+db2;
a01=a01+da01;
a11=a11+da11;
a12=a12+da12;
a02=a02+da02;
a21=a21+da21;
a22=a22+da22;
E(j)=serror;
end
plot(E);xlabel('Épocas');ylabel('Error cuadrático medio');title('Error')
[in11,in22]=meshgrid(0:0.01:1,0:0.01:1);
net1=a01+in11*a11+in22*a21;
y1=1./(1+exp(-alfa*net1));
net2=a02+in11*a12+in22*a22;
y2=1./(1+exp(-alfa*net2));
net=b0+y1*b1+y2*b2;
z=1./(1+exp(-alfa*net));
figure
subplot(3,2,1);
mesh(in11,in22,y1);
title('Funcion de la neurona y1');xlabel('in1');ylabel('in2')
subplot(3,2,2);
y11=round(y1); %redondeo de la salida para q sea como funcion step
mesh(in11,in22,y11)
title('Linea de frontera');xlabel('in1');ylabel('in2')
subplot(3,2,4);
y22=round(y2); %redondeo de la salida para q sea como funcion step
mesh(in11,in22,y22)
title('Linea de frontera')
Página 6
subplot(3,2,3); mesh(in11,in22,y2);
title('Funcion de la neurona y2');xlabel('in1');ylabel('in2')
subplot(3,2,4); y22=round(y2); %redondeo de la salida para q sea como funcion step mesh(in11,in22,y22)
title('Linea de frontera');xlabel('in1');ylabel('in2')
subplot(3,2,5); mesh(in11,in22,z);
title('Funcion de la neurona z');xlabel('in1');ylabel('in2')
subplot(3,2,6); z11=round(z); %redondeo de la salida para q sea como funcion step mesh(in11,in22,z11)
title('Linea de frontera');xlabel('in1');ylabel('in2')
0 100 200 300 400 500 600 700 800 900 10000
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Épocas
Err
or
cuadrá
tico m
edio
Página 7
Yo Evelyn Gabriela Lema Vinueza afirmo que esta actividad es de mi autoría y establezco que
para la elaboración de la misma he seguido los lineamientos del Código de Ética de la
Universidad de las Fuerzas Armadas ESPE