Aplicación de una red neuronal en el reconocimiento de vocales

Anuncio
INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES
DE MONTERREY
CAMPUS ESTADO DE MÉXICO
División de Ingeniería y Arquitectura
Solución de Problemas con Programación
Proyecto
“Aplicación de una red neuronal en el reconocimiento
de vocales manuscritas”
Autores:
Erick Emilio Saldaña Galván.
A01164186.
José Joaquín Esparza Colín.
A01164467.
Nombre del Profesor:
Iván Alejandro Escobar Broitman.
Grupo: 02.
Fecha de entrega:
Martes 15 de noviembre de 2011.
“Aplicación de una red neuronal en el reconocimiento de vocales
manuscritas”
Planteamiento del problema:
Como
sabemos,
las
redes
neuronales
artificiales
son
simulaciones
computacionales del proceso biológico del pensamiento 1. Las redes neuronales
son capaces de recibir una cantidad de información significativa para así
entrenar hasta aprender las propiedades de un problema específico. Lo anterior
se logra a través de un mecanismo de pesos y de una serie de funciones
matemáticas que ayudan a normalizar los datos recibidos. De esta manera se
obtiene que una red neuronal es sumamente útil en la resolución de diferentes
tipos de problemas, como diagnósticos médicos, predicciones financieras,
clasificación de especies, identificación de patrones, entre otros.
Teniendo en cuenta los antecedentes previos, en un principio se planteó una red
neuronal que pudiera reconocer patrones manuscritos de todas las letras del
alfabeto, así como de los dígitos. Sin embargo, y ante la falta de una base de
datos que permitiera la idea original, ésta tuvo que ser modificada. El problema
en el que nos enfocamos es en el reconocimiento de las vocales del alfabeto,
siendo éstas mayúsculas y minúsculas. Aunque el enfoque del problema es más
particular que el de la idea original, nos permitió ahondar más en el mismo a
través de la creación de una base de datos propia, así como de un programa que
permite a la red recibir datos creados directamente por el usuario. Tanto la base
de datos como el programa serán detallados más adelante en el presente
reporte.
Investigación
Hoy en día, existen varios tipos de reconocimientos que intentan dar solución a
diferentes tipos de problemas. Algunos de los más que más atención reciben por
parte de los investigadores son los siguientes:

Reconocimiento de formas.

Reconocimiento de los caracteres del alfabeto chino.

Reconocimiento de dígitos manuscritos.

Reconocimiento de caracteres manuscritos del alfabeto.
De acuerdo a Khosravi y Kabir, el reconocimiento de caracteres manuscritos es
uno de los temas más interesantes en el área del reconocimiento de patrones 2.
La utilidad de este tipo de base de datos es sumamente variada. Prueba de ello
es su uso en distintas instituciones alrededor del mundo, como es el caso del
Servicio Postal de los Estados Unidos de América. De hecho, una de las bases de
datos comerciales más completas en este rubro proviene de esta organización.
Primordialmente, el reconocimiento de caracteres manuscritos tiene el objetivo
de asociar a una imagen la identidad correspondiente de entre los símbolos de un
alfabeto3.
De acuerdo a Po-Hsien, existen dos maneras fundamentales de realizar un
reconocimiento exitoso de caracteres manuscritos: a través de los diferentes
métodos estadísticos de reconocimiento de patrones y a través de una red
neuronal4.
Aunque no se profundizará en los métodos de reconocimiento de patrones, cabe
mencionar que, de manera general, existen tres: clasificadores que trabajan bajo
la teoría Bayesiana de decisiones, otros que lo hacen por la regla de vecindad y
finalmente otros que clasifican de manera lineal. Los clasificadores estadísticos
anteriores tienen como ventaja que pueden trabajar con bases de datos
“incompletas” y que pueden aprender si se les asignan objetivos. Sin embargo,
también tienen problemas importantes, como es el hecho que requieren de bases
de datos extensas para funcionar adecuadamente, además de que son
fuertemente sensibles a los errores que puedan incluirse en dichas bases de
datos. En otras palabras, si se introducen datos irrelevantes en los clasificadores,
éstos pueden arrojar resultados inapropiados.
Es por razones como las anteriores por las que resulta evidente la importancia de
utilizar una red neuronal en la identificación de manuscritos. Algunas de las
ventajas de su utilización son las siguientes:

