lunes, 8 de octubre de 2012

Reporte de Redes Neuronales: Medio Curso.

Como reporte de medio curso de la materia de Redes Neuronales Artificiales de la Dra. Elisa Schaeffer en el semestre Ago-Dic 2012, voy a exponer en lo que he colaborado en el equipo de Speaker Recognition System, en donde básicamente lo que estamos implementando es una red neuronal que pueda clasificar entre si es una persona, o no en base a su voz, validando mediante una serie de pasos y entrenando la red neuronal para poder saber si esta persona es la que está utilizando el sistema, para posteriormente realizar algún otro tipo de acción, en este caso estamos solamente trabajando de lado de la validación.

Este es el Repositorio de nuestro proyecto.

En las primeras semanas de la materia, estuvimos viendo teoría básica para poder empezar a programar una red neuronal, por lo que en la primera parte del proyecto pude contribuir en crear una primera versión de una neurona binaria simple, la cual documento en este post. Link, en donde utilizo el modulo numpy para multiplicar y generar los vectores para multiplicarlos y simplemente nos da la salida 0-1, en base a este programa pequeño script que hice en python pudimos empezar a programar nuestro primer programa agregando una funcionalidad de orientado a objetos, en colaboración con todo el equipo.


Después estuve desarrollando la interfaz, que obtendrá el usuario al momento de saber si es o no la persona que está hablando, es muy sencilla y simplemente estamos desplegando dicha información.





Esta sería la interfaz de salida que tendría el usuario con unos script sencillos, que están listos para integrarse al prototipo final en donde utilicé TK con python y desplegamos si la persona es identificada o no.


Después, trabajé en base a lo que estuvimos haciendo en equipo, desarrollando la neurona y moldelandola para recibiera como entrada valores no únicamente binarios, trabajando con el programa que realicé en la clase para generar los valores se necesitan y empecé a programar utilizando el módulo de tk de python, la interfaz gráfica de respuesta al usuario, al igual que la animación del comportamiento de la red neuronal, por lo que en la mayor parte del proyecto estuve trabajando en dichas interfaces de observación de la neurona y las del usuario de salida.


Para crear la interfaz para la observación del comportamiento de la neurona, utilicé la libreria tk de python en donde primero generé una ventana de 1000 pixeles x 1000 pixeles, programé un script en el cual pudiéramos obtener valores de -1:1 y tenerlos en sus planos correspondientes, por lo que dividí la ventana de manera que tuviéramos un plano de cuatro partes, en donde en la parte superior derecha tengamos los valores positivos de estos números, luego en la parte superior izquierda los valores negativos respecto al eje x y los valores positivos respecto al eje y, la parte inferior derecha los valores prositivos respecto al eje x y los valores negativos respecto al eje y, y en la parte inferior izquierda los valores negativos respecto a ambos ejes, por lo que por medio de la fórmula (1-x)*500, donde x es el número de entrada a neurona dado -1:1 y el menos uno para controlar la posición de pixeles, por lo que de esta manera podemos posicionar los elementos de manera correcta.


En la versión entregable, nuestros valores de entrada que tomamos de parámetros para nuestra primera versión, utilizamos valores de 0:1 por lo que ahora, tomé los valores directamente y los he multiplicado por el numero de pixeles para poderlos posicionar, en lo cual me he basado para poder unir mi script con el script de la neurona, en donde tenemos la siguiente simbología en la imagen de la derecha.


Como podemos ver en el siguiente video que he subido a youtube, ésta es la interfaz de observación del comportamiento de la neurona en base a como va corriendo nuestro script.





Obteniendo como resultado:



Este sería mi reporte de la materia de redes neuronales para el medio curso, si tienen alguna duda acerca de lo que se está haciendo con el proyecto, pueden dejar un comentario en el blog, esperamos que para final de semestre tengamos todo esto en conjunto y funcional.


Por último muestro las diapostivas grupales, en donde exponemos el avance en equipo:

Gracias

1 comentario: