Redes Neuronales_Práctica 2

13
Práctica 2 EL PERCEPTRON MULTICAPA Objetivo: Que el alumno compruebe experimentalmente las capacidades de aproximación de funciones de un perceptron multicapa. Desarrollo 1. Escriba un código en Matlab® para implementar un perceptron multicapa con aprendizaje tipo retropropagación que aprenda la función f(x,y)=cos(x)-3sen(y) con 0x2π y 0y2π 2. Reporte tanto el código como los resultados obtenidos (gráfica de la función a aproximar, grafica de la función aproximada, grafica del error, grafica del error medio cuadrático, vector de pesos y bias, etc.). 3. Verifique la capacidad de generalización de la red utilizando patrones similares a los del entrenamiento. 4. Reporte los resultados obtenidos en el punto anterior. 5. Repita los pasos de 1 al 5 usando un aprendizaje tipo Levenberg-Marquardt. 6. Conclusiones y observaciones. REPORTE 1. Escriba un código en Matlab® para implementar un perceptron multicapa con aprendizaje tipo retropropagación que aprenda la función f(x,y)=cos(x)-3sen(y) con 0x2π y 0y2π Alejandro Lizárraga Maldonado Redes Neuronales Artificiales Práctica 2

Transcript of Redes Neuronales_Práctica 2

Page 1: Redes Neuronales_Práctica 2

Práctica 2

EL PERCEPTRON MULTICAPA Objetivo: Que el alumno compruebe experimentalmente las capacidades de aproximación de funciones de un perceptron multicapa. Desarrollo

1. Escriba un código en Matlab® para implementar un perceptron multicapa con aprendizaje tipo retropropagación que aprenda la función f(x,y)=cos(x)-3sen(y) con 0≤x≤2π y 0≤y≤2π

2. Reporte tanto el código como los resultados obtenidos (gráfica de la función a aproximar, grafica de la función aproximada, grafica del error, grafica del error medio cuadrático, vector de pesos y bias, etc.).

3. Verifique la capacidad de generalización de la red utilizando patrones similares a los del entrenamiento.

4. Reporte los resultados obtenidos en el punto anterior. 5. Repita los pasos de 1 al 5 usando un aprendizaje tipo Levenberg-Marquardt. 6. Conclusiones y observaciones.

REPORTE

1. Escriba un código en Matlab® para implementar un perceptron multicapa con aprendizaje tipo retropropagación que aprenda la función f(x,y)=cos(x)-3sen(y) con 0≤x≤2π y 0≤y≤2π

Alejandro Lizárraga Maldonado Redes Neuronales Artificiales Práctica 2

Page 2: Redes Neuronales_Práctica 2

2. Reporte tanto el código como los resultados obtenidos (gráfica de la función a aproximar, grafica de la función aproximada, grafica del error, grafica del error medio cuadrático, vector de pesos y bias, etc.).

CODIGO clear all ; clc; f_1 (1:400) = 0 ; x_1 = f_1 ; y_1 = x_1 ; f1_1 (1:400) = 0 ; x1_1 = f_1 ; y1_1 = x_1 ; x = 0 : 0.1*pi : 1.9*pi ; y = 0 : 0.1*pi : 1.9*pi ; x1 = 0 : 0.2*pi : 1.8*pi ; y1 = 0 : 0.2*pi : 1.8*pi ; for s=1:1:20 for s1=1:1:20 f(s,s1) = cos(x(s))-3.*sin(y(s1)); h = 20*(s-1) + s1; x_1 (h)= x(s1); y_1 (h)= y(s); f_1 (h)= f(s,s1); hold on end end for s=1:1:10 for s1=1:1:10 f1(s,s1) = cos(x1(s))-3.*sin(y1(s1)); h= 10*(s-1) + s1; x1_1 (h)= x1(s1); y1_1 (h)= y1(s); f1_1 (h)= f1(s,s1); hold on end end net=newff(minmax([x_1;y_1]),[7,7,7,1],{ 'tansig' , 'tansig' , 'tansig' , 'purelin'}, 'traingd' ); net.trainParam.epochs = 2000; net.trainParam.goal=1e-4; [net,tr]=train(net,[x_1;y_1],f_1); Y=sim(net,[x_1;y_1]); Y1=sim(net,[x1_1;y1_1]);

Page 3: Redes Neuronales_Práctica 2

figure plot3(x_1,y_1,Y, 'ro' ) hold on mesh(x,y,f) figure plot3(x1_1,y1_1,Y1, 'ko' ) hold on mesh(x1,y1,f1) VENTANA DE ENTRENAMIENTO

Page 4: Redes Neuronales_Práctica 2

GRAFICA DE LA FUNCIÓN REAL CONTRA EL ENTRENAMIENTO

GRÁFICA DEL ERROR

GRÁFICA DEL ERROR MEDIO CUADRÁTICO

Page 5: Redes Neuronales_Práctica 2

BIAS >> net.b{1} ans = -8.6115 -6.8972 6.3613 3.2058 -2.1491 2.3403 2.6844 VECTOR DE PESOS >> net.IW{1} ans = 1.2606 0.8418 2.0274 0.4762 -1.2112 -0.2038 -0.3384 -1.4042 -0.4898 0.9913 -1.5553 -0.6913

Page 6: Redes Neuronales_Práctica 2

1.0139 -0.6300 >> net.IW ans = [7x2 double] [] [] []

3. Verifique la capacidad de generalización de la red utilizando patrones similares a los del entrenamiento.

GRÁFICA DE LA FUNCIÓN REAL CONTRA LA GENERALIZACIÓN DE LA RED

4. Reporte los resultados obtenidos en el punto anterior. Si obervamos la ventana del entrenamiento de red, notaremos que se agotaron las iteraciones antes de alcanzar el error deseado. Podemos notar esto al observar en la gráfica anterior que existen pequeñas discrepancias entre los valores arrojados por la red (círculos negros) y los valores reales esperados (malla). Se debe a que el entrenamiento tipo gradiente es demasiado lento.

Page 7: Redes Neuronales_Práctica 2

Podemos observar que la gráfica del gradiente y en la del error, que tienen un decaimiento exponencial del tipo �

��� donde � > 0. Por lo tanto, llega un punto donde el error decrece muy lentamente. Una vez que se llega este punto, es muy improbabable que el gradiente alcance el nivel de error deseado pues el comportamiento es asintótico alrededor de esos valores.

Page 8: Redes Neuronales_Práctica 2

5. Repita los pasos de 1 al 5 usando un aprendizaje tipo Levenberg-Marquardt. CODIGO clear all ; clc; f_1 (1:400) = 0 ; x_1 = f_1 ; y_1 = x_1 ; f1_1 (1:400) = 0 ; x1_1 = f_1 ; y1_1 = x_1 ; x = 0 : 0.1*pi : 1.9*pi ; y = 0 : 0.1*pi : 1.9*pi ; x1 = 0 : 0.2*pi : 1.8*pi ; y1 = 0 : 0.2*pi : 1.8*pi ; for s=1:1:20 for s1=1:1:20 f(s,s1) = cos(x(s))-3.*sin(y(s1)); h = 20*(s-1) + s1; x_1 (h)= x(s1); y_1 (h)= y(s); f_1 (h)= f(s,s1); hold on end end for s=1:1:10 for s1=1:1:10 f1(s,s1) = cos(x1(s))-3.*sin(y1(s1)); h= 10*(s-1) + s1; x1_1 (h)= x1(s1); y1_1 (h)= y1(s); f1_1 (h)= f1(s,s1); hold on end end net=newff(minmax([x_1;y_1]),[7,7,7,1],{ 'tansig' , 'tansig' , 'tansig' , 'purelin'}, 'trainlm' ); net.trainParam.epochs = 2000; net.trainParam.goal=1e-4; [net,tr]=train(net,[x_1;y_1],f_1); Y=sim(net,[x_1;y_1]); Y1=sim(net,[x1_1;y1_1]); figure plot3(x_1,y_1,Y, 'ro' )

Page 9: Redes Neuronales_Práctica 2

hold on mesh(x,y,f) figure plot3(x1_1,y1_1,Y1, 'ko' ) hold on mesh(x1,y1,f1) VENTANA DE ENTRENAMIENTO

Page 10: Redes Neuronales_Práctica 2

GRAFICA DE LA FUNCIÓN REAL CONTRA EL ENTRENAMIENTO

GRÁFICA DEL ERROR

Page 11: Redes Neuronales_Práctica 2

GRÁFICA DEL ERROR MEDIO CUADRÁTICO

BIAS >> net.b{1} ans = 5.2519 -0.6889 -4.9063 0.6297 -1.2405 0.0741 -1.8155 VECTOR DE PESOS >> net.IW{1}

Page 12: Redes Neuronales_Práctica 2

ans = -0.8813 -0.0458 -0.0225 -1.1113 -0.0017 0.9992 0.2070 -0.5231 0.5173 -0.0631 0.3298 -0.0205 0.0360 0.5094 >> net.IW ans = [7x2 double] [] [] [] GRÁFICA DE LA FUNCIÓN REAL CONTRA LA GENERALIZACIÓN DE LA RED

OBSERVACIONES El entrenamiento Levenberg-Marquardt fue mucho más rápido que el de tipo gradiente. Al comparar las gráficas del error podemos observar claramente que el decaimiento es mucho más abrupto. La gráfica del error medio cuadrático podemos observamos que los valores deseados y los arrojados por la red son prácticamente los mismo.

Page 13: Redes Neuronales_Práctica 2

1. Conclusiones y observaciones.

El entrenamiento Levenberg-Marquardt es mucho mejor en el caso del perceptrón multicapa. El entreanamiento tipo gradiente tiene un comportamiento asintótico muy poco deseado, pues una vez que se sigue este patrón, el valor del error no podrá llegar por debajo de la asíntota, aún cuando se iteraran infinitamente ciclos de entrenamiento.