Uno de los problemas fundamentales que impide que los clasificadores
mencionados anteriormente encuentren resultados precisos para el
reconocimiento de caracteres manuscritos es que éste no tiene una
solución directamente algorítmica. Es aquí donde las redes neuronales
ganan en utilidad, pues no se basan en los mismos procesos matemáticos
que los clasificadores, sino que logran aprender a través del ejemplo y
del entrenamiento que se les otorgue.

Las redes neuronales pueden tomar decisiones para lograr generalizar un
resultado que satisfaga el problema en cuestión. Aunque las entradas no
sean suficientemente claras, las redes neuronales pueden entrenarse
hasta lograr salidas cada vez más precisas.

Las redes neuronales pueden trabajar con bases de datos extensas y no
extensas. Lo importante es que la base de datos empleada sea suficiente
para atacar efectivamente al problema planteado.
Descripción y solución del problema
Como pudo observarse en la Investigación, el problema de la identificación de
patrones manuscritos no sigue un algoritmo que pueda ser realizado por
clasificadores comunes. El empleo de la red neuronal es necesario debido a que
la escritura de las personas es sumamente variable fundamentalmente en cuanto
a estilo y tamaño. Por lo tanto, en este problema se pueden aplicar tres de las
propiedades más importantes de las redes neuronales: el aprendizaje por
ejemplos, el entrenamiento a partir de una base de datos y la generalización de
resultados.
La solución propuesta para este problema es la programación de una red
neuronal de tipo Feed Forward, la cual emplea treinta y cinco neuronas de
entrada regidas por una función de tipo lineal; dos capas escondidas con ochenta
y noventa neuronas respectivamente, las cuales utilizan una función de tipo
sigmoid respectivamente y finalmente cinco neuronas de salida que emplean
también una función de tipo lineal. Asimismo, se utiliza un sistema de
entrenamiento de tipo Back propagation, con una tasa de aprendizaje de 0.1. El
diseño y funcionamiento de la red neuronal son descritos más adelante, en el
apartado “Modelo de la red”.
Datos
En la actualidad, existen varias bases de datos muy completas en el área de la
identificación de caracteres manuscritos, tanto alfabéticos como numéricos.
Algunos ejemplos son:

Base de datos CENPARMI: Elaborado por la Universidad de Concordia, esta
base de datos incluye más de 6,000 ejemplos, los cuales se encuentran
divididos de la siguiente manera: 4,000 para entrenamiento y 2,000 para
la realización de pruebas.

Base de datos CEDAR: Elaborada por la Universidad de Búfalo, esta base de
datos incluye un total de 21,179 ejemplos, los cuales se encuentran
divididos de la siguiente manera: 18,468 para entrenamiento y 2,711 para
pruebas.

Base de datos MNIST: Elaborada por el Instituto Nacional de Estándares y
Tecnología, esta base de datos contiene 70,000 ejemplos de caracteres
alfabéticos y numéricos. Incluye 60,000 ejemplos para entrenamiento y
10,000 para realizar pruebas.

