Utp 2015-2_ia lab2

18
INTELIGENCIA ARTIFICIAL LABORATORIO No. 2 REDES NEURONALES ARTIFICIALES Prof. Mg. Ing. José C. Benítez P. INDICACIONES: - Si en el Informe del Laboratorio o en los scripts de Matlab se encuentra un ejercicio copiado o parcialmente copiado la nota del Laboratorio será CERO. - Los laboratorios presentados fuera del plazo establecido tendrán nota NS. OBJETIVO: Verificar la utilidad del gráfico del Patrón de Entrenamiento. Graficar el PE del Perceptron. Entrenar el Perceptron con sentencias del Command Windows (CW). Utilizar la herramienta nntool para entrenar una red Perceptron. Entrenar el Adaline con sentencias del CW. Utilizar la herramienta nntool para entrenar una red Adaline. Entrenar el Backpropagation mediante sentencias del CW. Utilizar la herramienta nntool para entrenar una red Backpropagation. Entrenar la red de Base Radial con sentencias del CW. Utilizar la herramienta nntool para entrenar una red de Base Radial. Entrenar la red de Kohonen mediante sentencias del CW. Utilizar la herramienta nntool para entrenar una red de Kohonen. RESUMEN TEORICO 1. GRAFICA DEL PATRON DE ENTRENAMIENTO (PE): El gráfico del PE como se vió en la teoría, nos permite saber con anticipación si la red es entrenable o si la red aprende. En este laboratorio se verificará dicha utilidad. En el MatLab existe un comando que nos permite graficar los PE de las redes neuronales. Este comando es: plotpv (X, D); donde X es el Patrón de Entrada y D son las salidas deseadas. 2. LA HERRAMIENTA NNTOOL DEL MATLAB El MatLab posee una herramienta para el aprendizaje de redes neuronales llamada nntool, el que nos permite entrenar y manipular los datos de entrada de una red neuronal. Esta herramienta nos muestra un Guide en el que de manera sencilla se puede ingresar los datos de la red.

Transcript of Utp 2015-2_ia lab2

Page 1: Utp 2015-2_ia lab2

INTELIGENCIA ARTIFICIAL

LABORATORIO No. 2

REDES NEURONALES ARTIFICIALES

Prof. Mg. Ing. José C. Benítez P.

INDICACIONES: - Si en el Informe del Laboratorio o en los scripts de Matlab se encuentra un ejercicio

copiado o parcialmente copiado la nota del Laboratorio será CERO. - Los laboratorios presentados fuera del plazo establecido tendrán nota NS.

OBJETIVO:

� Verificar la utilidad del gráfico del Patrón de Entrenamiento.

� Graficar el PE del Perceptron.

� Entrenar el Perceptron con sentencias del Command Windows (CW).

� Utilizar la herramienta nntool para entrenar una red Perceptron.

� Entrenar el Adaline con sentencias del CW.

� Utilizar la herramienta nntool para entrenar una red Adaline.

� Entrenar el Backpropagation mediante sentencias del CW.

� Utilizar la herramienta nntool para entrenar una red Backpropagation.

� Entrenar la red de Base Radial con sentencias del CW.

� Utilizar la herramienta nntool para entrenar una red de Base Radial.

� Entrenar la red de Kohonen mediante sentencias del CW.

� Utilizar la herramienta nntool para entrenar una red de Kohonen.

RESUMEN TEORICO

1. GRAFICA DEL PATRON DE ENTRENAMIENTO (PE):

El gráfico del PE como se vió en la teoría, nos permite saber con anticipación si la red

es entrenable o si la red aprende. En este laboratorio se verificará dicha utilidad.

En el MatLab existe un comando que nos permite graficar los PE de las redes

neuronales.

Este comando es: plotpv (X, D); donde X es el Patrón de Entrada y D son las salidas

deseadas.

2. LA HERRAMIENTA NNTOOL DEL MATLAB

El MatLab posee una herramienta para el aprendizaje de redes neuronales llamada

nntool, el que nos permite entrenar y manipular los datos de entrada de una red

neuronal. Esta herramienta nos muestra un Guide en el que de manera sencilla se

