13
INFORME APLICACIÓN REDES NEURONALES RECONOCEDOR SIMPLE DE CARACTERES INTELIGENCIA COMPUTACIONAL MODULO: REDES NEURONALES ARTIFICIALES PROF: JOSE EDISON AEDO JONNY ALEXANDER URIBE 98702450 DOCTORADO INGENIERÍA ELECTRÓNICA UNIVERSIDAD DE ANTIOQUIA OCTUBRE DE 2013

InformeAplicaciónRedesN_1

  • Upload
    sirjoy

  • View
    17

  • Download
    1

Embed Size (px)

Citation preview

INFORME APLICACIÓN REDES NEURONALES

RECONOCEDOR SIMPLE DE CARACTERES

INTELIGENCIA COMPUTACIONALMODULO: REDES NEURONALES ARTIFICIALES

PROF: JOSE EDISON AEDO

JONNY ALEXANDER URIBE98702450

DOCTORADO INGENIERÍA ELECTRÓNICAUNIVERSIDAD DE ANTIOQUIA

OCTUBRE DE 2013

OBJETIVO

En el marco del módulo de Redes neuronales para el curso de InteligenciaComputacional, se construye la aplicación aquí descrita que utiliza algunos delos conceptos aprendidos.

La tarea concreta abordada fué la creación de un reconocedor de caracteressimple para los símbolos A y E1. La representación de los símbolos fuematricial con 35 puntos organizados en 7 filas y 5 columnas. El valor de cadapunto es bipolar, representado el color negro por -1 y el color blanco por 1. Unejemplo de esta representación se muestra en la siguiente gráfica, dondeaparece un carácter E usando valores bipolares:

1 1 1 1 11 -1 -1 -1 11 -1 1 1 11 -1 -1 -1 11 -1 1 1 11 -1 -1 -1 11 1 1 1 1

Usando el mapeo a los colores negro y blanco la matriz quedaría:

Donde se usa la correspondencia –1 = negro y 1 = blanco.

Para lograr la identificación de los caracteres se utilizó una red feedforward dedos capas. La entrada recibe los valores de la matriz en un vector bipolar de 35posiciones, la capa de salida la conforman 3 unidades, una de ellas paraidentificar la A, otra para identificar la E y la última para identificar símbolos queno son A ni tampoco E. El número de neuronas de la capa oculta fue uno de losparámetros que buscamos, con el fín de optimizar el desempeño del sistema.

ARCHIVOS EN EL ENTREGABLE

En la carpeta enviada se encuentran los siguientes componentes:

• Pru4.m: Código principal del programa encargado de gestionar todo elsistema

• Pru4.fig: Archivo para la interfaz principal del programa en Matlab

1 Este trabajo utilizó como punto de partida un reconocedor simple que hice en pregrado donde utilicécomo red un sólo perceptrón y obtuve resultados muy limitados. Todo el software fué reconstruidomejorando la interfaz, la estrategia de aprendizaje, la base de datos y la estructura de la red

• NewLetter.m: Código para gestionar el anexado de un nuevo caracter• NewLetter.fig: Interfaz para adicionar un nuevo caracter• alterna.m: Para intercambiar el fondo de los botones en la interfaz

principal• DataAE.m: Script para cargar los datos de la base de datos y tranformar

las imágenes en vectores de entrada para la red neuronal• trainingNet_1.m: Script para realizar el entrenamiento y prueba de la

red• redAE1.mat: Datos de la última red entrenada• BaseDatosA: Carpeta con caracteres As• BaseDatosE: Carpeta con caracteres Es• BaseDatosNAE: Carpeta con símbolos que no son ni As ni Es

Todo el código fue realizado en Matlab y probado en la versión 2013a

CREACIÓN DE LAS BASES DE DATOS

