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.
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.
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: