Estado del proyecto

diciembre 17, 2008

He pensado que sería interesante publicar cada cierto tiempo, una entrada donde se describa el estado actual del proyecto, con la finalidad de que los usuarios puedan seguir el desarrollo de éste.

Actualmente se está revisando los comentarios leídos por Doxygen para generar el manual de referencia, por esta razón todavía no se ha publicado éste. Espero terminar dicha revisión y publicar el manual esta misma semana.

Un saludo a todos.

Código subido a la forja

diciembre 11, 2008

Buenas a todos, por fin he subido el código de Libgann a la forja. Libgann estaba siendo desarrollada en un repositorio local, así que le solicité a la administración que me subiera el repositorio a RedIris, al día siguiente ya estaba hecho, desde aquí les agradezco su celeridad.

https://forja.rediris.es/projects/cusl3-libgann/

En el repositorio SVN solo se han subido los ficheros fuentes, por tanto para construir la biblioteca es necesario ejecutar autoreconf.

Espero que os guste el proyecto.

Video de calculadora RPN implementada sobre Libgann

diciembre 4, 2008

Las redes neuronales artificiales tienen multitud de aplicaciones, en este caso las hemos usado para implementar una calculadora que acepta dígitos y operadores manuscritos. La aplicación ha sido construida sobre Libgann y utiliza una interfaz gráfica SDL.

Libgann permite crear y manipular redes neuronales de forma muy fácil, tal es así, que esta aplicación ha sido desarrollada en menos de 500 lineas de código C++/C, incluyendo:

  • Interfaz gráfica
  • Proceso de creación de patrones
  • Entrenamiento de la red

La aplicación utiliza para reconocer dígitos y operadores un Multiperceptron cuya función de activación es la sigmoidal. La red tiene tres capas con la siguiente configuración:

  • Primera capa: 64 neuronas
  • Segunda capa: 30 neuronas
  • Tercera capa: 14 neuronas

El número de neuronas de entrada está justificado por el numero de pixeles del display. El display tiene una resolución de 32×32, lo que equivale a 1024 pixeles, de forma que podriamos haber usado una red cuyo número de neuronas en la capa de entrada fuera de 1024, no obstante, esto supone una red demasiado grande. Para solucionar este problema, agrupamos los pixeles en grupos de 4×4, de forma que cada uno de estos grupos tuviera una representación en una matriz de 8×8 asociada al display, en la cual, cada posicion contuviera el número de pixeles dibujados de blanco del grupo, por lo tanto cada elemento de esta matriz tomaría valores en el intervalo [0,16]. Esta matriz es con la que trabaja la red neuronal, no obstante, antes de serle pasada como parámetro, normalizamos los valores que contiene en el intervalo [0,1].

El entrenamiento que hemos realizado ha sido Backpropagation con la regla del momento, con los siguientes valores:

  • Factor de aprendizaje: 0,85
  • Momento: 0.3
  • Número de epocas: 1000

Para entrenar a la red usamos un conjunto de 5352 patrones de entrenamiento de los cuales 1529 correspondían a operadores y el resto a dígitos, para el testeo usamos 2514 patrones, en este caso 717 eran operadores y el resto dígitos. Los patrones de entrenamiento y testeo correspondientes a los dígitos los obtuvimos de la pagina:

http://archive.ics.uci.edu/ml/

Los patrones de los operadores los construimos manualmente a través una modificación de la propia calculadora.

Espero que os haya gustado, y por favor hacerme llegar vuestras opiniones.

Imagen de la red de Jordan generada por Libgann

diciembre 2, 2008
Red de Jordan

Red de Jordan

Imagen de Multiperceptron generada por Libgann

diciembre 2, 2008
Multiperceptron

Multiperceptron

Imagen de la red de Hopfield generada por Libgann

diciembre 2, 2008
Red de Hopfield

Red de Hopfield