Tener una matriz de 7 x 5 implica 35 entradas para cada neurona en la capa deentrada. Por convención el dato en la esquina superior izquierda es la entradax1, la entrada x35 será el dato en la esquina inferior derecha. Leímos los datospor filas.La creación de los datos para el entrenamiento fué vital para el buenfuncionamiento del reconocedor. Sabíamos que entre mas entradaspudiéramos utilizar para el entrenamiento mejor sería el desempeño final. Noobstante abordar la especificación de los vectores bipolars (–1 y 1) de maneramanual, esto es, haciendo vectores de 1 x 35 dato a dato, se presentaba comouna tarea supremamente demandante de tiempo. Por ello, para facilitar laespecificación de los datos de entrenamiento, se creó una interfaz grafica quefacilitaba la inclusión de las muestras. La interfaz permitió la población rápidade la bases de datos donde cada carácter fué almacenado en forma de archivode imágen bmp.

La base de datos está compuesta por tres carpetas llamadas BaseDatosA,BaseDatosE y BaseDatosNAE. En el interior de cada una existe un conjunto dearchivos bmp binarios que especifican caracteres válidos para las diferentesclases asi:

BaseDatosA: Conjunto con imágenes de A validas. Cada archivo nombradoAi.bmp.BaseDatosE: Conjunto con imágenes de E validas. Cada archivo nombradoEi.bmp.BaseDatosNAE: Conjunto con imágenes de símbolos que no representan niAs ni Es, son los ejemplos negativos del sistema. Cada archivo nombradoNi.bmp.

i es el identificador numérico de la muestra, un consecutivo.

La población de las bases de datos se hizo por medio de la interfaz gráficadescrita en el siguiente apartado.

INTERFAZ GRAFICA

Presentamos a continuación el aspecto de la interfaz

A lo largo del informe explicaremos cada uno de los atributos y comandos delsistema.

MATRIZ DE PUNTOS

El panel central posee 35 cuadros que definen el área donde el carácter sedibuja. Cada cuadro tiene la propiedad de ser sensible al click de tal forma quecambia su estado de negro a blanco alternativamente.

Las neuronas aprenden por monitoreo, es decir, se requiere que alguien lesdiga como debe ser su respuesta. En este sentido el sistema es supervisado.Luego al utilizar el algoritmo de aprendizaje se logra una amplia generalización.

En la zona central aparecen 35 botones que se usan para dibujar el carácter.Existen dos métodos de dibujo:

• Método dibujo 1: Al hacer click en cada botón se intercambia su estado(manifestandose en el intercambio de fondo entre blanco y negro).

• Método dibujo 2: Adicional al método de click en cada botón, puedeactivarse la función de Hover haciendo click en cualquier zona gris de lainterfaz. El Hover permite que los botones intercambien su estadosimplemente pasando el puntero sobre ellos. Esto puede serconveniente si quiere dibujarse rapidamente el carácter. El Hover sedesactiva haciendo click en cualquier zona gris de nuevo.

El método de dibujo activo se muestra con la etiqueta verde arriba a la derechapudiendo ser sólo click ó clicks + Hover

La gráfica siguiente muestra un ejemplo en el que se ha dibujado una E:

Si se desea almacenar este patrón en la base de datos puede presionarse elbotón Anexar, lo cual hará surgir un cuadro de dialogo como el siguiente:

En nuestro ejemplo presionaríamos Es una E, lo que tendrá comoconsecuencia la creación de un archivo bitmap binario como el siguiente:

En este caso la E guardada es la cuarta y recibe entonces el nombre E4.bmp.El código creado se asegura de nombrar de forma consecutiva las imágenes.Repitiendo el proceso descrito poblamos la base de datos para los caracteresA, E y aquellos símbolos que no erán ni A ni E. Nos esforzamos en realizar

variaciones a los caracteres para que existiera alta diversidad en las muestras.Algunos de los caracteres obtenidos se muestran en la siguiente figura:

Al realizar este informe el número de muestras en la base de datos era:

As: 75Es: 66otros: 176

ENTRENAMIENTO Y PRUEBA