Base de datos USPS: Elaborada por el Servicio Postal de los Estados Unidos,
contiene un total de 7,291 ejemplos de entrenamiento y 2,007 ejemplos
de prueba.
Como puede apreciarse, las bases de datos anteriores son complejas en cuanto al
número de datos que manejan. Sin embargo, sólo están comercialmente
disponibles, por lo que los autores nos vimos en la necesidad de encontrar alguna
base de datos más sencilla y libre, o bien, realizar una propia.
En el documento de Bazán5, se obtuvo la idea de representar cada vocal en una
cuadrícula de cinco filas por siete columnas. Sin embargo, esa base de datos
solamente contenía un estilo de cada vocal, por lo que no se ajustaba al
propósito de nuestra red neuronal.
Por lo tanto, se llegó a la creación de una base de datos propia, la cual contiene
siete estilos diferentes para cada vocal, incluyendo mayúsculas y minúsculas. En
total, la base de datos contiene 6,125 caracteres binarios, donde cada fila de 35
dígitos forma la vocal en cuestión. A continuación, se detallan las diferentes
vocales incluidas en la base de datos (adjunta en el presente reporte).
Vocal A, a
La vocal A, a está representada de las siguientes formas en la base de datos:
1. {0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0
0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0}. Su target
binario en la red neuronal está representado como 1 0 0 0 0. Su impresión
en la cuadrícula y por el programa de reconocimiento de la red neuronal
queda de las siguientes maneras:
.
.
0
.
.
.
.
0
.
.
.
0
.
0
.
.
0
.
0
.
.
0
0
0
.
0
.
.
.
0
0
.
.
.
0
Figura 1. Impresión en cuadrícula de
Figura 2. Impresión de la A en el
5*7 de la A.
programa utilizado en la red neuronal.
2. {0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0
0.0 0.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0}. Su target
binario también es 1 0 0 0 0. Las impresiones por cuadrícula y por el
programa de la red neuronal quedan así:
.
.
.
.
.
.
.
0
.
.
.
0
.
0
.
.
0
.
0
.
.
0
0
0
.
.
0
.
0
.
.
0
.
0
.
Figura 3. Impresión en cuadrícula de
Figura 4. Impresión de la A en el
5*7 de la A.
programa utilizado en la red neuronal.
3. {0.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0
0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0}. Su target es
1 0 0 0 0. Las impresiones por cuadrícula y por la red neuronal de este
tercer tipo de A quedan así:
.
0
0
0
.
.
0
.
0
.
.
0
.
0
.
.
0
0
0
.
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
Figura 5. Impresión en cuadrícula de
Figura 6. Impresión de la A en el
5*7 de la A.
programa utilizado en la red neuronal.
4. {1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0
1.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0}. Su target
binario es 1 0 0 0 0. Las impresiones por cuadrícula y en la red neuronal
para este tipo de A quedan así:
0
0
0
0
0
.
.
.
.
0
.
0
0
0
0
0
.
.
.
.
0
.
.
.
0
.
0
0
0
0
.
.
.
.
0
Figura 7. Impresión en cuadrícula de
Figura 8. Impresión de la A en el
5*7 de la A.
programa utilizado en la red neuronal.
5. {0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 1.0}. Su target
binario es 1 0 0 0 0 y sus impresiones en pantalla quedan de la siguiente
forma:
.
.
.
.
.
.
0
0
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
.
0
Figura 9. Impresión en cuadrícula de
Figura 10. Impresión de la A en el
5*7 de la A.
programa utilizado en la red neuronal.
6. {0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0
0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0}. Su target
binario es 1 0 0 0 0 y sus impresiones son:
.
.
0
.
.
.
0
.
.
.
.
0
.
0
.
.
0
.
0
.
.
0
0
0
.
0
.
.
.
0
0
.
.
.
0
Figura 11. Impresión en cuadrícula de
Figura 12. Impresión de la A en el
5*7 de la A.
programa utilizado en la red neuronal.
7. {0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0
1.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0}. La
representación binaria es 1 0 0 0 0. Sus impresiones en pantalla son:
.
0
0
0
.
0
.
.
.
0
.
.
.
.
0
.
0
0
0
0
0
.
.
.
0
.
0
0
0
0
.
.
.
.
0
Figura 13. Impresión en cuadrícula de
Figura 14. Impresión de la A en el
5*7 de la A.
programa utilizado en la red neuronal.
Vocal E, e
La vocal E, e está representada en forma binaria como 0 1 0 0 0; y gráficamente
de las siguientes maneras en la base de datos:
1. {1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0
0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0}. Sus
impresiones en cuadrícula y en la red neuronal se visualizan así:
0
0
0
0
0
0
.
.
.
.
0
.
.
.
.
0
0
0
0
.
0
.
.
.
.
0
.
.
.
.
0
0
0
0
0
Figura 15. Impresión en cuadrícula de
Figura 16. Impresión de la E en el
5*7 de la E.
programa utilizado en la red neuronal.
2. {1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0
0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0}. Las
impresiones de este estilo de E quedan de la siguiente forma:
0
0
0
0
0
0
0
0
0
0
0
.
.
.
.
0
0
0
0
.
0
.
.
.
.
0
0
0
0
0
0
0
0
0
0
Figura 17. Impresión en cuadrícula de
Figura 18. Impresión de la E en el
5*7 de la E.
programa utilizado en la red neuronal.
3. {0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0}. Las
impresiones de este tercer estilo se presentan así:
.
.
0
.
.
.
0
.
0
.
0
.
.
.
0
0
0
0
0
0
0
.
.
.
.
.
0
.
.
.
.
.
0
0
0
Figura 19. Impresión en cuadrícula de
Figura 20. Impresión de la E en el
5*7 de la E.
programa utilizado en la red neuronal.
4. {0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0
0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0}. Las
impresiones de este estilo quedan de la siguiente forma:
Figura 21. Impresión en cuadrícula de
.
0
0
0
0
0
.
.
.
0
0
.
.
.
0
0
0
0
0
.
0
.
.
.
.
0
.
.
.
.
0
0
0
0
0
Figura 22. Impresión de la E en el
5*7 de la E.
programa utilizado en la red neuronal.
5. {0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0
0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0}. Las
impresiones en cuadrícula y en el formato de la red neuronal son:
.
0
0
0
0
0
.
.
.
.
0
.
.
.
.
0
0
0
0
.
0
.
.
.
.
0
.
.
.
.
.
0
0
0
0
Figura 23. Impresión en cuadrícula de
Figura 24. Impresión de la E en el
5*7 de la E.
programa utilizado en la red neuronal.
6. {0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0}. Las
impresiones en cuadrícula y en el formato de la red neuronal quedan así:
.
.
0
0
0
.
0
.
.
.
.
0
.
.
.
.
.
0
.
.
.
0
.
.
.
0
.
.
.
.
0
0
0
0
0
Figura 25. Impresión en cuadrícula de
Figura 26. Impresión de la E en el
5*7 de la E.
programa utilizado en la red neuronal.
7. {0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0}. Las
impresiones en cuadrícula y en formato de la red neuronal son:
.
.
.
.
.
.
.
0
.
.
.
0
.
0
.
.
0
0
.
.
.
0
.
.
.
.
0
0
0
.
.
.
.
.
.
Figura 27. Impresión en cuadrícula de
Figura 28. Impresión de la E en el
5*7 de la E.
programa utilizado en la red neuronal.
Vocal I, i
La vocal I, i está representada en forma binaria como 0 0 1 0 0; y gráficamente
de las siguientes maneras en la base de datos:
1. {1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0}. Las
impresiones de este estilo de I son:
0
0
0
0
0
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
0
0
0
0
0
Figura 29. Impresión en cuadrícula de
Figura 30. Impresión de la I en el
5*7 de la I.
programa utilizado en la red neuronal.
2. {1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0}. Las
impresiones de esta fuente son las siguientes:
0
0
0
0
0
0
0
0
0
0
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
0
0
0
0
0
0
0
0
0
0
Figura 31. Impresión en cuadrícula de
Figura 32. Impresión de la I en el
5*7 de la I.
programa utilizado en la red neuronal.
3. {0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0}. Sus
impresiones en cuadrícula y en formato de la red neuronal son:
Figura 33. Impresión en cuadrícula de
.
.
0
.
.
.
.
.
.
.
.
0
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
Figura 34. Impresión de la I en el
5*7 de la I.
programa utilizado en la red neuronal.
4. {0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0}. Las
impresiones de este estilo de i quedan de la siguiente forma:
.
.
0
.
.
.
.
.
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
0
.
0
.
Figura 35. Impresión en cuadrícula de
Figura 36. Impresión de la I en el
5*7 de la I.
programa utilizado en la red neuronal.
5. {0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0}. Este quinto
estilo de i se representa así:
.
.
0
.
.
.
.
.
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
Figura 37. Impresión en cuadrícula de
Figura 38. Impresión de la I en el
5*7 de la I.
programa utilizado en la red neuronal.
6. {0.0 0.0 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.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0}. Este tipo de
i se imprime de las siguientes formas (cuadrícula/red neuronal):
.
.
.
.
.
.
0
.
.
.
.
.
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
.
0
.
.
Figura 39. Impresión en cuadrícula de
Figura 40. Impresión de la I en el
5*7 de la I.
programa utilizado en la red neuronal.
7. {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.0 1.0 0.0 0.0 0.0 0.0 1.0
0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0}. Las
impresiones en cuadrícula y en el formato de la red neuronal son:
.
.
.
0
.
.
.
.
.
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
.
0
.
.
.
0
.
.
Figura 41. Impresión en cuadrícula de
Figura 42. Impresión de la I en el
5*7 de la I.
programa utilizado en la red neuronal.
Vocal O, o
La vocal O, o está representada en forma binaria como 0 0 0 1 0; y gráficamente
de las siguientes maneras en la base de datos:
1. {0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0
1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0}. Las
impresiones de este estilo de O son:
.
0
0
0
.
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
.
0
0
0
.
Figura 43. Impresión en cuadrícula de
Figura 44. Impresión de la O en el
5*7 de la O.
programa utilizado en la red neuronal.
2. {0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0
1.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0}. Las
impresiones de esta fuente son las siguientes:
.
.
.
.
.
.
0
0
0
.
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
.
0
0
0
.
.
.
.
.
.
Figura 45. Impresión en cuadrícula de
Figura 46. Impresión de la O en el
5*7 de la O.
programa utilizado en la red neuronal.
3. {0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0}. Sus
impresiones en cuadrícula y en formato de la red neuronal son:
.
.
.
.
.
.
0
0
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
.
.
Figura 47. Impresión en cuadrícula de
Figura 48. Impresión de la O en el
5*7 de la O.
programa utilizado en la red neuronal.
4. {0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0
1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0}. Las
impresiones de este estilo de o quedan de la siguiente forma:
Figura 49. Impresión en cuadrícula de
.
.
.
.
.
.
.
0
0
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
.
Figura 50. Impresión de la O en el
5*7 de la O.
programa utilizado en la red neuronal.
5. {0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0
1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0}. Este quinto
estilo de o se representa así:
.
.
.
.
.
.
.
0
0
.
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
0
Figura 51. Impresión en cuadrícula de
Figura 52. Impresión de la O en el
5*7 de la O.
programa utilizado en la red neuronal.
6. {0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0
1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0}. Este tipo de
o se imprime de las siguientes formas (cuadrícula/red neuronal):
.
0
0
0
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
.
0
0
0
.
Figura 53. Impresión en cuadrícula de
Figura 54. Impresión de la O en el
5*7 de la O.
programa utilizado en la red neuronal.
7. {0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0
1.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0}. Las
impresiones en cuadrícula y en el formato de la red neuronal son:
.
.
.
.
.
.
.
.
.
.
.
0
0
0
.
0
.
.
.
0
0
.
.
.
0
.
0
0
0
.
.
.
.
.
.
Figura 55. Impresión en cuadrícula de
Figura 56. Impresión de la O en el
5*7 de la O.
programa utilizado en la red neuronal.
Vocal U, u
La vocal U, u está representada en forma binaria como 0 0 0 0 1; y gráficamente
de las siguientes maneras en la base de datos:
1. {1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0
1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0}. Las
impresiones de este estilo de U son:
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
0
.
.
.
0
.
0
0
0
.
Figura 57. Impresión en cuadrícula de
Figura 58. Impresión de la U en el
5*7 de la U.
programa utilizado en la red neuronal.
2. {0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0
1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0}. Las
impresiones de esta fuente son las siguientes:
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
.
Figura 59. Impresión en cuadrícula de
Figura 60. Impresión de la U en el
5*7 de la U.
programa utilizado en la red neuronal.
3. {1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0}. Este tipo de
U queda impresa de la siguientes maneras:
Figura 61. Impresión en cuadrícula de
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
.
Figura 62. Impresión de la U en el
5*7 de la U.
programa utilizado en la red neuronal.
4. {0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0}. Las
impresiones de este estilo quedan de la siguiente forma:
.
.
.
.
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
0
.
.
.
.
0
.
Figura 63. Impresión en cuadrícula de
Figura 64. Impresión de la U en el
5*7 de la U.
programa utilizado en la red neuronal.
5. {0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0}. Sus
impresiones en cuadrícula y en el formato de la red neuronal son:
.
.
.
.
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
.
0
.
.
.
.
.
Figura 65. Impresión en cuadrícula de
Figura 66. Impresión de la U en el
5*7 de la U.
programa utilizado en la red neuronal.
6. {0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0
0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0}. Este tipo de
u se imprime de las siguientes formas (cuadrícula/red neuronal):
.
.
.
.
.
0
0
.
0
0
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
.
0
.
.
.
.
.
.
.
Figura 67. Impresión en cuadrícula de
Figura 68. Impresión de la U en el
5*7 de la U.
programa utilizado en la red neuronal.
7. {1.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0
1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0}. Las
impresiones en cuadrícula y en el formato de la red neuronal son:
0
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
0
.
.
0
.
.
0
0
.
Figura 69. Impresión en cuadrícula de
Figura 70. Impresión de la U en el
5*7 de la U.
programa utilizado en la red neuronal.
Los datos anteriores (siete tipos de cada vocal) se encuentran repetidos cinco
veces en la base de datos. De esta manera quedó conformado el dataset utilizado
en
la
red
neuronal
de
identificación
de
vocales
(Archivo
de
texto
“DataSetCreated.txt” adjunto con el presente reporte).
Para poder ser utilizados en la red, los datos se guardaron como un archivo de
texto (.txt), el cual puede ser importado fácilmente mediante las herramientas
de pyBrain. En el caso de la presente red neuronal, los datos fueron importados
mediante la función “loadtxt”.
La forma en que la red neuronal utiliza los datos es la siguiente:

