8 de octubre de 2012

Proyecto de Redes Neuronales

Redes Neuronales Artificiales
Presentación Intermedia: Reporte y Programa

Este es el reporte de medio curso para la materia de Redes Neuronales Artificiales, en la cual estoy trabajando en el proyecto de Reconocimiento de Personas Mediante Voz, en conjunto con mis compañeros Cecilia Urbina y Roberto Martínez.

El objetivo del proyecto es que al final del semestre tengamos un sistema funcional que permita identificar si un usuario es el correcto o no, mediante su voz. Esto dentro de un sistema que muestre una ventana y que de un texto que tendrá que ser leído por la persona que intenta autentificarse, el audio es captado y analizado, y crea una entrada de datos a la red neuronal la cual se encargara de decir en su salida si el usuario fue identificado o no, y mostrar el resultado finalmente mediante una ventana.

Trabajo grupal


En la siguiente captura se muestran los commits realizados desde la semana en que conformamos el equipo, y con esto podemos crear evidencia del trabajo realizado. En base a esto explicaré que fue lo que se ha hecho en conjunto y lo que yo he hecho.



En las primeras semanas se trabajo conforme a lo que íbamos viendo en clase, que trataba de crear el programa que recibía desde línea de comandos entradas binarias, para el vector de entradas y creábamos el vector de pesos aleatorio. La modificación del primer código fue en base a lo que Cecilia trabajo en hacer una clase especial para lo que en un futuro sería la neurona simple.

Luego tuvimos algunas sesiones en las que trabajamos en conjunto en cuanto al aprendizaje de la neurona, hasta este momento no teníamos alguna forma de comprobar si lo que estábamos haciendo estaba bien o no. El código modificado fue subido en un commit mostrado con el nombre Equipo, para mostrar que ahí trabajamos todos.

En las semanas pasadas dividimos el trabajo para poder avanzar un poco más, entonces Cecilia se encargó de empezar con la interfaz de entrada y el pre-procesamiento del audio, yo me encargué de continuar con el código de la neurona, hacer que aprendiera y verificar que estaba funcionando como debería, Roberto se encargó de agregar el uso de Tkinter para poder visualizar el aprendizaje de la neurona, y la ventana que arrojará el sistema cuando lo demás este completo.

Código relevante


Los siguientes códigos son solo una fracción del código completo, para mostrar algunas partes elementales.

En la siguiente sección mostrada, es parte del código del programa generador, en este caso ya que nos enfocamos un poco para solo dos dimensiones, cuando se pide al programa que genere un numero de muestras para un vector de entrada de dos dimensiones con su salida esperada, este las crea y guarda en un archivo. Para poder determinar la salida se hace una comparación, pero para evitar que sea algo que siempre de el mismo resultado coloque dos variables de ruido esto con el fin de que la salida esperada de los vectores de entrada no siempre cree la misma gráfica dividida transversalmente.


La siguiente parte es solo la muestra resumida de lo que hace el código al mandarle los datos de entrada a la neurona y las operaciones que hace, para cuando modifique el código que habíamos trabajado en equipo esta parte sufrió grandes cambios ya que anteriormente no se había tomado en cuenta el umbral dentro del vector de pesos.


Aportes


En seguida concretizo el trabajo que realicé, en unas cuantas líneas:
  • Reestructurar el código de la clase Neurona.
  • Cambiar la entrada de datos a números flotantes.
  • Modificar la entrada manual de datos a la lectura de un archivo.
  • Corrección del método de aprendizaje.
  • Conteo de errores cuando se mantiene esta activo el método de aprendizaje.
  • Graficar la salida correcta de los datos creados por el generador con Gnuplot.
  • Graficar los datos obtenidos después del aprendizaje con la neurona.
  • Mejora del código después del agregado de visualización con Tkinter.
  • Corrección de bugs después del agregado de visualización.

Gráficas generadas con Gnuplot


Gráfica generada con los datos tal y como los crea el generador, esto sirve de referencia para saber si lo que la neurona hará tiene una salida semejante que divida las dos clases tal y como en la imagen.


Tomando los datos generados desde la neurona, podemos ver los puntos con salida esperada 0 y los puntos con salida esperada 1, y estos con un contorno de color verde cuando al momento de comparar la activación con cero, el resultado no dío igual que el esperado, y al final se pinta la línea creada con los datos arrojados por el vector de pesos.


Vídeo demostración


El siguiente vídeo muestra el funcionamiento de la neurona ya con interfaz gráfica con Tkinter y después de las correcciones aplicadas.

En el vídeo se muestra una terminal donde se ejecuta el programa generador de los vectores de entrada y su salida esperada, y luego se usan los archivos generados para correr el programa de la neurona, que inicia un proceso de aprendizaje, modificando el vector de pesos, para llegar a separar en dos clases los puntos con salida esperada 0 y los puntos con salida esperada 1.


Presentación en equipo


Integrantes del equipo:



1 comentario:

Nota: solo los miembros de este blog pueden publicar comentarios.