puede ingresar los datos de la red.

Page 2: Utp 2015-2_ia lab2

Para ingresar a la herramienta, en el CW ingresar: >> nntool, y aparecerá el Guide

siguiente:

3. ENTRENAR LA RED PERCEPTRON MEDIANTE COMANDOS DEL CW

Para entrenar una RN se debe realizar los siguientes pasos:

a. Definir el conjunto (patrón) de entrenamiento del problema.

b. Crear la red Perceptron en MatLab.

c. Inicializar W y b.

d. Entrenar la red.

e. Verificar la red entrenada,

También hay otras actividades que se deben realizar:

f. Mostrar los W y b antes de entrenar (los valores por defecto o inicializados).

g. Graficar el PE.

h. Mostrar la LS antes de entrenar.

i. Mostrar los W y b después de entrenar.

j. Mostrar la LS después de entrenar.

El MatLab posee comandos para realizar algunas de estos pasos:

a. Definir el conjunto de entrenamiento: P (Patrones de entrada) y T (Salidas

deseadas).

Ejemplo: Para la red perceptron de la función lógica OR, se tiene el siguiente patrón

de entrenamiento:

P = [0 0 1 1; 0 1 0 1]; T = [0 1 1 1];

b. Crear la red Perceptron se usa el comando newp.

- Para obtener la ayuda sobre este comando, ingresar en el CW:

Page 3: Utp 2015-2_ia lab2

>> help newp

Se mostrará la ayuda:

Syntax net = newp(p,t,tf,lf) Description Perceptrons are used to solve simple (i.e. linearly separable) classification problems. NET = NEWP(P,T,TF,LF) takes these inputs, P - RxQ matrix of Q1 representative input vectors. T - SxQ matrix of Q2 representative target vectors. TF - Transfer function, default = 'hardlim'. LF - Learning function, default = 'learnp'. Returns a new perceptron. The transfer function TF can be HARDLIM or HARDLIMS. The learning function LF can be LEARNP or LEARNPN. Ejemplo:

>>net = newp([0 1; -2 2],1);

c. Inicializar la red; inicializar W y b.

Ejemplo:

Pesos iniciales:

>>net.iw{1,1} = [1 1]

>> W0= net.iw{1,1} % Se guardan los pesos iniciales.

Bias inicial:

>>net.b{1} = 0.5

>>b0= net.b{1} %Se guardan los bias iniciales.

- Para definir el número de etapas:

Ejemplo:

>>net.trainParam.epochs=20

d. Entrenar la red. Para entrenar la red se usa el comando train.

Ejemplo:

>>net = train(net, P, T);

e. Verificar la red entrenada,

- Para probar (simular) la red:

Ejemplo:

Page 4: Utp 2015-2_ia lab2

>>Y = net(P)

f. Mostrar los W y b antes de entrenar.

>> W0

>>b0

g. Graficar el PE.

>>plotpv(P, T)

h. Mostrar la LS antes de entrenar.

>>plotpc(W0, b0)

i. Mostrar los W y b después de entrenar

>> Wf=net.iw{1, 1}

>>bf=net.b{1}

j. Mostrar la LS después de entrenar.

>>plotpc(Wf, bf)

4. ENTRENAR LA RED PERCEPTRON MEDIANTE LA HERRAMIENTA NNTOOL

DEL MATLAB

Ingresar a la herramienta:

>>nntool

Se mostrará la ventana administrador de red y datos (VARD):

Pinchar en New y aparecerá:

Page 5: Utp 2015-2_ia lab2

Cambiar en Name de network1 a SLP1 y seleccionar en Network Type Perceptron

Pinchar en la pestaña Data:

Page 6: Utp 2015-2_ia lab2

Ingresar en Name: P, y en Data Type seleccionar Inputs, y en Value ingresar [0 0 1 1;

0 1 0 1], al final pinchar en el botón Create. Aparecerá el siguiente mensaje:

Pinchar en OK para cerrar este mensaje.

Ingresar en Name: T, y en Data Type seleccionar Targets, y en Value ingresar [0 1 1

1], al final pinchar en el botón Create. Aparecerá el siguiente mensaje:

