You are on page 1of 7

1

UNIVERSIDAD DEL VALLE


MAESTRIA EN AUTOMATICA
CONTROL INTELIGENTE
PROFESOR: JESUS ALFONSO LOPEZ S.

GUIA No. 1
IMPLEMENTACION DEL PERCEPTRON CON EL MATLAB

1. OBJETIVOS

1.1 Conocer el algoritmo de entrenamiento del Perceptron y su codificación en MATLAB


1.2 Conocer la manera como se pueden simular redes neuronales con el MATLAB
1.3 Conocer las funciones con las cuales se implementa en el MATLAB las redes tipo Perceptron.

2. PROCEDIMIENTO

2.1 Algoritmo del Perceptron para solucionar el problema de la AND

El Perceptron es una red neuronal que por su simplicidad se puede implementar sin mayor
complicación en un lenguaje de programación como el MATLAB, por ejemplo el siguiente código
implementa un Perceptron para resolver el problema de la función lógica AND
% ANDPER.M
% Programa que implementa un Perceptron que resuelve
% la funcion AND
% Autor:
% Jesús Alfonso López S.
% Versión:
% Septiembre 2001

X=[0 0 1 1;0 1 0 1];


Yd=[0 0 0 1];

W=rand(2,1);
B=rand(1,1);

Neta=W'*X+B*ones(1,4);
Yred=escalon(Neta);
disp('La salida inicial de la red es')
disp(Yred)
N=50;

figure;
plot(X(1,1:3),X(2,1:3),'ob');
axis([-0.2 1.2 -0.2 1.2])
hold on
plot(X(1,4),X(2,4),'or');
m=W(1)/W(2);
b=B/W(2);
x1=-0.2:0.2:1.2;
x2=-m*x1-b;
plot(x1,x2,'k');
hold off;
2

for i=1:N
Neta=W'*X+B*ones(1,4);
Yred=escalon(Neta);

Waux=W'+0.5*(Yd-Yred)*X';
W=Waux';
B=B+0.5*(Yd-Yred)*ones(4,1);
Error=Yd-Yred;

if sum((Error.^2))==0
break;
end;

end;

Neta=W'*X+B*ones(1,4);
Yred=escalon(Neta);
disp('La salida final de la red es')
disp(Yred)
disp('Numero de iteraciones realizadas')
disp(i)
figure;
plot(X(1,1:3),X(2,1:3),'ob');
axis([-0.2 1.2 -0.5 1.2])
hold on
plot(X(1,4),X(2,4),'or');
m=W(1)/W(2);
b=B/W(2);
x1=-0.2:0.2:1.2;
x2=-m*x1-b;
plot(x1,x2,'k');
hold off;
% Fin Perceptron

function out=escalon(in)

% ESCALON:M
% Programa que implementa una función de activación
% tipo escalón, invocada des ANDPER:M
% Autor:
% Jesús Alfonso López S.
% Versión:
% Septiembre 2001

for i=1:4
if in(i)>=0
out(i)=1;
else
out(i)=0;
end;
end;
3

2.2 Perceptron para solucionar el problema de la AND usando el toolbox de redes


neuronales

El Perceptron es una RNA que está en capacidad de realizar separaciones lineales veamos como se
puede realizar un problema de estos con ayuda del toolbox de redes neuronales del MATLAB

Entre las funciones utilizadas por el MATLAB para el Perceptron se tienen :

NEWP - Inicializa el Perceptron.


PLOTPV - Grafica los vectores de entrada cuando la salida es 1/0.
PLOTPC - Grafica la línea de clasificación que genera el Perceptron.
TRAIN - Entrena la red con el algoritmo del Perceptron.
SIM - Simula o prueba la red.

Solución del problema de función lógica AND


La función lógica se define como :

X1 X2 D
0 0 0
0 1 0
1 0 0
1 1 1

Con lo siguientes pasos se puede resolver este problema con el MATLAB :

• Definición del problema


Definir el problema que una red neuronal va a resolver es proporcionarle a la misma la información
necesaria para que puede llevar la tarea con éxito, en otras palabras en este paso se le define a red
neuronal los patrones de aprendizaje que se van a utilizar el proceso de entrenamiento.
En MATLAB esto se hace definiendo dos matrices una para las entradas y otra para las salidas
donde cada patrón de aprendizaje se define por columnas, los comandos necesarios para lo
anterior son:

>> % Definición de la función lógica AND


>> X=[0 0 1 1 ;
0101];
>> D=[0 0 0 1] ;

Para ver la gráfica de estos patrones se usa el comando plotpv

>> plotpv(X,D)

La gráfica resultante es la siguiente :


4
Vectors to be Classified
1.5

P(2)
0.5

-0.5
-0.5 0 P(1) 0.5 1 1.5

Figura No. 1 Patrones a clasificar

Como se puede observar MATLAB gráfica los puntos dados en el vector X y le asigna un símbolo
para la clasificación dependiendo de la salida deseada, en esta caso:
Para salida deseada cero (0) = o
Para salida deseada uno (1) = +

• Inicialización de la red neuronal


Ya teniendo los patrones de entrenamiento que definen el problema a resolver, se procede a
inicializar la red neuronal, para el caso del Perceptron se usa la función initp de la siguiente
manera:

>> red = newp([0 1;0 1],1)


Donde:
red = objeto donde se va almacenar la red creada por el MATLAB
[0 1;0 1] = Rango del valor de la entrada de la red neuronal, el número de filas de esta matriz lo
utilizará MATLAB para definir el número de entradas que tiene la red neuronal.
1 = Número de neuronas que tiene la red neuronal en la capa de salida
X = Entrada de los patrones de aprendizaje

Ahora se procederá a generar unos pesos iniciales a la red, este paso no es necesario hacerlo pero
permite generar un perceptron con un superficie de separación conocida
>> red.iw{1,1}=[1 1];
>> red.b{1}=0.5;
>> Pesos=red.iw{1,1};
>> Bias=red.b{1};

Con el siguiente comando se grafica la línea de separación que tiene el Perceptron


>>plotpc(Pesos,Bias)

El comando anterior adiciona la recta clasificadora al gráfico generado por plotpv, la gráfica
quedaría así:
5
Vectors to be Classified
1.5

P(2
) 0.5

-0.5
-0.5 0 0.5 1 1.5
P(1)

Figura No. 2 Patrones a clasificar y la recta clasificadora inicial

• Entrenamiento de la red
El entrenamiento de la red se realiza con el comando train el cual implementa un entrenamiento
con la regla de aprendizaje tipo Perceptron, en MATLAB el entrenamiento se hace así:

>> red = train(red,X,D)


Donde
red = red a ser entrenada por el MATLAB.
X = Entrada de los patrones de aprendizaje.
D = Salida deseada de los patrones de aprendizaje.

Al entrenar MATLAB nos grafica la manera como va evolucionando error al transcurrir las
iteraciones
0
Performance is 0, Goal is 0
10

Tr
ain
ing
-
Blu
e

-1
10
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
5 Epochs

Figura No. 3 Evolución del error durante el entrenamiento de la red

Cuando se ha entrenado la red, se puede visualizar en la gráfica donde se muestra la línea


clasificadora que la red ha llevado a cabo la tarea.
>> figure;
>> Pesos=red.iw{1,1};
>> Bias=red.b{1};
>> plotpv(X,D)
>>plotpc(Pesos,Bias)
6
Vectors to be Classified
1.5

P(2
) 0.5

-0.5
-0.5 0 0.5 1 1.5
P(1)

Figura No. 4 Patrones a clasificar y la recta clasificadora final

• Validación de la red
Luego de tener una red entrenada se procede a validar si el comportamiento de la misma es
correcto o no, para esto se usa el comando sim como se muestra a continuación:

>> in_prueba=[0;0]; % Patrón de prueba


>> % Prueba de la red ante el patrón de prueba, W,b son los pesos y el boas de la red entrenada
>> a = sim(red, in_prueba)

a=

>> % Otro patón de prueba


>> in_prueba=[1;1]; % Patrón de prueba
>> a = sim(red, in_prueba)

a=

Como se puede observar el comportamiento de la red es el adecuado por lo que se da por


finalizado el entrenamiento.
7

3. EJERCICIOS

1. Realice la siguiente clasificación usando un Perceptron y con ayuda del toolbox de redes
neuronales del MATLAB
X1 X2 D
-0.5 -1.0 0
1.0 1.0 1
1.0 0.5 1
-1.0 -0.5 0
-1.0 -1.0 0
0.5 1.0 1

2. Diseñe y entrene usando el toolbox de redes neuronales del MATLAB un Perceptron que
pueda identificar los números del 0 al 9 donde cada número se puede definir en una matriz de
5*3, por ejemplo el número 2 sería :
1 1 1
0 0 1
1 1 1
1 0 0
1 1 1

3. Trate de resolver el problema de la XOR con un Perceptron, a que conclusión llega?

4. Modifique el programa del Perceptron presentado de tal forma que permita trabajar un
Perceptron de N neuronas en la capa de entrada y de M neuronas en la capa de salida, pruebe
el Perceptron codificado con el ejercicio descrito en el punto 2.

You might also like