Está en la página 1de 9

  PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR 

FACULTAD DE INGENIERÍA 

 
  Apuntes de Inteligencia 
 
Artificial
 
 
 
  Laboratorio:             
Perceptrón Simple 

JORGE AGUILAR JARAMILLO 
 

LABORATORIO 1: NEURONA Y PERCEPTRON SIMPPLE 

Objetivos. 

 
‰ Breve  revisión de la herramienta Matlab 
‰ Reforzar  el  conocimiento  adquirido  sobre  la  neurona  artificial  y  el  perceptrón  de 
Rosemblatt                        
‰ Implementar el algoritmo visto en clase del perceptrón, pero para neuronas lineales , que 
acepten cualquier valor 
‰ Revisar las funciones que implementa Matlab para este caso: 
o newp y sim 

3.1  LA NEURONA. 

1. Revise los dos demos que trae Matlab1 sobre la neurona y observe como el valor de los 
pesos influye en la pendiente,  y el  valor de b en su ubicación en el eje de las y. 
2. Pruebe las diferentes funciones  
3. Observe en el segundo demo como varía la salida de la neurona en función de los valores 
de pesos W  y b. 

3.2  EL  PERCEPTRON 

El perceptrón es una neurona con una función de transferencia escalón  y un mecanismo de ajuste 
de pesos (aprendizaje) que compara la salida real, yd con la respuesta de salida  de la red, y,  para 
cualquier entrada o estímulo dado.  
‰ Los Perceptrones son bien definidos para reconocimiento/clasificación de patrones  
‰ El mecanismo de ajuste de pesos se llama regla de aprendizaje del perceptrón. 

                                                            
1
Para ir a los demos, una vez abierto Matlab, en la ventana de comandos, escriba demo. Se
abrirá una nueva ventana en la que debe ir al Neural Network que se encuentra en el
toolbox. Aquí encontrará los demos de la neurona (neurons) y del perceptron.

51  Jorge Aguilar J. 

 
 
Ilustración 1.‐  Esquema de un perceptrón simple (matlab, 2006) 

Matlab trae 6 demos para este tipo de 
redes: 

 
1. Fronteras de decisión (Decision 
Boundaries) 
2. Perceptrón learning rule 
3. Classification with a 2‐input 
perceptrón 
4. Outlier input vectors 
5. Normalized perceptrón rule 
6. Linearly non‐separable vector 

En  el  primer  ejemplo,  (Decision 


Boundaries), se observa como la definición del vector de pesos y el valor de b (umbral) define la 
frontera de separación entre las dos clases.  

En el segundo ejemplo, se aplica la regla del perceptrón, en el que se tiene las opciones de aplicar 
o no un bias (umbral): 
‰ La opción learn aplica la regla a un solo ejemplo.  

52  Jorge Aguilar J. 

 
‰ La opción Train aplica el algoritmo hasta 5 datos, por esta razón normalmente se necesita 
correr más de una vez esta opción para encontrar una solución. 

Los demos del 3 al 6, muestran el aprendizaje de esta red para algunos casos particulares 

3.3   EJEMPLO DE CLASIFICACIÓN  

Consideremos un ejemplo de clasificación de 2 clases: 

Consideremos los 5 ejemplos  de la figura: 
1

0.8
 x1    x2    yd  (clase) 
0.6

0.4  0.6  0.2  1    (azul) 


0.2

0
‐0.2  0.9  1    (azul) 
-0.2
‐0.3  0.4  0    (rojo) 
-0.4

-0.6 0.1  0.1  0    (rojo) 


-0.8
-0.4 -0.2 0 0.2 0.4 0.6 0.8
0.5  ‐0.6  0    (rojo) 

Resolvamos este problema en Matlab, aplicando un algoritmo como el revisado en clase, para 
luego resolverlo con las funciones que implementa Matlab para el perceptrón. 

% Ejemplo de entrenamiento del PS.


% Declaramos el vector de entrada P (tomando la convención de
Matlab)
% y el vector de salida T e inicializamos los pesos, W y el bias
(b)

P=[0.6 -0.2 -0.3 0.1 0.5; 0.2 0.9 0.4 0.1 -0.6];
T=[1 1 0 0 0];
W=[-2 2];
b=-1;
% Graficamos estos datos de entrada y clase (0 y 1) juntamente con
la frontera de separación: los valores iniciales.
plotpv(P,T); % función para graficar los datos

53  Jorge Aguilar J. 

 
plotpc(W,b); % función para graficar la recta

% Definimos un contador para el número de épocas que se refiere al


% conjunto de todos los datos
nepoc=0

% calculamos la salida del perceptrón, para estos datos.


