Anda di halaman 1dari 7

CONTROL INTELIGENTE Laboratorio N2 IMPLEMENTACIN PERCEPTRN CON MATLAB Ramn Arturo Escudero Atehorta Fecha: Octubre 6 de 2009 John

Jairo Arcila Gmez Jorge Mario Gmez Zapata Profesor: Juan Pablo Rivera.

Objetivos
Conocer el algoritmo de entrenamiento del Perceptrn y su codificacin en MATLAB Conocer la manera como se pueden simular redes neuronales con el MATLAB Conocer las funciones con las cuales se implementa en el MATLAB las redes tipo Perceptrn.

INTRODUCCIN
El hombre no slo se ha demostrado deseoso de aprender, sino que con frecuencia su curiosidad lo ha impulsado a averiguar cmo se aprende. Desde tiempos muy antiguos hasta la actualidad, con estructuras lgicas y algoritmos matemticos, han descubierto temas de suma importancia como lo son las redes neuronales artificiales, un claro ejemplo es el estudio del perceptrn como red neuronal con funcin de activacin hardlim o hardlims que sirve para solucionar problemas linealmente separables. Pues la importancia del MATLAB como software para la solucin de problemas relacionados con el perceptrn, es un paso muy grande para enfrentar nuevos retos reales en la vida profesional.

PROCEDIMIENTO

1. CLASIFICACION USANDO UN PERCEPTRON Y CON AYUDA DEL TOOLBOX DE REDES NEURONALES


X1 -0.5 1.0 1.0 -1.0 -1.0 0.5 X2 -1.0 1.0 0.5 -0.5 -1.0 1.0 D 0 1 1 0 0 1

x=[-0.5 1 1 -1 -1 0.5;-1 1 0.5 -0.5 -1 1]; d=[0 1 1 0 0 1]; plotpv(x,d)

Una vez se proyectan los puntos sobre un plano XY, podemos observar que el problema es linealmente separable y puede usarse el perceptrn. Se procede entonces a implementar el cdigo en MATLAB que permite entrenar la red que solucione este problema.

