Sunteți pe pagina 1din 13

INFORME APLICACIN REDES NEURONALES

RECONOCEDOR SIMPLE DE CARACTERES

INTELIGENCIA COMPUTACIONAL MODULO: REDES NEURONALES ARTIFICIALES

PROF: JOSE EDISON AEDO

JONNY ALEXANDER URIBE 98702450

DOCTORADO INGENIERA ELECTRNICA UNIVERSIDAD DE ANTIOQUIA OCTUBRE DE 2013

OBJETIVO En el marco del mdulo de Redes neuronales para el curso de Inteligencia Computacional, se construye la aplicacin aqu descrita que utiliza algunos de los conceptos aprendidos. La tarea concreta abordada fu la creacin de un reconocedor de caracteres simple para los smbolos A y E1. La representacin de los smbolos fue matricial con 35 puntos organizados en 7 filas y 5 columnas. El valor de cada punto es bipolar, representado el color negro por -1 y el color blanco por 1. Un ejemplo de esta representacin se muestra en la siguiente grfica, donde aparece un carcter E usando valores bipolares: 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 1 1 -1 1 -1 1 -1 1 1 -1 1 -1 1 -1 1 1 1 1 1 1 1 1

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

Donde se usa la correspondencia

1 = negro

1 = blanco.

Para lograr la identificacin de los caracteres se utiliz una red feedforward de dos capas. La entrada recibe los valores de la matriz en un vector bipolar de 35 posiciones, la capa de salida la conforman 3 unidades, una de ellas para identificar la A, otra para identificar la E y la ltima para identificar smbolos que no son A ni tampoco E. El nmero de neuronas de la capa oculta fue uno de los parmetros que buscamos, con el fn de optimizar el desempeo del sistema. ARCHIVOS EN EL ENTREGABLE En la carpeta enviada se encuentran los siguientes componentes:
1

Pru4.m: Cdigo principal del programa encargado de gestionar todo el sistema Pru4.fig: Archivo para la interfaz principal del programa en Matlab

Este trabajo utiliz como punto de partida un reconocedor simple que hice en pregrado donde utilic como red un slo perceptrn y obtuve resultados muy limitados. Todo el software fu reconstruido mejorando la interfaz, la estrategia de aprendizaje, la base de datos y la estructura de la red

NewLetter.m: Cdigo 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 imgenes 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 smbolos que no son ni As ni Es

Todo el cdigo fue realizado en Matlab y probado en la versin 2013a CREACIN DE LAS BASES DE DATOS Tener una matriz de 7 x 5 implica 35 entradas para cada neurona en la capa de entrada. Por convencin el dato en la esquina superior izquierda es la entrada x1, la entrada x35 ser el dato en la esquina inferior derecha. Lemos los datos por filas. La creacin de los datos para el entrenamiento fu vital para el buen funcionamiento del reconocedor. Sabamos que entre mas entradas pudiramos utilizar para el entrenamiento mejor sera el desempeo final. No obstante abordar la especificacin de los vectores bipolars (1 y 1) de manera manual, esto es, haciendo vectores de 1 x 35 dato a dato, se presentaba como una tarea supremamente demandante de tiempo. Por ello, para facilitar la especificacin de los datos de entrenamiento, se cre una interfaz grafica que facilitaba la inclusin de las muestras. La interfaz permiti la poblacin rpida de la bases de datos donde cada carcter fu almacenado en forma de archivo de imgen bmp. La base de datos est compuesta por tres carpetas llamadas BaseDatosA, BaseDatosE y BaseDatosNAE. En el interior de cada una existe un conjunto de archivos bmp binarios que especifican caracteres vlidos para las diferentes clases asi: BaseDatosA: Conjunto con imgenes de A validas. Cada archivo nombrado Ai.bmp. BaseDatosE: Conjunto con imgenes de E validas. Cada archivo nombrado Ei.bmp. BaseDatosNAE: Conjunto con imgenes de smbolos que no representan ni As ni Es, son los ejemplos negativos del sistema. Cada archivo nombrado Ni.bmp. i es el identificador numrico de la muestra, un consecutivo. La poblacin de las bases de datos se hizo por medio de la interfaz grfica descrita en el siguiente apartado.

INTERFAZ GRAFICA Presentamos a continuacin el aspecto de la interfaz