Y=hardlim(W*P+b);
% Introducimos un lazo que ajuste los pesos mientas no se
% cumpla la condición de tener la salida del sistema igual a la
salida
% deseada.
while any(Y~=T)
Y=hardlim(W*P+b); % Salida de la red
E=T-Y; % Error
[dW,db]= learnp(P,E); % Aprendizaje
W=W+dW; % Modificación de pesos
b=b+db; % Modificación del valor de b
nepoc=nepoc+1;
disp('epochs='),disp(nepoc),
disp(W), disp(b);
plotpv(P,T);
plotpc(W,b);
pause(1);
end

Copie este código en un archivo .m en Matlab (ejemplo, lab01.m) en alguna carpeta definida (por 
ejemplo (C:\Matlab701\Work\LabIA\) 

Defina esta carpeta en el ambiente de Matlab: 
1. Vaya el menú File en Matlab a la opción Set Path;  
2. En la nueva ventana que se despliega haga clic en Add Folder y vaya a la carpeta en la que 
grabó los archivos. 
3. Selecciónela y haga clic en Aceptar 
4. La nueva carpeta le aparecerá  en la ventana Matlab search path 

54  Jorge Aguilar J. 

 
5. Ejecute los botones de control Save y Close 

Ahora si puede ejecutar el programa, tecleando su nombre del archivo en el Command Window 
de Matlab 

Vectors to be Classified Vectors to be Classified


1.5 1.5

1
1

0.5
0.5
P(2)

P(2)
0
0

-0.5
-0.5

-1
-1
-0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
P(1)
  -0.6 -0.4 -0.2 0 0.2
P(1)
0.4 0.6 0.8 1

Los pesos definidos no son una solución al  Luego de 11 iteraciones la red ha encontrado 
problema  una solución a este problema 

RESOLUCIÓN DEL MISMO EJEMPLO DE CLASIFICACIÓN USANDO LAS FUNCIONES DE 
MATLAB: NEWP 

Matlab usa la función newp para crear una red perceptrón. Esta función tiene cuatro parámetros 
de entrada y el resultado (salida de la función) es la red perceptrón. 

red = newp(pr,s,tf,lf) 

  

   Donde:  
‰ pr – matriz de los valores máximos y mínimos de los datos de entrada  (Nx2), donde N es 
el número de variables de entrada 
‰ s   ‐   Número de neuronas. 
‰ tf  –  función de transferencia, por defecto = 'hardlim'. 

55  Jorge Aguilar J. 

 
‰ lf  –  función de aprendizaje, por defecto = 'learnp'. 
‰ red   la red perceptrón 

Por lo que, el mismo ejemplo que acabamos de  ver, usando la funcion que trae Matlab para 
definir la red perceptrón se tiene: 

% Declaramos el vector de entrada P y El vector de salida T.


P=[0.6 ‐0.2 ‐0.3 0.1 0.5; 0.2 0.9 0.4 0.1 ‐0.6]; 
T=[1 1 0 0 0]; 
% Graficamos

plotpv(P,T);

% Creamos el objeto red y le asignamos a la variable net:

net = newp([-0.3 0.6; -0.6 0.9],1);

% definimos el número de pases a 11 (como en el caso anterior)


entrenamos la red y graficamos los resultados
net.adaptParam.passes = 11; 
net = adapt(net,P,T); 
plotpc(net.IW{1},net.b{1}); 
Normalmente se entrena una red para que una vez que aprende, esta sirva para ejemplos nuevos, 
de los cuales no conocemos la salida y queremos conocer la salida de la red.  

Matlab trae otra función para clasificar ejemplos nuevos con los que no ha sido entrenada la red: 
la función sim. Es decir sim da la salida de la red, el y,  dándole los datos de entrada y obviamente 
el objeto net, definido anteriormente: 
y = sim(net,p);

Veamos la aplicación de esta función. Si definimos un dato de entrada, la red debe clasificarlo 
correctamente. Consideremos el ejemplo.  

p = [‐0.56; 0.1]; 
% calculamos la salida de la red.
y = sim(net,p); 
plotpv(p,y); 
point = findobj(gca,'type','line'); 
set(point,'Color','red'); 

56  Jorge Aguilar J. 

 
hold on; 
plotpv(P,T); 
plotpc(net.IW{1},net.b{1}); 
hold off; 
Como se observa en la figura la red clasifica en forma  correcta el nuevo dato (graficado de color 
rojo).  

Vectors to be Classified
1.5

0.5
P(2)

-0.5

-1

-0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1


P(1)
 

PREGUNTAS A RESOLVER. 

 
‰ Pruebe dos clases que no sean linealmente separables. ¿Qué se observa? ¿Por qué ocurre 
esto?  
‰ Resuelve el caso de dos clases en las que se tenga los datos separados, como se muestra 
en la figura. ¿Existe alguna diferencia en el entrenamiento con  los ejemplos vistos. Cuál 
es?   

57  Jorge Aguilar J. 

 
2

1.5

0.5

-0.5

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
 

58  Jorge Aguilar J. 

También podría gustarte