Se definió una variable llamada “digit_ent”, la cual importa desde la
columna 0 hasta la 34, que son los lugares donde se encuentran los datos
flotantes que definen a cada vocal.

Se definió una variable llamada “digit_sal”, la cual importa desde la
columna 35 a la 39, que son los lugares donde se encuentran los números
binarios enteros que corresponden al target de cada vocal.
Una vez que se importaron los datos, se pudieron utilizar en la red, tanto para su
entrenamiento como para su fase de pruebas. La fracción de código que agrega
cada fila de la base de datos a la red neuronal es la siguiente:
For i in range (len(digit_ent)):
ds.addSample (digit_ent[i], digit_sal[i])
De esta manera fue que se logró introducir la base de datos creada en la red
neuronal. Es importante mencionar que la base de datos cubre sólo algunas de
las posibilidades de escritura en cuadrículas de 5*7, y se espera que la red
neuronal pueda entrenar lo suficiente para reconocer cualquier escrito
manuscrito del usuario en dicho formato.
Modelo de la red
La red neuronal creada es de tipo Feed Forward, y posee las siguientes
características:
Comienza con una Bienvenida al programa e inmediatamente comienza a cargar
de las librerías de PyBrain y PyLab las funciones que nos permiten:

Leer rápidamente un archivo de texto.