Pinchar en OK para cerrar este mensaje.

Pinchar en la pestaña Network de la ventana.

Page 7: Utp 2015-2_ia lab2

Pinchar en el botón Create. Muestra en siguiente mensaje:

Indicando que se debe seleccionar las entradas. Vuelva a la ventana pinchando en OK

y corrija. Debe quedar como se muestra:

Page 8: Utp 2015-2_ia lab2

Pinchar en el botón Create. Debe mostrar el siguiente mensaje:

Pinchar en OK para cerrar el mensaje.

Pinchar en View para ver la red creada. Se muestra así:

Cerrar la ventana pinchando en X.

Pinchar en el botón Close.

La ventana administrador de red y datos (VARD) ahora muestra lo siguiente:

Page 9: Utp 2015-2_ia lab2

Seleccionar en la sección Networks a SLP1:

Pinchar en el botón Open y se muestra la red SLP1:

Seleccionar la pestaña Train:

Page 10: Utp 2015-2_ia lab2

Seleccionar los Inputs y Targets ingresados:

Pinchar en el botón Train Network y se mostrará la ventana Neural Network Training

(NNT):

Pinchar en Performance y se muestra:

Page 11: Utp 2015-2_ia lab2

Cerrar la ventana pinchando en X. Otra vez pinchar en X para cerrar la ventana Neural

Network training.

En la ventana Network SLP1 pinchar en la pestaña Simulate para verificar la red.

Seleccione las Inputs P.

Pinchar en Simulate Network y se muestra el mensaje:

Cerrar la ventana del mensaje pinchando en Ok.

En la ventana Administrador de red y datos (VARD) pinchar en SLP1_outputs, se

mostrará:

Page 12: Utp 2015-2_ia lab2

5. ENTRENAR LA RED ADALINE MEDIANTE COMANDOS DEL COMMAND

WINDOWS

MatLab dispone de una función para crear redes Adaline: newlin

- Para obtener ayuda sobre este comando, en el CW ingresar:

>> help newlin

NEWLIN Create a linear layer. Syntax net = newlin(P,S,ID,LR) net = newlin(P,T,ID,LR) Description Linear layers are often used as adaptive filters for signal processing and prediction. NEWLIN(P,S,ID,LR) takes these arguments, P - RxQ matrix of Q representative input vectors. S - Number of elements in the output vector. ID - Input delay vector, default = [0]. LR - Learning rate, default = 0.01; and returns a new linear layer. NEWLIN(P,T,ID,LR) takes the same arguments except for T - SxQ2 matrix of Q2 representative S-element output vectors. NET = NEWLIN(PR,S,0,P) takes an alternate argument, P - Matrix of input vectors. and returns a linear layer with the maximum stable learning rate for learning with inputs P. Ejemplo:

- Patrón de entrenamiento:

>> P = [2 1 -2 -1; 2 -2 2 1];

>> T = [0 1 0 1];

- Creación de la red Adaline:

>> net = newlin(P,T);

- Definiendo parámetros de la red:

>> net.trainParam.goal= 0.1;

- Pesos y bias iniciales:

>> Wi = net.iw{1,1}

Wi =

0 0

Page 13: Utp 2015-2_ia lab2

>> bi = net.b(1)

bf =

[0]

- Entrenando la red

>> net = train(net,P,T);

El problema se ejecuta para 64 épocas, alcanzando un error medio cuadrático de

0.0999.

- Pesos y bias finales

>> Wf = net.iw{1,1}

Wf =

-0.0615 -0.2194

>> bf = net.b(1)

bf =

[0.5899]

- Simulación de la red

>> A = sim(net, P)

A =

0.0282 0.9672 0.2741 0.4320

- Cálculo del error:

>> err = T - sim(net,P)

err =

-0.0282 0.0328 -0.2741 0.5680

6. ENTRENAR LA RED ADALINE MEDIANTE LA HERRAMIENTA NNTOOL DEL

MATLAB

Utilizar la herramienta nntool para realizar el entrenamiento de la misma red del

apartado anterior.

7. ENTRENAR LA RED BACKPROPAGATION MEDIANTE COMANDOS DEL