El entrenamiento de la red se realiza desde la interfaz presionando el botónEntrenar. Esto hará que se carguen todas las muestras disponibles en esemomento (usando DataAE.m) y se haga un llamado al script trainingNet_1.m,quien contiene las líneas para creación, entrenamiento y prueba de la redneuronal.

Se adjuntan aquí algunas partes del código documentado para referencia:*******************************************************************************************% Función para la creación, entrenamiento y almacenamiento de la red% neuronalfunction trainingNet_1(P, T)% P - datos de entrada.% T - datos objetivo -> indican a que clase pertenecen los datos de entrada. inputs = P;targets = T; hiddenLayerSize = 8; %Neuronas en la capa oculta% Se crea la red feedforward if exist('net', 'var') clear(net); endnet = patternnet(hiddenLayerSize); % División de los datos para entrenamiento, validación y pruebanet.divideParam.trainRatio = 70/100;net.divideParam.valRatio = 15/100;net.divideParam.testRatio = 15/100; % Entrenamiento de la red[net,tr] = train(net,inputs,targets); % Prueba de la redoutputs = net(inputs);errors = gsubtract(targets,outputs);performance = perform(net,targets,outputs); % Visualización de la redview(net) % Gráficasf1 = figure; plotperform(tr); % convergenciaf2 = figure; plotconfusion(targets,outputs); % matriz de confusiónf3 = figure; plotroc(targets,outputs); % curvas ROC

% Se salva la red para uso posterior (a travez la GUI por ejemplo)save 'redAE1' netdisplay('Presione una tecla para continuar (se cerrarán figuras)...');pausenntraintool('close')if exist('f1','var') close(f1); end;if exist('f2','var') close(f2); end;if exist('f3','var') close(f3); end;

Después de múltiples pruebas encontramos que la utilización de 8 neuronas enla capa oculta ofrecía el mejor desempeño de la red. La línea de código:

net = patternnet(hiddenLayerSize);

es la encargada de crear la red. El entrenamiento se logra con la línea:

[net,tr] = train(net,inputs,targets);

Utilizamos una estrategia de división de muestras donde el 70% se usabanpara el entrenamiento, el 15% para la verificación y un 15% para el test final.

Resultados de un entrenamiento típico se discuten a continuación. Recordemosque la red es una feedforward con 35 entradas, una capa de salida de 3neuronas y 1 capa oculta con 8 neuronas en ella. Una representación de la redaparece en la siguiente figura:

Una matriz de confusión típica aparece en la siguiente figura. En ella seobserva (primera columna) que la clase A obtuvo el 96% de identificacióncorrecta, siendo el error del 4% producto de la mala identificación de doscaracteres que fueron asignados a la clase NAE (no es A, no es E).

Por su parte (columna 2) la clase E tuvo una correcta identificación del 95.5%,donde el 4.5% de error se debió a la identificación de 3 caracteres como si nofueran ni A ni E. La clase NAE obtuvo un éxito de identificación del 92% con162 símbolos correctamente clasificados. En este caso 8 caracteres fueronconfundidos como As y 6 como Es. En total el sistema ofrece un desempeñodel 93.7%.

Las curvas ROC para esta corrida se muestran a continuación, donde lasdiferentes clases se observan con un desempeño bastante bueno:

El desempeño del sistema sobre los diferentes subconjuntos de entrenamiento,verificación y prueba se muestra a continuación:

La figura muestra el error en las diferentes particiones de datos. Es evidenteque la red disminuye el error intensamente para las muestras de entrenamiento(línea azul) pero no logra esto para las muestras de verificación (línea verde).Se refuerza entonces que el uso del subconjunto de verificación impide que lared se sobreentrene deteniendo el proceso de aprendizaje cuando eldesempeño en las muestras de verificación deja de mejorar. La línea rojamuestra el desempeño sobre las muestras de prueba usadas sólo al finalizar elproceso de aprendizaje. Su comportamiento es similar al de las muestras deverificación mostrandonos que el sistema ha generalizado bien.