Crear neuronas Lineales y Sigmoid.

Crear conexiones totales entre las neuronas.

Crear una red con retroalimentación.

Utilizar el set de datos para entrenar.

Entrenar automáticamente la red.
Cada vez que termina un paso imprime un aviso, normalmente parece que todo
se imprime al mismo tiempo porque no toma mucho tiempo completar cada paso,
a excepción de cargar las librerías la primera vez que se corre el script.
A continuación de importar las librerías crea una red con retroalimentación con
los siguientes parámetros:

35 neuronas de entrada, una para cada pixel de las imágenes.

Dos capas ocultas Sigmoid de 80 neuronas la primera y 90 la segunda (para
conocer porque utilizamos justo estos valores por favor ver el archivo
“Optimización de Neuronas.xlsx”).

5 neuronas de salida que indican el nivel de correspondencia de cada
imagen con cada una de las vocales posibles.

Cada una de las neuronas tiene conexión con todas las neuronas de una
capa antes y después.
Ya con esta red configurada importamos los datos de nuestro archivo de datos:
“DataSetCreated.txt”. Como se mencionó en la sección de Datos, originalmente
esta red fue probada con otros datos, pero al momento de inspeccionarlos con un
programa que elaboramos que representaba gráficamente las imágenes por
medio de ASCII descubrimos que solo teníamos 2 ejemplos para cada letra
repetido múltiples veces. Por lo que nuestro nuevo conjunto de datos contiene 7
formas diferentes de cada letra repetido 5 veces. Puede ver la representación
gráfica de cada letra en el programa: “DibujaLetra(Todas).py” que simplemente
crea una lista con lo que lee de cada ejemplo, crea un string que dibuja la letra
con ASCII y va imprimiendo cada letra.
Para introducir el conjunto de datos para entrenar especificamos que las
primeras 35 columnas son lo que debería leer y las ultimas 5 son las respuestas
para que se entrene poco a poco. Con una instrucción añade cada ejemplo de la
base de datos al entrenador siguiendo esta configuración.
A continuación comienza a entrenar con un rango de cambio de 0.1 y entrena
todo el conjunto de datos 400 veces según decidimos optimizarlo para minimizar
el error que podría tener la red.
Hasta este punto la red ya está lista para ser usada.
Código de la red neuronal
El código de la red neuronal para la identificación de vocales manuscritas se
encuentra adjunto con el presente reporte. Se encuentra en formato .py.
Uso de la red
De manera similar al programa que crea el dibujo de cada letra en los ejemplos,
cuando metemos datos al output ya no es necesario hacer una lista tediosa de
ceros y unos, en su lugar se “dibuja” la letra en ASCII y el programa crea solo tal
lista para introducirlo a la red neuronal.
De esa red neuronal se obtienen los 5 datos de salida, pero el programa también
esta modificado para interpretarlos solo. Por lo tanto encuentra cual es el dato
de mayor correspondencia y dice al usuario cuál es la letra que está ahí escrita.
Pruebas
La red neuronal creada fue probada y optimizada con el objetivo de encontrar el
menor
margen
de
error
posible.
En
el
documento
“Optimización
de
Neuronas.xlsx” se pueden apreciar las diferentes pruebas que fueron realizadas a
la red neuronal.
De las pruebas anteriores pudo deducirse que la red tiene un grado de precisión
adecuado, pues es capaz de reconocer vocales de diferentes estilos a aquéllos
con los que fue programada. Sin embargo, un área de mejora en el futuro es que,
al parecer, cada vez que se corre la red se necesitan menos épocas para que ésta
marque error. Sin embargo, y a pesar del error descrito, la red continúa
arrojando resultados que pueden ser interpretados por el usuario.
Conclusiones
A través de la creación de la presente red neuronal, los autores detectamos un
buen número de aplicaciones en las cuales redes como la nuestra, con sus
respectivas mejoras y complementación en la base de datos, pueden ser de suma
utilidad:

