Inteligencia Artificial II

Anuncio
Inteligencia Artificial II
Propuesta de trabajo
Miguel A. Gutiérrez Naranjo
Reconocimiento de vocales manuscritas con CLIPS
La identificación visual de la palabra escrita es una de las fronteras de la Inteligencia
Artificial en nuestros dı́as. De hecho, muchas empresas utilizan la identificación de
palabras escritas como CAPTCHA (Completely Automated Public Turing test to tell
Computers and Humans Apart) para comprobar que el interlocutor es un humano y
no una máquina.
El objetivo de este trabajo es más modesto. Nos centraremos solamente en letras
manuscritas, concretamente en vocales, y consideraremos que cada vocal es una imagen
en blanco y negro de un tamaño fijo. El objetivo es desarrollar una herramienta de
Aprendizaje Automático que, tras un proceso de entrenamiento, sea capaz de tomar
una imagen nueva correspondiente a una vocal e identificar de que vocal se trata.
En particular el trabajo consiste en desarrollar los siguientes objetivos.
Objetivo general: Implementar en CLIPS el algoritmo de retropropagación en
una red neuronal multicapa que permita el reconocimiento de imágenes de vocales
manuscritas.
Objetivos especı́ficos: El desarrollo de trabajo consiste en llevar a cabo los siguientes objetivos evaluables.
(a) Generar un conjunto de entrenamiento. Cada elemento del conjunto de entrenamiento debe ser una imagen en dos colores (blanco y negro) de 30 × 30 pı́xeles en
formato PGM (Portable Graymap Format). Un fichero PGM contiene texto plano
que puede ser modificado por un procesador de texto, pero que a su vez, puede
ser interpretado por un visor de imágenes. Por ejemplo, la figura 1 representa la
vocal a escrita a mano en uma imagen de 30 × 30 pı́xeles. El fichero PGM de esa
imagen es letra a.pgm, que se proporciona con este enunciado.
El alumno debe proporcionar un conjunto de ficheros con extensión pgm y nombre
un número de 1 hasta N, esto es, 1.pgm, 2.pgm, 3 .pgm, . . . , N.pgm. Cada uno de
estos ejemplos debe contener una vocal escrita a mano. El número de ejemplos
queda a elección del alumno, pero debe ser suficiente para realizar un proceso de
aprendizaje.
Figura 1: Letra a manuscrita en una imagen de 30 × 30 pı́xeles
1
(b) Crear un fichero ejemplos.clp donde guardaremos un conjunto de hechos
deffacts ejemplos con la sintaxis de CLIPS de manera que crearemos un hecho
por cada uno de los ejemplos. Cada ejemplo tendrá 3 atributos:
• El identificador: Los ejemplos estarán numerados y el identificador será el
número asociado ese ejemplo. Cada ejemplo debe tener como identificador
el nombre del fichero pgm que contiene la imagen.
• La clasificación: Será un multislot donde guardaremos la clasificación correspondiente para cada imagen. Esta clasificación sólo puede ser de cinco
tipos:
◦
◦
◦
◦
◦
(1
(0
(0
(0
(0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0)
0)
0)
0)
1)
para
para
para
para
para
representar
representar
representar
representar
representar
la
la
la
la
la
vocal
vocal
vocal
vocal
vocal
a.
e.
i.
o.
u.
• Los pı́xeles: Será una sucesión de 0 y 1 tomada del correspondiente fichero
PGM, donde el valor 255 se ha sustituido por 1.
Para unificar la notación, la representación CLIPS seguirá la siguiente plantilla:
(deftemplate ejemplo
(slot identificador (type NUMBER))
(multislot clasificacion (allowed-numbers 0 1))
(multislot pixeles (allowed-numbers 0 1)))
Se proporciona un fichero ejemplos.clp que contiene esta plantilla y un ejemplo
de deffacts. En este caso el conjunto de hechos contiene un único ejemplo, que
corresponde a la imagen de la figura 1, letra a.pgm.
(c) Crear un fichero red.clp donde se implemente en CLIPS el algoritmo de retropropagación para redes neuronames multicapa visto en el Tema 3. La arquitectura
de la red queda a la elección del alumno, pero debe tener 900 neuronas en la capa
de entrada, para poder recibir como entrada la codificación de una imagen de
30 × 30 pı́xeles. La capa de salida debe tener 5 neuronas.
El fichero red.clp debe constar de cuatro partes:
1. En la primera parte debe aparecer como comentario dentro del fichero CLIPS
y debe ser una breve descripción de la arquitectura de la red y del sistema
de representación utilizado.
2. La segunda parte debe contener un deffacts pesos con los valores de los
pesos iniciales. Estos no deben generarse aleatoriamente, sino que deben ser
proporcionados en el fichero en un conjunto de hechos pesos y poder ser
modificados para estudiar distintos comportamientos del sistema.
3. De manera análoga, la tercera parte debe contener un deffacts factor,
donde debe especificarse el valor del factor de aprendizaje.
4. La cuarta parte contiene el desarrollo del programa que implementa el algoritmo.
2
Una vez entrenada la red diremos que esta clasifica una imagen como la vocal “x”
si la neurona de la capa de salida que asociamos a la vocal “x” es la que devuelve
un valor más alto.
Los ficheros ejemplos.clp y red.clp deben cargarse juntos para tener toda la información necesaria para poder realizar el aprendizaje. La ejecución del programa
en este punto debe modificar el conjunto de pesos hasta que la red esté entrenada
según algún criterio de parada, que debe especificarse. Este criterio queda a la
elección del alumno. El sistema debe informar al usuario de que ha terminado el
algoritmo y por tanto el entrenmiento de la red
El uso en CLIPS debe ser el siguiente:
CLIPS> (load "ejemplos.clp")
Defining deftemplate: ejemplo
Defining deffacts: ejemplos
TRUE
CLIPS> (load "red.clp")
Defining deffacts: pesos
Defining deffacts: factor
Defining ...
CLIPS> (reset)
CLIPS> (run)
El entrenamiento ha concluido
Por último, el alumno debe proporcionar un segundo conjunto de ejemplos
t1.pgm, t2.pgm, . . . , tr.pgm, con r ejemplos distintos a los que se han usado
en el conjunto de entrenamiento, para medir el rendimiento de la red una vez
entrenada. Además de los ficheros pgm el alumno debe proporcionar un fichero
ejemplos test.clp. Este fichero tendrá la siguiente sintaxis:
(assert ejemplo t1 ejemplo t2 ejemplo t3 . . . ejemplo tr)
donde cada ejemplo ti tendrá la misma sintaxis que se ha usado para representar
los ejemplos del fichero ejemplos.clp.
Una vez entrenada la red, leeremos este nuevo fichero mediante la instrucción
CLIPS>(batch ‘‘ejemplos test.clp’’)
Una nueva ejecución del programa (run) comprobará si los ejemplos de
ejemplos test.clp se clasifican correctamente o no. Una vez finalizada la comprobación de todos los ejemplos de este fichero de prueba, el sistema debe informar
al usuario del porcentaje de ejemplos del fichero de prueba que han sido correctamente clasificados. El proceso completo de CLIPS es el siguiente (el porcentaje
es orientativo):
CLIPS> (load "ejemplos.clp")
Defining deftemplate: ejemplo
Defining deffacts: ejemplos
3
TRUE
CLIPS> (load "red.clp")
Defining deffacts: pesos
Defining deffacts: factor
Defining ...
TRUE
CLIPS> (reset)
CLIPS> (run)
El entrenamiento ha concluido
CLIPS> (batch "ejemplos_test.clp")
TRUE
CLIPS> (assert ...)
...
CLIPS> (run)
El porcentje de ejemplos correctamente clasificados es 87.5
CLIPS>
Evaluación
El alumno debe entregar un fichero comprimido .zip. Dicho fichero debe contener
Una carpeta ejemplos que contenga los ficheros con las imágnenes en formato
PGM que se usarán para el entrenamiento de la red.
Una carpeta ejemplos test que contenga los ficheros con las imágnenes en formato PGM que se usarán para medir el rendimiento de la red una vez entrenada.
Los ficheros ejemplos.clp, red.clp y ejemplos test.clp antes descritos.
Para la evaluación se valorará:
Corrección y eficiencia de la implementación.
Claridad y buen estilo de programación CLIPS.
Documentación del trabajo realizado (que debe aparecer como comentario del
fichero red.clp).
Exposición y defensa del trabajo.
4
Descargar