COMMAND WINDOWS

MatLab dispone de una función para crear redes BAckpropagation: newff

- Para obtener ayuda sobre este comando: En el CW ingresar:

>> help newff

NEWFF Create a feed-forward backpropagation network. Syntax net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF) Description NEWFF(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF) takes,

Page 14: Utp 2015-2_ia lab2

P - RxQ1 matrix of Q1 representative R-element input vectors. T - SNxQ2 matrix of Q2 representative SN-element target vectors. Si - Sizes of N-1 hidden layers, S1 to S(N-1), default = []. (Output layer size SN is determined from T.) TFi - Transfer function of ith layer. Default is 'tansig' for hidden layers, and 'purelin' for output layer. BTF - Backprop network training function, default = 'trainlm'. BLF - Backprop weight/bias learning function, default = 'learngdm'. PF - Performance function, default = 'mse'. IPF - Row cell array of input processing functions. Default is {'fixunknowns','removeconstantrows','mapminmax'}. OPF - Row cell array of output processing functions. Default is {'removeconstantrows','mapminmax'}. DDF - Data division function, default = 'dividerand'; and returns an N layer feed-forward backprop network. The transfer functions TF{i} can be any differentiable transfer function such as TANSIG, LOGSIG, or PURELIN. The training function BTF can be any of the backprop training functions such as TRAINLM, TRAINBFG, TRAINRP, TRAINGD, etc. *WARNING*: TRAINLM is the default training function because it is very fast, but it requires a lot of memory to run. If you get an "out-of-memory" error when training try doing one of these: (1) Slow TRAINLM training, but reduce memory requirements, by setting NET.trainParam.mem_reduc to 2 or more. (See HELP TRAINLM.) (2) Use TRAINBFG, which is slower but more memory efficient than TRAINLM. (3) Use TRAINRP which is slower but more memory efficient than TRAINBFG. The learning function BLF can be either of the backpropagation learning functions such as LEARNGD, or LEARNGDM. The performance function can be any of the differentiable performance functions such as MSE or MSEREG. Ejemplo 1: Backpropagation

- Patrón de entrenamiento:

>> P = [0 1 2 3 4 5 6 7 8 9 10];

>> T = [0 1 2 3 4 3 2 1 2 3 4];

- Creación de la BP con 5 neuronas en la CO.

>> net = newff(P,T,5);

- Prueba de la red antes del entrenamiento.

>> Y = sim(net,P);

- Gráfico de entradas versus salidas y salidas deseadas antes del entrenamiento

>> plot(P,T,P,Y,'o');

- Entrenamiento de la red para 50 épocas.

>> net.trainParam.epochs = 50;

Page 15: Utp 2015-2_ia lab2

>> net = train(net,P,T);

>> Y = sim(net,P);

- Gráfico de entradas versus salidas y salidas deseadas después del entrenamiento

>> figure, plot(P,T,P,Y,'o');

Ejemplo 2. Función lógica XOR, entrada binaria y salida binaria: 2 - 4 – 1

- P Entradas y T salidas deseadas

>> P = [0 0 1 1; 0 1 0 1];

>> T = [0 1 1 0];

- Creación de la red

>> net = newff(minmax(p), [4 1], {'logsig','logsig'}, 'trainlm');

>> Y = sim(net,P);

- Gráfico de entradas versus salidas y salidas deseadas

>> plot(P,T,P,Y,'o');

- Entrenamiento

>> net.trainParam.show = 25;

>> net.trainParam.lr =0.02;

>> net.trainParam.epochs = 400;

>> net.trainParam.goal = 1e-8;

>>[net,tr] = train(net,P,T);

- Simulación

>> Y = sim(net,P);

- Gráfico de entradas versus salidas y salidas deseadas

>> figure, plot(P,T,P,Y,'o');

>> e = T -round(Y)

8. ENTRENAR LA RED BACKPROPAGATION MEDIANTE LA HERRAMIENTA

NNTOOL DEL MATLAB

Utilizar la herramienta nntool para realizar el entrenamiento de la misma red del

apartado anterior.

PROCEDIMIENTO