En dispositivos como teléfonos móviles y tabletas electrónicas, donde el
usuario puede escribir a través de diferentes medios (desde plumas para
aparatos táctiles hasta sus propios dedos). En estos casos, los dispositivos
deben ser lo suficientemente precisos para reconocer las letras y dígitos
que se le introducen; y no sólo eso, sino que además deben de ser capaces
de ir aprendiendo gradualmente la forma en que escribe el usuario,
asegurando cada vez un menor margen de error.

En programas computacionales diseñados para mejorar la caligrafía de los
infantes. Para casos como este, el programa debe reconocer la letra que
el niño está escribiendo para posteriormente realizar sugerencias sobre
posibles mejoras. La anterior sería una manera de terminar con las
famosas “planas” en la educación preescolar, a la vez que ofrece un
acercamiento útil a la computación desde edades tempranas.

En los servicios postales de diferentes lugares en el mundo. En ocasiones,
las personas no hacen letras del todo legibles, por lo que los servicios de
correo y paquetería no saben con exactitud el lugar a donde va dirigida la
carta, paquete o similar. En tales situaciones, un programa basado en
redes neuronales de identificación de letras y dígitos simplificaría mucho
la labor humana en descifrar las letras, a la vez que muy probablemente
reduciría los errores cometidos. Todo sería cuestión de elaborar bases de
datos suficientes para los diferentes alfabetos, como el árabe, el chino, el
japonés, etc.