red=newp([-1 1;-1 1],1)%para hardlims se especifica red=newp([0 1;0 1],1,'hardlims) red.iw{1,1}=[1 1]; %Carga a la red el vector de pesos inicial red.b{1}=2.5; %Carga a la red el vector de bias pesos=red.iw{1,1}; %Llevar a la vble pesos el vector de pesos inicial bias=red.b{1}; %Llevar a la vble pesos el vector de bias plotpc(pesos,bias) %Grafica lnea de separacin que tiene el perceptron

red=train(red,x,d)

%grafica la evolucion del error

Esta grafica indica al programador que el entrenamiento de la red ha sido terminado con xito entregando un error 0 (cero), es decir, que la salida siempre ser la deseada de acuerdo a los patrones de entrada; adems indica que la red fue entrenada en dos epochs o ciclos de entrenamiento.

figure; pesos=red.iw{1,1}; bias=red.b{1}; plotpv(x,d) plotpc(pesos,bias) %grafica de lnea clasificadora

Una vez realizado este procedimiento se realizan pruebas que comprueben que la red ha sido correctamente entrenada.
in_prueba=[-1;-1]%patron de prueba a=sim(red,in_prueba) in_prueba = -1 -1 a = 0 a = 1 in_prueba=[1;0.5]%patron de prueba a=sim(red,in_prueba) in_prueba = 1.0 0.5

2. Disee y entrene usando el toolbox de redes neuronales del MATLAB un Perceptron que pueda identificar los nmeros del 0 al 9 donde cada nmero se puede definir en una matriz de 5*3, por ejemplo el nmero 2 sera : 111 001 111 100 111
x=[1 0 1 1 1 1 1 1 1 1;1 0 1 1 0 1 1 1 1 1;1 1 1 1 1 1 1 1 1 1;1 0 0 0 1 1 1 0 1 1;0 0 0 0 0 0 0 0 0 0;1 1 1 1 1 0 0 1 1 1;1 0 1 1 1 1 1 0 1 1;0 0 1 1 1 1 1 1 1 1;1 1 1 1 1 1 1 1 1 1;1 0 1 0 0 0 1 0 1 0;0 0 0 0 0 0 0 0 0 0;1 1 0 1 1 1 1 1 1 1;1 0 1 1 0 1 1 0 1 0;1 0 1 1 0 1 1 0 1 0;1 1 1 1 1 1 1 1 1 1]; d=[0 0 0 0 0 0 0 0 0 1;0 0 0 0 0 0 0 0 1 0;0 0 0 0 0 0 0 1 0 0;0 0 0 0 0 0 1 0 0 0;0 0 0 0 0 1 0 0 0 0;0 0 0 0 1 0 0 0 0 0;0 0 0 1 0 0 0 0 0 0;0 0 1 0 0 0 0 0 0 0;0 1 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0];

red=newp([0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1],10);%para hardlims se especifica red=newp([0 1;0 1],1,'hardlims) red=train(red,x,d);% Entrenamiento de la red

%validacion de la red (patron de prueba el # 9) v=[1 1 1 1 0 1 1 1 1 0 0 1 0 0 1];% Vector de prueba tipo fila prueba=v';% Vector de prueba convertido a tipo Columna a=sim(red,prueba);% Valor que toma la salida deseada b=a %b= en este caso para esta entrada 'a' debe quedar igual a 9 % % b =9 1 0 0 0 0 0 0 0 0 0 % % % b=8 0 1 0 0 0 0 0 0 0 0. % % Etc.. % cdigo de comparacin de los numeros segun la neurona activada. De binario a decimal if a== [0;0;0;0;0;0;0;0;0;0]%numero 0 salida=0 elseif a== [0;0;0;0;0;0;0;0;1;0]%numero 1 salida=1 elseif a== [0;0;0;0;0;0;0;1;0;0]%numero 2 salida=2 elseif a== [0;0;0;0;0;0;1;0;0;0]%numero 3 salida=3 elseif a== [0;0;0;0;0;1;0;0;0;0]%numero 4 salida=4 elseif a== [0;0;0;0;1;0;0;0;0;0]%numero 5 salida=5 elseif a== [0;0;0;1;0;0;0;0;0;0]%numero 6 salida=6 elseif a== [0;0;1;0;0;0;0;0;0;0]%numero 7 salida=7 elseif a== [0;1;0;0;0;0;0;0;0;0]%numero 8 salida=8 elseif a== [1;0;0;0;0;0;0;0;0;0]%numero 9 salida=9 else end b=1000000000 salida = 9

3. TRATE DE RESOLVER EL PROBLEMA DE LA XOR CON UN PERCEPTRON, A QUE CONCLUSIN LLEGA?


Se llega a la conclusin de que el caso de la compuerta XOR, el cual se visualiza en la figura 2.1.14

Se pretende que para los valores de entrada 0,0 y 1,1 se devuelva la clase 0 y para los patrones 0,1 y 1,0 la clase 1. Como puede verse de la figura 2.1.15 el problema radica en que no existe ninguna lnea recta que separe los patrones de una clase de los de la otra. Los cuatro puntos en la figura son las posibles entradas de la red; la lnea divide el plano en dos regiones, por lo que se podra clasificar los puntos de una regin como pertenecientes a la clase que posee salida 1 y los de la otra regin como pertenecientes a la clase que posee salida 0, sin embargo no hay ninguna forma de posicionar la lnea para que los puntos correctos para cada clase se encuentren en la misma regin; por lo tanto no son separables linealmente y no es posible la separacin linealmente.

4. ANALICE YDESCRIBA EL PROGRAMA DEL PERCEPTRON PRESENTADO


X=[0 0 1 1;0 1 0 1];%PATRONES DE ENTRADA Yd=[0 0 0 1]; %SALIDA DESEADA W=rand(2,1); %VECTOR DE PESOS ALEATORIOS B=rand(1,1); %UMBRAL ALEATORIO Neta=W'*X+B*ones(1,4);% SUMA PONDERADA Yred=escalon(Neta); % SALIDA DEPENDIENDO DE LA SUMA PONDERADA disp('La salida inicial de la red es') %IMPRIME disp(Yred) %MUESTRA EL VALOR DE LA SALIDA INICIAL N=50; % DEFINE EL MAXIMO NUMERO DE ITERACIONES figure; plot(X(1,1:3),X(2,1:3),'Ob');% GRAFICA DE LA SALIDA CON OBALOS AZULES axis([-0.2 1.2 -0.2 1.2]) % LIMITES DE LOS EJES DE GRAFICACIN hold on ; %SOSTIENE LA GRAFICA PARA HACER SOBREPOSICIN plot(X(1,4),X(2,4),'or'); % GRAFICA CON OBALOS ROJOS m=W(1)/W(2); % DIVIDE W EN LA POSICIN 1 CON W EN LA POSICIN 2 PARA % OBTENER LINEA DE PENDIENTE b=B/W(2); % INTERCEPTO CON LOS EJDESPLAZAMIENTO RESPECTO AL ORIGEN

x1=-0.2:0.2:1.2; % OBTENGO EL INTERCEPTO CON EJE X1 x2=-m*x1-b; % OBTENGO EL INTERCEPTO CON EJE X2 plot(x1,x2,'k'); % GRAFICA LINEA DE SEPARACIN hold off; % QUITA LA SUPERPOSICIN DE LA GRAFICA for i=1:N % CICLO FOR QUE VA DESDE 1 HASTA N=50 PARA LAS ITERACIONES Neta=W'*X+B*ones(1,4); % SUMA PONDERADA DE LAS ENTRADAS POR LOS PESOS Yred=escalon(Neta); % SALIDA DESPUES DE LA FUNCIN DE ACTIVACIN Waux=W'+0.5*(Yd-Yred)*X'; % ACTUALIZACION VECTOR DE PESOS AUX POR FORMULA W=Waux'; % ACTUALIZACION DE VECTOR DE PESOS B=B+0.5*(Yd-Yred)*ones(4,1); % ACTUALIZACION DE LAS BIAS Error=Yd-Yred; % DETERMINAR EL ERROR DE ENTRENAMIENTO if sum((Error.^2))==0 % SI EL ERROR OBTENIDO AL CUADRADO ES IGUAL A CERO break; % SALE DEL ENTRENAMIENTO DE LA RED. end; % FIN IF end; % FIN END Neta=W'*X+B*ones(1,4); % SUMA PONDERADA CON VECTOR DE PESOS ENTRENADO Yred=escalon(Neta); % SALIDA DEPENDIENDO DE LA SUMA PONDERADA disp('La salida final de la red es') disp(Yred) % SE MUESTRA EN EL COMAND WINDOW LA SALIDA FINAL DE LA RED disp('Numero de iteraciones realizadas') disp(i) % SE MUESTRA EN EL COMAND WINDOW EL NMERO DE ITERACIONES % USADAS PARA EL ENTRENAMIENTO DE LA RED figure; plot(X(1,1:3),X(2,1:3),'ob'); % GRAFICA DE LA RED YA ENTRENADA axis([-0.2 1.2 -0.5 1.2]) %RANGO DE LOS EJES DE LA GRAFICA hold on %GRAFICA SOBREPUESTA plot(X(1,4),X(2,4),'or'); %GRAFICA DE LOS m=W(1)/W(2);% PENDIENTE, DIVISIN DE W EN LA POSICIN 1 CON W EN LA 2 b=B/W(2); % INTERCEPTO CON LOS EJDESPLAZAMIENTO RESPECTO AL ORIGEN x1=-0.2:0.2:1.2; % OBTENGO EL INTERCEPTO CON EJE X1 x2=-m*x1-b; % OBTENGO EL INTERCEPTO CON EJE X2 plot(x1,x2,'k'); % SE IMPRIME FINALMENTE LA RED ENTRENADA, MOSTRANDO % GRAFICAMENTE SU LINEA DE SEPARCIN function out=escalon(in) % ESCALON.M % Programa que implementa una funcin de activacin % tipo escaln, invocada desde cuatro.m for i=1:4 if in(i)>=0 out(i)=1; else out(i)=0; end; end;

CONCLUSIONES

Adquirimos el conocimiento para la codificacin en MATLAB de un perceptrn y comprender sus caractersticas como las funciones de activacin hardlim y hardlims. Conocimos por medio del toolbox de redes neuronales del MATLAB la forma de simular un perceptrn. Aprendimos las funciones para la implementacin de una red tipo perceptrn en MATLAB como lo fueron newp, plotpv, plotpc, train y sim. Aplicamos ejemplos tiles para la vida prctica como lo fue el reconocimiento de nmeros el cual se puede aplicar a casos reales como parqueaderos, reconocimiento de cdigos de barras, entre otros.

Anda mungkin juga menyukai