1. Gráfico del patrón de entrenamiento del Perceptron.

a. Graficar el PE del Perceptron verificar si es entrenable, sin no lo es, hacerla

entrenable:

i. La función lógica Bicondicional.

ii. La expresión lógica ~(A � B) ∧ ~(A ∧ C)

iii. La expresión lógica ~(~(A<=>B)<=>C)

iv. X= [-0.6 -0.9 1.0 -0.8 -1.0 0.5; -1.0 -1.0 0.5 -0.5 -1.0 1.0],

Page 16: Utp 2015-2_ia lab2

T=[0 1 1 0 0 1; 1 1 0 1 1 0]

v. X=[-0.2 1.0 0.4 -1.0 -1.0 0.5; 1.0 0.8 0.2 -0.4 -0.3 1.0], T=[1 1 -1 1 1 -1;

1 -1 1 -1 1 -1; 1 -1 -1 -1 1 -1]

vi. X=[-0.2 1.0 0.4 -1.0 -1.0 0.5; 1.0 0.8 0.2 -0.4 -0.3 1.0; 1.0 0.8 -0.2 0.4

0.3 -1.0], T=[1 1 -1 1 1 -1; 1 -1 -1 -1 1 1; -1 -1 1 -1 1 1]

En cada una de ellas responder: ¿Es entrenable? Justificar su respuesta.

b. Diseñar un Perceptron de 2 entradas entrenable, donde cada entrada tenga 10 valores, con FT hardlim.

c. Diseñar un Perceptron de 3 entradas entrenable, donde cada entrada tenga 10 valores, con FT hardlim.

d. Diseñar un Perceptron de una expresión lógica (EL), que contenga 4 funciones lógicas de 2 entradas entrenable.

e. Diseñar un Perceptron de una expresión lógica (EL), que contenga 4 funciones lógicas de 3 entradas entrenable.

2. Mediante comando del CW entrenar las redes Perceptron entrenables de la

pregunta del procedimiento 1. En cada uno:

a. Graficar la red.

b. Escribir las matrices representativas.

c. Realizar gráficos del PE,

d. Graficar LS/PS antes y después del entrenamiento y

e. Mostrar los W y b iniciales, y W y b finales.

f. Indicar cuál es el efecto del número de épocas.

3. Mediante la herramienta nntool entrenar las redes Perceptron entrenables de la

pregunta del procedimiento 1:

a. Mostrar la performance del entrenamiento. Explicar.

b. Mostrar el estado del entrenamiento. Explicar.

4. Entrenar redes Adaline de aproximación lineal de las funciones, con sentencias del

CW:

a. y = 2x1 – x2 + 1.5.

Donde P = [1 -2 3 -1; 3 2 4 -3], W0 = [2 -1] y b0=1.5. Graficar la función.

b. y = 2x1 – x2 + 3.

Donde P = [-2 -1 0 0 1 2; 1 -2 1 -1 2 1], Tolerancia del error=0.0001,

iteraciones=200.

Hallar el error medio de salida (mae) y el error medio del clasificador.

Graficar la función.

c. y = 0.5x1 + 0.5x2 + 0.5.

Donde P = [1 1 -1 -1; 1 -1 1 -1], T= [1 1 1 -1], Tolerancia del error=0.1,

iteraciones=100.

Hallar el error medio de salida (mae) y el error medio del clasificador.

Graficar la función.

5. Utilizar la herramienta nntool para entrenar redes Adaline del punto anterior.

6. Entrenar tres (03) redes Backpropagation con sentencias del CW indicando su

utilidad práctica.

Ejemplo:

Page 17: Utp 2015-2_ia lab2

Utilidad práctica: Aproximador de funciones: y=x2+3x

Donde P=-4:0.5:4; Regla de Aprendizaje: Levenrg-Marquardt.

Graficar la función.

Parámetros de la red:

- Mostrar los resultados cada 50 iteraciones.

- Tasa de aprendizaje: 0.1

- Número máximo de iteraciones: 200

- Tolerancia del error como criterio de parada: 0.0001

- Valor mínimo del gradiente para parar: 0.00001