En algunos juicios de corte judicial, el conocer la procedencia de ciertos
documentos puede ser la diferencia entre declarar a alguien inocente o,
en su defecto, culpable. En estos casos, una red neuronal de identificación
de patrones manuscritos podría ayudar a encontrar la verdad detrás de un
documento sospechoso.
Los anteriores, entre muchos otros, son ejemplos de la vida real en que podrían
aplicarse redes neuronales basadas en el mismo concepto a la creada para el
presente reporte. De ahí la importancia de conocer los fundamentos sobre cómo
programar este tipo de software inteligente.
Como conclusión, se puede establecer que las redes neuronales son una de las
mejores herramientas para resolver problemas de identificación de caracteres
debido en buena parte a sus propiedades de autoaprendizaje, entrenamiento y
capacidad de trabajar con bases de datos de diversa longitud. Asimismo, a lo
largo del presente reporte se ha podido apreciar que el contar con una base de
datos suficiente es fundamental para el adecuado funcionamiento de la red
neuronal. Lo anterior, aunado a un adecuado entrenamiento y programación de
factores importantes como el número de neuronas y la tasa de aprendizaje,
asegurarán la creación de una red que satisfaga un problema real de manera
eficaz.
Trabajos citados
1
Anónimo. (1999). Electrónica México. Recuperado el 13 de Noviembre de 2011, de Redes
Neuronales Artificiales: http://electronica.com.mx/neural/informacion/index.html
2
Khosravi, H., & Kabir, E. (2007). ACM Digital Library. Recuperado el 13 de Noviembre de 2011, de
Introducing a very large dataset of Farsi digits and a study on their varieties:
http://dl.acm.org/citation.cfm?id=1243603
3
Bazán, C. (s.f.). Conceptos de reconocimiento de caracteres. Recuperado el 14 de Noviembre de
2011, de http://www.programatium.com/codigo/ver-codigofuente.php?id=1063
4
Po-Hsien, M. (2003). University of Queensland. Recuperado el 13 de Noviembre de 2011, de
Handwritten character recognition:
http://innovexpo.itee.uq.edu.au/2003/exhibits/s804636/thesis.pdf
Documentos relacionados
Descargar