A lo largo del informe explicaremos cada uno de los atributos y comandos del sistema. MATRIZ DE PUNTOS El panel central posee 35 cuadros que definen el rea donde el carcter se dibuja. Cada cuadro tiene la propiedad de ser sensible al click de tal forma que cambia su estado de negro a blanco alternativamente. Las neuronas aprenden por monitoreo, es decir, se requiere que alguien les diga como debe ser su respuesta. En este sentido el sistema es supervisado. Luego al utilizar el algoritmo de aprendizaje se logra una amplia generalizacin. En la zona central aparecen 35 botones que se usan para dibujar el carcter. Existen dos mtodos de dibujo: Mtodo dibujo 1: Al hacer click en cada botn se intercambia su estado (manifestandose en el intercambio de fondo entre blanco y negro). Mtodo dibujo 2: Adicional al mtodo de click en cada botn, puede activarse la funcin de Hover haciendo click en cualquier zona gris de la interfaz. El Hover permite que los botones intercambien su estado simplemente pasando el puntero sobre ellos. Esto puede ser conveniente si quiere dibujarse rapidamente el carcter. El Hover se desactiva haciendo click en cualquier zona gris de nuevo.

El mtodo de dibujo activo se muestra con la etiqueta verde arriba a la derecha pudiendo ser slo click clicks + Hover La grfica siguiente muestra un ejemplo en el que se ha dibujado una E:

Si se desea almacenar este patrn en la base de datos puede presionarse el botn Anexar, lo cual har surgir un cuadro de dialogo como el siguiente:

En nuestro ejemplo presionaramos Es una E, lo que tendr como consecuencia la creacin 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 cdigo creado se asegura de nombrar de forma consecutiva las imgenes. Repitiendo el proceso descrito poblamos la base de datos para los caracteres A, E y aquellos smbolos que no ern 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 nmero de muestras en la base de datos era: As: 75 Es: 66 otros: 176 ENTRENAMIENTO Y PRUEBA El entrenamiento de la red se realiza desde la interfaz presionando el botn Entrenar. Esto har que se carguen todas las muestras disponibles en ese momento (usando DataAE.m) y se haga un llamado al script trainingNet_1.m, quien contiene las lneas para creacin, entrenamiento y prueba de la red neuronal. Se adjuntan aqu algunas partes del cdigo documentado para referencia: *******************************************************************************************
% Funcin para la creacin, entrenamiento y almacenamiento de la red % neuronal function 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); end net = patternnet(hiddenLayerSize); % Divisin de los datos para entrenamiento, validacin y prueba net.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 red outputs = net(inputs); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs); % Visualizacin de la red view(net) % Grficas f1 = figure; plotperform(tr); % convergencia f2 = figure; plotconfusion(targets,outputs); % matriz de confusin f3 = figure; plotroc(targets,outputs); % curvas ROC

% Se salva la red para uso posterior (a travez la GUI por ejemplo) save 'redAE1' net display('Presione una tecla para continuar (se cerrarn figuras)...'); pause nntraintool('close') if exist('f1','var') close(f1); end; if exist('f2','var') close(f2); end; if exist('f3','var') close(f3); end;

Despus de mltiples pruebas encontramos que la utilizacin de 8 neuronas en la capa oculta ofreca el mejor desempeo de la red. La lnea de cdigo:
net = patternnet(hiddenLayerSize);

es la encargada de crear la red. El entrenamiento se logra con la lnea:


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

Utilizamos una estrategia de divisin de muestras donde el 70% se usaban para el entrenamiento, el 15% para la verificacin y un 15% para el test final. Resultados de un entrenamiento tpico se discuten a continuacin. Recordemos que la red es una feedforward con 35 entradas, una capa de salida de 3 neuronas y 1 capa oculta con 8 neuronas en ella. Una representacin de la red aparece en la siguiente figura:

Una matriz de confusin tpica aparece en la siguiente figura. En ella se observa (primera columna) que la clase A obtuvo el 96% de identificacin correcta, siendo el error del 4% producto de la mala identificacin de dos caracteres que fueron asignados a la clase NAE (no es A, no es E).

Por su parte (columna 2) la clase E tuvo una correcta identificacin del 95.5%, donde el 4.5% de error se debi a la identificacin de 3 caracteres como si no fueran ni A ni E. La clase NAE obtuvo un xito de identificacin del 92% con 162 smbolos correctamente clasificados. En este caso 8 caracteres fueron confundidos como As y 6 como Es. En total el sistema ofrece un desempeo del 93.7%. Las curvas ROC para esta corrida se muestran a continuacin, donde las diferentes clases se observan con un desempeo bastante bueno:

El desempeo del sistema sobre los diferentes subconjuntos de entrenamiento, verificacin y prueba se muestra a continuacin:

La figura muestra el error en las diferentes particiones de datos. Es evidente que la red disminuye el error intensamente para las muestras de entrenamiento (lnea azul) pero no logra esto para las muestras de verificacin (lnea verde). Se refuerza entonces que el uso del subconjunto de verificacin impide que la red se sobreentrene deteniendo el proceso de aprendizaje cuando el desempeo en las muestras de verificacin deja de mejorar. La lnea roja muestra el desempeo sobre las muestras de prueba usadas slo al finalizar el proceso de aprendizaje. Su comportamiento es similar al de las muestras de verificacin mostrandonos que el sistema ha generalizado bien. Aunque los resultados obtenidos en las mltiples pruebas realizadas no siempre fueron buenos, podamos obtener mejores pesos en la red al repetir el

proceso de entrenamiento que poda realizarse facilmente desde la interfaz, por ejemplo luego de aadir algn nuevo carcter que haba sido mal reconocido. TEST DESDE LA INTERFAZ Para probar en la interfaz el smbolo que se encuentre dibujado puede utilizarse el botn Testear, al presionarlo se crea, con base en el estado actual de la matriz central, un vector de prueba, que es pasado internamente a la funcin sim. El resultado es procesado para desplegar en pantalla una decisin sobre que tipo de carcter es. En caso de que la respuesta desplegada sea ambigua o errada el carcter presentado a la red puede aadirse a la base de datos con el botn Anexar y realizar el entrenamiento de nuevo. LIMPIAR Como su nombre lo indica este comando simplemente lleva la matriz a su estado inicial: cuadros en blanco, adems retira cualquier mensaje asociado a entradas 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 carcter o patrn ingresado esta muy alejado de las formas E o A, se espera que la red sepa decirlo, esto es asegurar que no es una E y tampoco una 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 siguiente patrn:

En este caso podra aadirse en nuevo patrn como una E presionando el botn Anexar y luego entrenar. Tambin se detectaron problemas algunas veces cuando el carcter no est centrado y aparece en una de las esquinas. Esto indica que para sistemas ms robustos debera haber una fase de normalizacin previa. CONCLUSIONES Y TRABAJO FUTURO Se realiz un reconocedor simple de los caracteres A y E utilizando Matlab y aprovechando las facilidades que tal herramienta ofrece para el diseo de sistemas basados en redes neuronales artificiales. El xito del sistema dependi fuertemente del nmero de muestras disponibles para el entranamiento. En nuestro caso, con el tiempo limitado disponible, construimos una base de datos pequea que gener resultados aceptables. No obstante con la herramienta creada esta base de datos puede ser extendida facilmente y garantizar que no existe imbalance en las clases y que las muestas son suficientemente representativas. En experimentos previos habamos utilizado una simple neurona para el reconocimiento de caracteres, habiendo obtenido resultados muy limitados. Puesto que un simple perceptron solo puede separar problemas lineales, la tarea de reconocimiento de caracteres debe llevarse a cabo con redes ms complejas. Aqu utilizamos un red

multicapa que ofreci resultados apropiados para la tarea. Exploramos cal era el nmero de neuronas en la capa oculta con mejor desempeo y encontramos que con 8 el sistemas se comportaba bastante bien, dadas las muestras disponibles. La interfaz grafica ofrece al sistema un ambiente muy cmodo para la manipulacin y observacin de los resultados. Adems la capacidad de aadir nuevas muestras de forma interactiva dota al sistema con el potencial de ser mejorado continuamente. El sistema actual es muy fcil de extender para el reconocimiento de otros caracteres y usando la interfaz aadir las bases de datos de forma simple. Queda pendiente explorar cuadriculas de dibujo mucho ms grandes y procedimientos de normalizacin sobre los datos para tolerar problemas de escala y dibujo de caracteres de forma no centralizada. Sera muy interasante tambin explorar otras arquitecturas de redes neuronales y comparar su desempeo. Desgraciadamente por lo limitado de tiempo del mdulo en la materia, no fue posible realizar estas tareas que se proponen como trabajo futuro.

S-ar putea să vă placă și