Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
Práctica 1Objetivo: Diseñar, entrenar y simular una RNA que reconozca los puntos de grupos linealmente separables en MATLAB.
Usando los puntos de la función AND
• Graficar en el plano los puntos X1, X2, X3, X4 de R2 con el cual se entrenará la RNA en este caso
Plano con los puntos (0,0), (0,1), (1,0), (1,1) para entrenar la RNA (función AND)
La clase cero tiene 3 elementos {(0,0), (0,1), (1,0)} y la clase uno tiene 1 elemento {(1,1)}, diseñar, entrenar y simular la RNA.
DISEÑO DE LA RNA
% Se establece la RNA con los valores máximo y mínimo para los puntos>> pr1_ej1 = newp([0,1;0,1],[0,1]);
% Se emplearán 10 épocas para el entrenamiento>> pr1_ej1.trainParam.epochs = 10;
>> P=[0 0 1 1; 0 1 0 1]
P = 0 0 1 1 0 1 0 1
>> T=[0 0 0 1]
T = 0 0 0 1
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
ENTRENAMIENTO DE LA RNA
>> pr1_ej1 = train(pr1_ej1,P,T);
Entrenamiento de la Red
SIMULAR LA RNA>> valores = sim(pr1_ej1,P)
valores =
0 0 0 1
En este caso, se simula la RNA empleando los valores para los pesos y el bias de forma aleatoria (es decir, valores asignados de manera aleatoria por MATLAB).
>> pesos = pr1_ej1.iw{1,1}
pesos =
2 1
>> bias = pr1_ej1.b{1}
bias =
-3
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
El punto (-1,5) en ¿cuál clase está ubicado?
De acuerdo con la RNA entrenada, el punto (-1,5) es clasificado en la clase 1:
% Se simula la red pr1_ej1 (RNA para la función AND) clasificando el punto (-1,5)>> valores = sim(pr1_ej1,[-1;5])
valores =
1
El punto (4,-10) en ¿cuál clase está ubicado?
De acuerdo con la RNA entrenada, el punto (4,-10) es clasificado en la clase 0:
% Se simula la red pr1_ej1 (RNA para la función AND) clasificando el punto (4,-10)>> valores = sim(pr1_ej1,[4;-10])
valores =
0
Realizar lo mismo con los puntos de la función OR
• Graficar en el plano los puntos X1, X2, X3, X4 de R2 con el cual se entrenará la RNA en este caso
Plano con los puntos (0,0), (0,1), (1,0), (1,1) para entrenar la RNA (función OR)
La clase cero tiene 1 elementos {(0,0)} y la clase uno tiene 3 elementos {(0,1), (1,0), (1,1)}, diseñar, entrenar y simular la RNA.
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
DISEÑO DE LA RNA
% Se establece la RNA con los valores máximo y mínimo para los puntos>> pr1_ej1 = newp([0,1;0,1],[0,1]);
% Se emplearán 10 épocas para el entrenamiento>> pr1_ej1.trainParam.epochs = 10;
>> P=[0 0 1 1; 0 1 0 1]
P = 0 0 1 1 0 1 0 1
>> T=[0 1 1 1]
T = 0 1 1 1
ENTRENAMIENTO DE LA RNA
>> pr1_ej1 = train(pr1_ej1,P,T);
Entrenamiento de la Red
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
SIMULAR LA RNA>> valores = sim(pr1_ej1,P)
valores =
0 1 1 1
En este caso, se simula la RNA empleando los valores para los pesos y el bias de forma aleatoria (es decir, valores asignados de manera aleatoria por MATLAB).
>> pesos = pr1_ej1.iw{1,1}
pesos =
2 2
>> bias = pr1_ej1.b{1}
bias =
-2
El punto (-1,5) en ¿cuál clase está ubicado?
De acuerdo con la RNA entrenada, el punto (-1,5) es clasificado en la clase 1:
% Se simula la red pr1_ej1 (RNA para la función OR) clasificando el punto (-1,5)>> valores = sim(pr1_ej1,[-1;5])
valores =
1
El punto (4,-10) en ¿cuál clase está ubicado?
De acuerdo con la RNA entrenada, el punto (4,-10) es clasificado en la clase 0:
% Se simula la red pr1_ej1 (RNA para la función OR) clasificando el punto (4,-10)>> valores = sim(pr1_ej1,[4;-10])
valores =
0
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
PARTE II
Usando los siguientes puntos P1=(-2,3), P2=(-3,-7), P3=(-2,-4), P4=(-2,5), P5=(5,0), donde P1 y P5 están en una clase y los otros en otra:
• Graficar los puntos en el plano y encontrar la ecuación de la recta que los separa y graficarla
Puntos en el plano y ecuación de la recta que los separa en 2 clases
Para hallar la ecuación de la recta, se tomaron en cuenta los puntos A(4,0) y B(0,4), por lo tanto, la pendiente tomará valor -1:
m=y− y1x− x1
=4−00−4
=−44
=−1
y la ecuación de la recta queda de la siguiente forma, considerando al punto A(4,0):y− y1=m( x−x1)y−0=(−1)(x−4)y=−x+4
y+x−4=0De la ecuación anterior (y + x – 4 = 0) se sigue que los valores de los pesos y el bias para emplear en el perceptrón son:
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
w1=1 w2=1 b=−4
Quedando el perceptrón de la siguiente manera:
X1
Y
X2
Asignar los puntos según corresponda clase cero o bien clase uno
De acuerdo con los requerimientos, la clasificación queda de la siguiente manera:
Clase UNO(1) = {(2,3), (5,0)}
Clase CERO(0) = {(-3,-7), (2,-4), (-2,5)}
Diseñar, entrenar y simular la RNA en MATLAB
Se muestra a continuación el diseño y entrenamiento de la RNA en MATLAB
% DISEÑO DE LA RNA>> pr1_ej2 = newp([-10 10; -10 10], [0,1]);>> pr1_ej2.trainParam.epochs = 10;>> P=[2 -3 2 -2 5; 3 -7 -4 5 0]
P =
2 -3 2 -2 5 3 -7 -4 5 0
>> T=[1 0 0 0 1]
T =
1 0 0 0 1
% ENTRENAMIENTO DE LA RNA
>> pr1_ej2 = train(pr1_ej2,P,T);
w1=1
w2=1
b=−4
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
Simulando la red (primero se utilizan valores aleatorios para los pesos y el bias)
>> pesos = pr1_ej2.iw{1,1}
pesos =
7 2
>> bias = pr1_ej2.b{1}
bias =
-7
>> valores = sim(pr1_ej2,P)
valores =
1 0 0 0 1
>> Se observa que MATLAB devuelve los valores 7, 2 para W1 y W2 respectivamente y un valor -7 para el bias, esto produce la salida deseada para los puntos empleados (recordando que los valores iniciales para los pesos fueron aleatorios).
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
Empleando los pesos iniciales encontrados a partir de la ecuación de la recta (W1 = W2 = 1, bias = -4), se tiene la siguiente salida:
>> pr1_ej2.iw{1,1} = [1,1];>> pr1_ej2.b{1} = [-4];
>> pr1_ej2 = train(pr1_ej2,P,T);
>> valores = sim(pr1_ej2,P)
valores =
1 0 0 0 1
>> pesos = pr1_ej2.iw{1,1}
pesos =
1 1
>> bias = pr1_ej2.b{1}
bias =
-4
Comparar los pesos obtenidos y los pesos que entrega el entrenamiento de la RNA en MATLAB
De acuerdo con esta salida, se obtuvieron los mismos resultados que se deseaban inicialmente, por lo que, en comparación con los valores para los pesos entregados por MATLAB( 7, 2 ) y el bias = -7, se concluye que los valores para los pesos W1 y W2 de 1 para ambos y el bias = -4 son correctos, obtenidos a partir de la ecuación de la recta x + y – 4 = 0.
Hacer la simulación para encontrar en que clases están los siguientes puntos: (1,-1), (4,4)
Para el punto (1,-1) se obtuvo el siguiente resultado de clasificación:
>> valores = sim(pr1_ej2,[1;-1])
valores =
0
Esto concuerda con la información de la gráfica, por lo tanto, el punto (1,-1) pertenece a la clase CERO
Para el punto (4,4) se obtuvo el siguiente resultado de clasificación:
>> valores = sim(pr1_ej2,[4;4])
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
valores =
1
Esto concuerda con la información de la gráfica, por lo tanto, el punto (4,4) pertenece a la clase UNO
III. DISEÑAR, ENTRENAR Y SIMULAR LA RNA QUE SEPARE LOS SIGUIENTES PUNTOS EN 4 CLASES
(-7,1) y (-1,-2) están en la clase I(-1,4) y (1,0) están en la clase II(1,-5) y (-8,-7) están en la clase III(10,-1) y (2,-2) están en la clase IV
a) Encontrar los pesos de la RNAb) Hacer la simulaciónc) El punto (1,-1) y el punto (0,-2) en ¿qué clase están?d) Diseñar, entrenar y simular la RNA en MATLABe) Comparar los pesos obtenidos y los pesos que entrega el entrenamiento en MATLAB
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
Gráfica con los puntos a clasificar en el plano y las rectas que los separan (2x + y = 0, -6x +11y = -16)
La simulación, diseño y entrenamiento de la red es el siguiente:
>> pr1_ej3 = newp([-10, 10; -10 10], 2);>> pr1_ej3.trainParam.epochs = 15;>> P=[-7 -1 -1 1 1 -8 10 2; 1 -2 4 0 -5 -7 -1 -2]
P =
-7 -1 -1 1 1 -8 10 2 1 -2 4 0 -5 -7 -1 -2
>> T=[0 1 0 1; 1 1 0 0]
T =
0 1 0 1 1 1 0 0
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
>> T=[0 0 1 1 0 0 1 1; 1 1 1 1 0 0 0 0]
T =
0 0 1 1 0 0 1 1 1 1 1 1 0 0 0 0
>> pr1_ej3 = train(pr1_ej3,P,T);>> pr1_ej3.trainParam.epochs = 30;>> pr1_ej3 = train(pr1_ej3,P,T);>> pr1_ej3 = train(pr1_ej3,P,T);>> pesos = pr1_ej3.iw{1,1}
pesos =
6 3 -6 11
>> bias = pr1_ej3.b{1}
bias =
0 16
>> valores = sim(pr1_ej3,P)
valores =
0 0 1 1 0 0 1 1 1 1 1 1 0 0 0 0
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
>> view(pr1_ej3)>> y = pr1_ej3(T); >> plotpv(P,T)>> plotpv(y,T)>> valores = sim(pr1_ej3,[1;-1])
valores =
1 0
>> valores = sim(pr1_ej3,[0;-2])
valores =
0 0
>> plotpv(P,T)>> plotpc(pesos,bias)>> figure;>> plotpv(P,T)>> plotpc(pesos,bias)>> valores = sim(pr1_ej3,[-1;-2])
valores =
0 1
>>
IV. SIMULAR UNA RNA PARA EL RECONOCIMIENTO DE DÍGITOS EN MATLAB
• Diseñar la RNA considerando que las entradas son la representación de los dígitos en un display de siete segmentos y la salida es la representación binaria de los dígitos
• Entrenar y simular la RNA• Simule la RNA para tres aproximaciones que usted proponga
Entradas:
>> P=[1 0 1 1 0 1 1 1 1 1; 1 1 1 1 1 0 0 1 1 1; 1 1 0 1 1 1 1 1 1 1; 1 0 1 1 0 1 1 0 1 0; 1 0 1 0 0 0 1 0 1 0; 1 0 0 0 1 1 1 0 1 1; 0 0 1 1 1 1 1 0 1 1]
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
P =
1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1
Salidas:
>> T = [0 0 0 0 0 0 0 0 1 1; 0 0 0 0 1 1 1 1 0 0; 0 0 1 1 0 0 1 1 0 0; 0 1 0 1 0 1 0 1 0 1]
T =
0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 1 0 1
Empleando el asistente Neural Network Start (nnstart):
El script resultante es el siguiente:
% Solve an Input-Output Fitting problem with a Neural Network
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
% Script generated by NFTOOL% Created Tue Jun 19 07:26:02 CDT 2012%% This script assumes these variables are defined:%% P - input data.% T - target data. inputs = P;targets = T; % Create a Fitting NetworkhiddenLayerSize = 4;net = fitnet(hiddenLayerSize); % Setup Division of Data for Training, Validation, Testingnet.divideParam.trainRatio = 70/100;net.divideParam.valRatio = 15/100;net.divideParam.testRatio = 15/100; % Train the Network[net,tr] = train(net,inputs,targets); % Test the Networkoutputs = net(inputs);errors = gsubtract(targets,outputs);performance = perform(net,targets,outputs) % View the Networkview(net) % Plots% Uncomment these lines to enable various plots.%figure, plotperform(tr)%figure, plottrainstate(tr)%figure, plotfit(net,inputs,targets)%figure, plotregression(targets,outputs)%figure, ploterrhist(errors)
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
Práctica 2
Entrenar una RNA con dos capas, la capa oculta con dos neuronas y la capa de salida para la función XOR
Código empleado en MATLAB:
>> P = [0 1 0 1; 0 1 1 0]; % Función XOR T = [0 0 1 1]
plotpv(P,T,[-1, 2, -1, 2]); % plot data
PR = [min(P(1,:)) max(P(1,:)); min(P(2,:)) max(P(2,:))];
S1 = 2;S2 = 1;
TF1 = 'tansig';TF2 = 'logsig';
PF = 'mse';
net = newff(PR,[S1 S2],{TF1 TF2});
net.trainParam.epochs = 100;net.trainParam.goal = 0.0001;
Materia: Introducción al Reconocimiento de PatronesProfesora: Alba Maribel Sánchez GálvezAlumno: Alejandro Hernández Catrip
REPORTE DE ACTIVIDADES
net = train(net,P,T);a = sim(net,P)
T =
0 0 1 1
Warning: NEWFF used in an obsolete way. > In obs_use at 18 In newff>create_network at 127 In newff at 102 See help for NEWFF to update calls to the new argument list.
a =
0.0000 0.0000 0.9994 0.0000