7. Utilizar la herramienta nntool para entrenar las redes Backpropagation de punto

anterior.

8. Entrenar tres (03) redes de Kohonen mediante sentencias del CW indicando su

utilidad práctica.

9. Utilizar la herramienta nntool para entrenar redes de Kohonen del punto anterior.

10. Entrenar tres (03) redes de Base Radial con sentencias del CW indicando su

utilidad práctica.

Ejemplo:

Utilidad práctica: Aproximador de funciones: function [W phi]=rbff(X,Y,Xc) Nc = size(Xc,1); %número de centros W = zeros(Nc,1); %Inicializar matriz de pesos [z phi] = rbfsim(Xc,X,W); %simular RFBR A=pinv(phi'*phi)*phi'; %calcular la pseudo inversa de phi W=A*Y; %Hallar matriz de pesos

function [z phi]=rbfsim(Xc,X,W) Nc = size(Xc,1); %número de centros

N_p = size(X,1); %número de puntos

k = ones(Nc);

phi=zeros(N_p,Nc); %salidas de la RFBR

for i=1:Nc if k(i)==0

phi(:,i)=1;

else

r=sqrt(sum((repmat(Xc(i,:),N_p,1)-X(:,:)).^2,2));%distancia de Xc a X

phi(:,i)=exp(-k(i).*r.^2);

end end

z=phi*W;

%1. Inicialización de Parámetros fprintf(1,'\n Ejemplo de aproximación de funciones a través de redes RFBR\n') %El usuario debe indicar el número de puntos que desea de la función a aproximar Nt = input('\n Indicar el número de puntos que desea aproximar\n'); %El usuario debe indicar el número de centros de la red RBF Nc = input('\n Indicar el número de centros de la red RBF que desea:\n'); Xt = rand(Nt,1); %entradas de la red Yt = rand(Nt,1); %salidas de la red (función a aproximar) Xc = rand(Nc,1); %centros de la RFBR %2. Aprendizaje [W] = rbff(Xt,Yt,Xc); %matriz de pesos por entrenamiento %3. Simulación y Traficación Np = 100*ones(1,1); %número de puntos a calcular

Page 18: Utp 2015-2_ia lab2

Xp = linspace(0,1,Np(1))'; %puntos a calcular [Yd phi]= rbfsim(Xc,Xp,W); figure(1), plot(Xp,Yd) hold on, plot(Xt,Yt,'k*'), hold off

11. Utilizar la herramienta nntool para entrenar redes de Base Radial del punto

anterior.

INFORME FINAL

El Informe de Laboratorio es un documento gráfico en lo posible y es redactado en

Word con el desarrollo del laboratorio.

Niveles de Informe:

• Primer nivel: Observaciones. Imágenes con comentarios cortos. Redactar al ir

desarrollando el laboratorio. (Requiere desarrollar el laboratorio).

• Segundo nivel: Conclusiones. Redactar al terminar el laboratorio. (Requiere

haber desarrollado el laboratorio).

• Tercer Nivel: Recomendaciones. (Requiere la lectura de otras fuentes).

Dentro de su Carpeta Personal del Dropbox crear una nueva carpeta para el

Laboratorio 2 con el siguiente nombre:

IA_PaternoM_L2

Esta carpeta debe contener el Informe de Laboratorio, los códigos, las fuentes y

recursos utilizados.

Las fuentes deben conservar el nombre original de archivo y se debe agregar en su

nombre “_L2” al final.

CUESTIONARIO

1. Mostrar en el Informe de Laboratorio los resultados del Resumen Teórico, los

Procedimientos, el Cuestionario y ejercicios del laboratorio. El Informe no contiene

códigos, sólo las referencias a los números de líneas de los scripts.

2. Dar un ejemplo de aplicación práctica (incluir el scripts comentados de Matlab) de las redes:

a. SLP. b. MLP. c. Adaline. d. Madaline. e. Backpropagation. f. Kohonen. g. Base Radial.

3. Mostrar sus observaciones, conclusiones y recomendaciones.

FUNCIONES DE MATLAB:

plotpc, plotpv, nntool, newp, newlin, newff, newrb, newsom, train, y sim.