Aunque los resultados obtenidos en las múltiples pruebas realizadas nosiempre fueron buenos, podíamos obtener mejores pesos en la red al repetir el

proceso de entrenamiento que podía realizarse facilmente desde la interfaz, porejemplo luego de añadir algún nuevo carácter que había sido mal reconocido.

TEST DESDE LA INTERFAZ

Para probar en la interfaz el símbolo que se encuentre dibujado puedeutilizarse el botón Testear, al presionarlo se crea, con base en el estado actualde la matriz central, un vector de prueba, que es pasado internamente a lafunción sim. El resultado es procesado para desplegar en pantalla una decisiónsobre que tipo de carácter es.

En caso de que la respuesta desplegada sea ambigua o errada el carácterpresentado a la red puede añadirse a la base de datos con el botón Anexar yrealizar el entrenamiento de nuevo.

LIMPIAR

Como su nombre lo indica este comando simplemente lleva la matriz a suestado inicial: cuadros en blanco, además retira cualquier mensaje asociado aentradas pasadas.

SALIR

Para finalizar el programa.

EJEMPLOS

Con ánimo ilustrativo probaremos el sistema para varias entradas distintas

Ejemplo 1: E correctamente reconocida

Ejemplo 2: E correctamente reconocida

Ejemplo 3: A correctamente reconocida

Ejemplo 4: Caracter que no es ni A ni E correctamente identificado

Si el carácter o patrón ingresado esta muy alejado de las formas E o A, seespera que la red sepa decirlo, esto es asegurar que no es una E y tampocouna A. Veamos:

Ejemplo 5:Caracter que no es ni A ni E correctamente identificado

Ejemplo 6: E que no es reconocida

No siempre la salida es correcta. Por ejemplo veamos la respuesta al siguientepatrón:

En este caso podría añadirse en nuevo patrón como una E presionando elbotón Anexar y luego entrenar.

También se detectaron problemas algunas veces cuando el carácter no estácentrado y aparece en una de las esquinas. Esto indica que para sistemas másrobustos debería haber una fase de normalización previa.

CONCLUSIONES Y TRABAJO FUTURO

• Se realizó un reconocedor simple de los caracteres A y E utilizandoMatlab y aprovechando las facilidades que tal herramienta ofrece para eldiseño de sistemas basados en redes neuronales artificiales.

• El éxito del sistema dependió fuertemente del número de muestrasdisponibles para el entranamiento. En nuestro caso, con el tiempolimitado disponible, construimos una base de datos pequeña que generóresultados aceptables. No obstante con la herramienta creada esta basede datos puede ser extendida facilmente y garantizar que no existeimbalance en las clases y que las muestas son suficientementerepresentativas.

• En experimentos previos habíamos utilizado una simple neurona para elreconocimiento de caracteres, habiendo obtenido resultados muylimitados. Puesto que un simple perceptron solo puede separarproblemas lineales, la tarea de reconocimiento de caracteres debellevarse a cabo con redes más complejas. Aquí utilizamos un red

multicapa que ofreció resultados apropiados para la tarea. Exploramoscúal era el número de neuronas en la capa oculta con mejor desempeñoy encontramos que con 8 el sistemas se comportaba bastante bien,dadas las muestras disponibles.

• La interfaz grafica ofrece al sistema un ambiente muy cómodo para lamanipulación y observación de los resultados. Además la capacidad deañadir nuevas muestras de forma interactiva dota al sistema con elpotencial de ser mejorado continuamente.

• El sistema actual es muy fácil de extender para el reconocimiento deotros caracteres y usando la interfaz añadir las bases de datos de formasimple.

• Queda pendiente explorar cuadriculas de dibujo mucho más grandes yprocedimientos de normalización sobre los datos para tolerar problemasde escala y dibujo de caracteres de forma no centralizada.

• Sería muy interasante también explorar otras arquitecturas de redesneuronales y comparar su desempeño. Desgraciadamente por lolimitado de tiempo del módulo en la materia, no fue posible realizar estastareas que se proponen como trabajo futuro.