Está en la página 1de 214

ESCUELA SUPERIOR DE INGENIERA

INGENIERO TCNICO EN INFORMTICA DE GESTIN

LIBGANN: BIBLIOTECA DE REDES NEURONALES ARTIFICIALES

Francisco Javier Vzquez Pa

16 de febrero de 2009

ESCUELA SUPERIOR DE INGENIERA

INGENIERO TCNICO EN INFORMTICA DE GESTIN

LIBGANN: BIBLIOTECA DE REDES NEURONALES ARTIFICIALES

Departamento: Lengua jes y sistemas informticos Director del proyecto: Francisco Palomo Lozano Autor del proyecto: Francisco Javier Vzquez Pa

San Fernando, 16 de febrero de 2009

Fdo: Francisco Javier Vzquez Pa

Copyright

2008 Francisco Javier Vzquez Pa.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.

ndice general
ndice general ndice de guras ndice de cuadros 1 Introduccin
1.1. 1.2. 1.3. Libgann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caractersticas Objetivos, mejoras y ampliaciones de Libgann . . . . . . . . . .

v vi vii

1
1 2 3

2 Especicacin de requisitos software


2.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. 2.1.2. 2.2. 2.3. 2.2.1. 2.3.1. 2.3.2. 2.3.3. 2.3.4. Objetivos Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5
5 5 5 5 5 6 6 6 7 7 7 7 8

Descripcin general . . . . . . . . . . . . . . . . . . . . . . . . . Caractersticas de los usuarios . . . . . . . . . . . . . . . Requisitos de interfaces externas Requisitos funcionales . . . . . . . . . . . . . Requisitos especcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Requisitos de rendimiento . . . . . . . . . . . . . . . . . Atributos del sistema software 2.3.4.1. 2.3.4.2. 2.3.4.3. Fiabilidad . . . . . . . . . . . . . . . . . . . . . Mantenibilidad y Escalabilidad . . . . . . . . . Portabilidad . . . . . . . . . . . . . . . . . . .

3 Anlisis, Diseo e Implementacin


3.1. 3.2. 3.3. 3.4. 3.5. Primera fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Segunda fase Cuarta fase Quinta fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tercera fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9
9 12 13 15 17

4 Redes neuronales
v

19

vi

ndice general
4.1. 4.2. 4.3. Qu son las redes neuronales articiales? Fundamentos biolgicos 4.3.1. 4.3.2. . . . . . . . . . . . . 19 19 21 21 23 23 25

. . . . . . . . . . . . . . . . . . . . . .

Modelo computacional . . . . . . . . . . . . . . . . . . . . . . . Neurona articial . . . . . . . . . . . . . . . . . . . . . . Redes Neuronales . . . . . . . . . . . . . . . . . . . . . . 4.3.2.1. 4.3.2.2. Topologa . . . . . . . . . . . . . . . . . . . . . Aprendizaje . . . . . . . . . . . . . . . . . . .

5 Modelos de Redes Neuronales


5.1. 5.2. Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Multiperceptron 5.2.1. 5.2.2. 5.3. 5.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Backpropagation

29
29 34 35 42 42 45 45 46 46 49 49 50 51

Inclusin del momento en la regla de aprendizaje . . . . Aprendizaje de las redes neuronales de base radial 5.3.1.1. 5.3.1.2. . . .

Redes neuronales de base radial . . . . . . . . . . . . . . . . . . Fase no supervisada . . . . . . . . . . . . . . . Fase supervisada . . . . . . . . . . . . . . . . .

5.4. 5.5.

Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hopeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1. 5.5.2. 5.5.3. Fase de funcionamiento . . . . . . . . . . . . . . . . . . Fase de entrenamiento . . . . . . . . . . . . . . . . . . . Limitaciones de la red Hopeld . . . . . . . . . . . . . .

6 Grafos
6.1. 6.2. 6.3. 6.4. 6.5. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Deniciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ordenacin Topolgica . . . . . . . . . . . . . . . . . . . . . . . Ordenacin Topolgica Parcial . . . . . . . . . . . . . . . . . . Algoritmo online para la Ordenacin Topolgica Parcial de grafos dirigidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.1. 6.5.2. Representacin . . . . . . . . . . . . . . . . . . . . . . . Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.2.1. 6.5.2.2. 6.5.2.3. 6.5.2.4. 6.6. Aadir un elemento a Aadir un elemento a

53
53 53 56 57 58 59 60 61 61 63 64 64

V A

. . . . . . . . . . . . . . . . . . . . . . . . . .

Eliminar un elemento a Eliminar un elemento a

A V

. . . . . . . . . . . . . . . . . . . . . . . .

Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7 Herramientas utilizadas
7.1. GNU Build System . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1. 7.1.2. 7.1.3. 7.2. Autoconf Libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Automake . . . . . . . . . . . . . . . . . . . . . . . . . .

69
69 70 70 70 70

Doxygen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ndice general
7.3. 7.4. 7.5. SVN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Graphviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Libxml++-2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . .

vii

71 71 72

A Manual de instalacin B Tutorial


B.1. Ejemplo

73 75
75

xor .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

C Manual de referencia D GNU Free Documentation License Bibliografa

83 193 203

ndice de guras
3.1. 3.2. 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. 5.9. Diseo de la estructura de clases en Libgann. . . . . . . . . . . . . 13 17 20 22 23 23 24 24 25 26 29 30 31 32 33 34 34 35 37 38 43 47 50 54 54 56 57 58 59 59 60 Jerarqua de excepciones de Libgann. . . . . . . . . . . . . . . . . . Neurona biolgica. Neurona articial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Representacin grca de la funcin escaln. . . . . . . . . . . . . . Representacin grca de la funcin sigmoidal. Red neuronal articial. . . . . . . . . . . . . . . . . . . . . . . . . . Red neuronal monocapa. . . . . . . . . . . . . . . . . . . . . . . . . Red neuronal multicapa. . . . . . . . . . . . . . . . . . . . . . . . . Red neuronal multicapa con conexiones hacia atrs. Perceptron. . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Varios Perceptrones en la misma capa. . . . . . . . . . . . . . . . . Ejemplo de Perceptron. Representacin grca de la clasicacin de un Perceptron. Regiones denidas por los Perceptrones P1 y P2.

Red de Perceptrones con dos capas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regiones denidas por la red de Perceptrones. . . . . . . . . . . . . Representacin grca de la funcin tangente hiperblica. Neurona

5.10. Neurona

j j

perteneciente a la capa perteneciente a la capa

C. . . . C 1.

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.11. Red neuronal de base radial. . . . . . . . . . . . . . . . . . . . . . . 5.12. Red neuronal de Jordan. . . . . . . . . . . . . . . . . . . . . . . . . 5.13. Ejemplo de red de Hopeld. . . . . . . . . . . . . . . . . . . . . . . 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. Representacin grca de un grafo dirigido. . . . . . . . . . . . . . . . . . . . . . . . .

Representacin grca de un grafo no dirigido. Grafo dirigido cclico. Grafo dirigido cclico.

Grafo dirigido acclico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Representacin grca de la Grafo dirigido cclico.

OT.

. . . . . . . . . . . . . . . . . . .

Posible representacin grca de la

OTP.

. . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

viii

ndice de guras
6.9. Representacin grca de la

ix

OTP.

. . . . . . . . . . . . . . . . . .

60 62 62 63 66 68

6.10. Insercin de una arista con orientacin no vlida. . . . . . . . . . . 6.11. Regin afectada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.12. Ubicacin de los diferentes tipos de componentes conexas. . . . . . 6.13. Lista de adyacencia tradicional. . . . . . . . . . . . . . . . . . . . . 6.14. Lista de adyacencia elegida. . . . . . . . . . . . . . . . . . . . . . .

ndice de cuadros
5.1. 5.2. Representacin de clases con varios Perceptrones. . . . . . . . . . . Patrones de entrada para un Perceptron de dos entradas. . . . . . 31 32

Captulo 1

Introduccin
1.1. Libgann

Libgann es una biblioteca de redes neuronales articiales (RNA), construida bajo licencia GPL haciendo uso del lenguaje de programacin C++. Debido a las caractersticas que denen a este lenguaje, unido a un estudio de los aspectos que tienen en comn los distintos modelos de RNA, se ha conseguido una biblioteca de fcil uso y una gran expansibilidad, que mantiene un estricto compromiso entre claridad y eciencia. Libgann no nace como un proyecto n de carrera, fue ideada en 2005 como una forma de introducirme en las RNA, no obstante, despus de invertir un cierto tiempo en el diseo de la biblioteca, me pareca cada vez un proyecto ms interesante, en el cual, podra aplicar muchas tecnologas y conocimientos hasta entonces adquiridos, y lo que es ms importante, aprender muchas cosas nuevas, esto unido a la graticacin personal que ofrece el desarrollo de software libre, han hecho a este servidor un entusiasta de este proyecto, tanto es as, que al igual que Libgann no naci como un proyecto n de carrera, tampoco morir como tal, para conseguir esto, ser presentado en internet a diversos colectivos, con el n de captar desarrolladores que estn dispuestos a colaborar en el proyecto. En el mbito de las RNA es crucial la eciencia, hasta tal punto, que muchas aplicaciones no pueden permitirse la carga extra que supone usar una biblioteca de RNA. Este tipo de aplicaciones implementan una red neuronal especca que les permite obtener una rpida ejecucin, no obstante, existe un proceso previo en el que se busca la red y los parmetros que ms se adecan a un uso determinado. En este proceso, es donde adquieren importancia las bibliotecas de RNA, y es donde se enmarca nuestro proyecto. 1

CAPTULO 1. INTRODUCCIN

1.2. Caractersticas
Libgann no es la primera biblioteca de RNA creada como software libre, no obstante tiene caractersticas que la identican, entre otras podemos destacar:

Una jerarqua de clases que permite implementar nuevos modelos de RNA sin que se convierta en una tarea ardua, esto dota al proyecto de una gran escalabilidad. La biblioteca soporta RNA dinmicas, es decir, podemos aadir neuronas e incluso capas a una red ya existente, sin tener que reconstruir de nuevo sta. El uso de la STL ( tandard

Template Library), ha facilitado mucho la

implementacin y aporta mucha claridad al cdigo, esto unido a la gran eciencia con la que cuenta, hacen que el uso de sta fuera casi obligado. Es un requisito indispensable que todos los modelos de RNA puedan ser salvados y recuperados. Para llevar a cabo esta tarea, hemos usado la tecnologa XML. Cuando guardamos una RNA en un chero, lo haremos usando el formato XML, especicando en ste un DTD, que permitir validar posteriormente dicho chero. Por otro lado, al cargar una red previamente guardada por la biblioteca u otra aplicacin exterior, validaremos el documento XML donde sta est especicada. Este mismo mecanismo es usado para el salvado y recuperado de patrones. Implementa mtodos para visualizar las RNA construidas, dando as un carcter pedaggico a la biblioteca. Las representaciones grcas de las redes neuronales tienen una gran calidad, esto se debe al uso de GraphViz. La biblioteca hace uso del mecanismo de las excepciones, para ello se ha denido una jerarqua de clases que representan los distintos errores producidos por los usuarios al utilizar Libgann. Libgann implementa un mecanismo muy eciente para la generacin de patrones. El proyecto sigue el GNU Build System, para ello se han usado herramientas como: Autoconf, Automake y Libtool. Estas herramientas dotan al proyecto de portabilidad, adems con ellas se consigue una interfaz comn para la construccin e instalacin de todos aquellos programas que las usen, siendo utilizadas por la mayora de proyectos de software libre.

1.3. OBJETIVOS, MEJORAS Y AMPLIACIONES DE LIBGANN

1.3. Objetivos, mejoras y ampliaciones de Libgann


El principal objetivo es consolidar a Libgann como una opcin a tener en cuenta para: Construir proyectos que usen RNA Buscar la arquitectura y parmetros ptimos de una RNA para un uso especco. Impartir clases de IA. Debido a la corta edad de Libgann, sta es susceptible a innidad de mejoras y ampliaciones, entre ellas podemos destacar: Implementacin de nuevos modelos de RNA. Ampliacin y optimizacin de los modelos ya existentes. Validacin de los cheros a travs de XSD en vez de con DTD, ya que el primero permite denir tipos de datos. Implementar el soporte para la compresin de los cheros XML, ya que estos cheros pueden llegar a ocupar mucho tamao. Crear mtodos para salvar las RNA que solo guarden informacin parcial de stas, con el n de ahorrar espacio y dar exibilidad a la biblioteca. Supongamos que solo nos interesa guardar el modelo y arquitectura de una red, por qu tenemos que guardar los pesos de las conexiones?, lo lgico sera que guardsemos la informacin deseada, y la biblioteca tuviera la capacidad de cargar la red, a partir de esta informacin. Libgann est implementada en C++ y hace uso de la STL, esto lleva a que la biblioteca sea bastante eciente, no obstante, el dinamismo y la genericidad que caracterizan a la biblioteca, suponen una carga adicional de tiempo, lo cual es asumible ya que, como comentbamos al inicio de este captulo, Libgann se enmarca en un contexto, en el cual, se busca un modelo y arquitectura de red para resolver un problema especco. Una vez hallados, en caso de necesitar una eciencia extrema, podramos crear una red neuronal esttica optimizada con estos parmetros, lo cual nos llevara a obtener las ventajas del dinamismo y la amabilidad de la interfaz con la eciencia de una implementacin ms esttica. No obstante, la tarea de construir esa RNA optimizada puede ser muy tediosa, por ello sera muy deseable que fuera automatizada. Para abordar semejante tarea, podramos usar algn otro proyecto ya existente, el cual busque la mayor eciencia posible en sus redes neuronales.

CAPTULO 1. INTRODUCCIN
Adems de estas mejoras, existen otros proyectos que se complementaran

muy bien con Libgann, como pueden ser: La construccin de un simulador de RNA que provea una interfaz grca con la que los usuarios puedan interactuar. La creacin de un sistema que permita el entrenamiento de mltiples RNA al mismo tiempo, haciendo uso de mltiples hilos de ejecucin, necesarios para que el sistema sea explotado en un supercomputador. La principal funcin de este sistema sera buscar la arquitectura y parmetros de la RNA que ms se adecan a un uso especco. Para entender mejor la idea, supongamos que estamos buscando una red para el reconocimiento visual de seales de trco, el sistema lanzara ejecucin, en los cuales se ejecutaran el entrenamiento de

N hilos de N redes di-

ferentes al mismo tiempo. Cada entrenamiento se llevara a cabo en un procesador diferente, explotando as el paralelismo de la mquina donde se ejecuta. El sistema en un momento determinado, inspecciona como va el entrenamiento de las diferentes redes, de forma que sustituye aquellas que estn dando peores resultados por otras nuevas, las cuales pueden provenir de pequeas variaciones de las redes que estn dando mejores resultados hasta el momento, o por el contrario, ser totalmente diferentes a todas las existentes, buscando as otros caminos para encontrar la mejor red neuronal posible.

Captulo 2

Especicacin de requisitos software


La especicacin de requisitos que realizaremos a continuacin se basa en el estndar de Especicacin de Requisitos Software de la IEEE [21].

2.1. Introduccin
2.1.1. Objetivos
Los objetivos de esta especicacin son, establecer los requisitos funcionales de la biblioteca y jar los atributos buscados en el proyecto (portabilidad, abilidad, mantenibilidad, escalabilidad,...).

2.1.2. Alcance
El propsito de este proyecto es la creacin de una biblioteca de RNA implementada en C++ con licencia GPL. El nombre que le hemos dado a la biblioteca es Libgann (

Neural Network).

Generic Articial

La biblioteca implementar mltiples modelos de RNA, que podremos usar a travs de una clara interfaz. Libgann pretende ser una buena herramienta a la hora de realizar aplicaciones relacionadas con RNA.

2.2. Descripcin general


2.2.1. Caractersticas de los usuarios
Libgann puede ser usada por diversos tipos de usuarios, desde personas que se estn introduciendo en el mundo de las RNA, hasta personas con conocimientos avanzados en stas. No obstante, al estar implementada en C++, las 5

CAPTULO 2. ESPECIFICACIN DE REQUISITOS SOFTWARE

personas que quieran hacer uso de la biblioteca, debern tener conocimientos de dicho lenguaje.

2.3. Requisitos especcos


2.3.1. Requisitos de interfaces externas
Libgann permitir guardar y cargar instancias de RNA, dichas instancias sern guardadas en cheros con formato XML, de forma que cada modelo de red tendr un DTD asociado que denir la estructura del chero XML. Del mismo modo los patrones tambin podrn ser guardados y cargados haciendo uso de la tecnologa XML, y al igual que con los modelos de RNA, existir un DTD que denir la estructura de estos cheros.

2.3.2. Requisitos funcionales


La biblioteca permitir la creacin de diversos modelos de RNA. Entre ellos podemos encontrar:

Multiperceptron Red de base radial Red de Jordan Red de Hopeld

Todos los modelos de RNA implementarn mtodos para ser inicializados una vez construidos. Los diferentes modelos implementados actualizarn sus salidas de forma asncrona, tal que para obtener la salida asociada a un valor de entrada, deberemos de seguir los siguientes pasos: 1. Introducimos un valor en la RNA. 2. Propagamos el valor por la RNA. 3. Obtenemos la salida. Los modelos supervisados de RNA implementados en Libgann, tendrn dos tipos de funciones de entrenamiento, unas cuya condicin de parada viene determinada por un nmero de pocas y otras cuya condicin de parada est determinada por un error mnimo que la red debe cumplir. Toda RNA implementada en Libgann, tendr un mtodo que permitir validar si un conjunto de patrones de entrenamiento son compatibles con su arquitectura.

2.3. REQUISITOS ESPECFICOS

Ser posible obtener una representacin grca de cada modelo de RNA. Los diferentes modelos de RNA podrn ser guardados para posteriormente ser cargados. Ser posible realizar el entrenamiento de una RNA por etapas, de forma, que si entrenamos una red durante mil pocas, podremos partir del estado de sta para realizar nuevos entrenamientos. Podremos implementar modelos de RNA en los cuales todas las neuronas no compartan la misma funcin de activacin. La biblioteca deber proveer un mecanismo eciente para la creacin de patrones. Libgann deber permitir una fcil implementacin de nuevos modelos de RNA. Libgann har uso del mecanismo de las excepciones. Los modelos de RNA implementados, nos permitirn insertar y eliminar neuronas dinmicamente

2.3.3. Requisitos de rendimiento


Las RNA requieren grandes cantidades de tiempo y espacio, por tanto deberemos optimizar lo mximo posible los algoritmos y estructuras que usemos.

2.3.4. Atributos del sistema software


2.3.4.1. Fiabilidad
Las implementaciones de RNA son muy difciles de depurar, de forma que si un algoritmo no est bien diseado, puede causar que la red neuronal no funcione como debera, con lo cual el usuario de la biblioteca no sabra si lo que falla es su aplicacin o la propia biblioteca, por ello, este tipo de bibliotecas debe dar mxima abilidad, ya que en caso de fallo, es posible que ste no se manieste cerrando abruptamente el programa, sino modicando el comportamiento deseado para la RNA.

2.3.4.2. Mantenibilidad y Escalabilidad


Estos son dos atributos importantsimos en una biblioteca. Para que una biblioteca llegue a ser usada por un nmero importante de usuarios, esta debe proveer una gran funcionalidad, esto se consigue con el desarrollo conjunto de un grupo de desarrolladores, siempre y cuando la biblioteca sea escalable. Una vez que la biblioteca ha crecido, ser necesario que sta sea fcilmente

CAPTULO 2. ESPECIFICACIN DE REQUISITOS SOFTWARE

mantenible, ya que de no ser as, surgiran problemas que derrumbaran la imagen del proyecto.

2.3.4.3. Portabilidad
La portabilidad es un aspecto crucial hoy en da, ya que cuanto mayor sea el nmero de sistemas en los que un proyecto se puede usar, mayor ser el nmero de posibles usuarios, por este motivo, nos hemos planteado que Libgann deber poder ser construida y usada en cualquier entorno UNIX.

Captulo 3

Anlisis, Diseo e Implementacin


Libgann ha sido construida siguiendo un proceso iterativo de: anlisis, diseo e implementacin, hemos seguido esta prctica debido a que en la fase inicial no conocamos todos los requisitos funcionales del proyecto. Libgann fue construida a la vez que me introduca en el mundo de las RNA, por este motivo, a medida que aprenda ms sobre el tema, aparecan nuevos requisitos que se traducan en modicaciones del anlisis, diseo y por ltimo de implementacin. Para explicar el desarrollo iterativo seguido, hemos dividido ste en fases, de forma que cada fase se compondr de: un anlisis, un diseo y una implementacin. Cada una de estas fases tendr como objetivo satisfacer un conjunto de requisitos funcionales asociados.

3.1. Primera fase


El objetivo de esta primera fase fue desarrollar una base slida que soportara la posterior construccin de Libgann, para ello comenzamos estudiando los requisitos comunes que tienen los diferentes modelos de RNA. Tras este estudio, determinamos que toda red neuronal tiene un grafo asociado, en el cual los vrtices son las neuronas y la informacin asociada a la sinapsis neuronal se encuentra en las aristas de dicho grafo. Esta abstraccin es muy interesante, ya que nos permite diferenciar las operaciones propias de una RNA (entrenamiento, calculo del error producido, ...) de aquellas propias de su grafo asociado (ordenacin topolgica, ...), esto nos permitir construir los diferentes modelos de RNA, basndonos en una estructura de grafo previamente construida, modularizando as el problema a resolver. Construir los diferentes modelos de RNA basndonos en una estructura de grafo previamente construida, requiere que sta est diseada pensando en optimizar la futura sustentacin de RNA. Para disear dicha estructura, 9

10

CAPTULO 3. ANLISIS, DISEO E IMPLEMENTACIN

tenemos que analizar los diferentes modelos de RNA, buscando operaciones cuyo alto coste temporal y espacial, dependa de la estructura de grafo que usemos, identicando as las caractersticas que deber tener el grafo elegido. Fruto de este estudio llegamos a las siguientes conclusiones: La propagacin de un valor desde la entrada de una RNA hacia la salida de sta, exige poder acceder ecientemente a las neuronas siguientes a una dada. Por otro lado, los mtodos de aprendizaje basados en Backpropagation necesitan poder acceder a las neuronas anteriores a una dada ecientemente. Por tanto la implementacin de grafo que usemos deber permitirnos obtener los vrtices siguientes y anteriores a uno dado de forma muy eciente. Las redes neuronales biolgicas tienen un comportamiento inherentemente paralelo, ya que en ellas innidad de pesos pueden ser cambiados al unsono, sin embargo, las computadoras procesan la informacin secuencialmente, por ello se hace necesario establecer una ordenacin vlida a la hora de procesar las neuronas de una RNA, una posible forma de ordenar stas, sera haciendo uso de la

ordenacin topolgica, la cual es-

tablece una relacin de dependencia entre las neuronas de una RNA. El problema de la ordenacin topolgica, es que solo est denida para grafos dirigidos acclicos, sin embargo, hay RNA cuyo grafo asociado es

ordenacin topolgica parcial, explicado en el capitulo 6.1, ste nos permitir


cclico. Para solucionar este problema deniremos el concepto de de RNA. Debido a esto, la implementacin de grafo usada deber proveer

denir un orden de procesamiento para las neuronas de cualquier modelo un mtodo para hallar la ordenacin topolgica parcial de los vrtices del citado grafo. En las RNA es interesante poder insertar y eliminar neuronas, por ello la estructura de grafo escogida deber permitir insertar y eliminar tanto vrtices como aristas de forma eciente, temporal y espacialmente. Los grafos asociados a las RNA tienen una densidad muy variable, de forma que si queremos construir todos los modelos de redes neuronales basndonos en una sola estructura de grafo, sta deber optimizar el espacio ocupado teniendo en cuenta la densidad del grafo. La fase de diseo asociada a este anlisis, consisti en la bsqueda de un grafo que satisciera las caractersticas anteriores. Antes de disear un grafo para tal n, se buscaron implementaciones de grafos en diferentes bibliotecas, destacando entre ellas

Boost, sin embargo, ninguna de estas implementaciones

se adaptaban a nuestro uso, debido a esto tuvimos que disear e implementar nuestro propio grafo (vase el captulo 6.6). La implementacin del grafo escogido fue realizada con una clase paramtrica de C++. Fruto de dicha implementacin surgi la siguiente interfaz:

3.1. PRIMERA FASE

11

template <typename class Graph { public : typedef typedef typedef typedef typedef typedef typedef const

V,

typename

A >

// D e f i n i c i n de t i p o s p b l i c o s
V Vertex ; A Attrib ; Edge< V, A > Edge ; A > AdjEdge ; A > AdjEdges ; A > Adjacency ; A > AdjList ; AdjEdge< V, AdjEdges< V, Adjacency< V, AdjList< V,

// Operaciones c o n s u l t o r a s
A d j L i s t& t o p o l o g i c a l _ s o r t ( empty (

void ) const ;

bool

void ) const ; void ) const ;


attrib (

unsigned const

size (

A t t r i b&

const

V e r t e x& u ,

const

V e r t e x& v )

const ;

// Operaciones m o d i f i c a d o r a s
A d j L i s t& t o p o l o g i c a l _ s o r t (

void ) ;

void void void void void void


};

insert ( insert ( modify ( erase ( erase ( clear (

const const const

V e r t e x& v ) ; Edge& e ) ; Edge& e ) ; V e r t e x& v ) ; Edge& e ) ;

const const void ) ;

12

CAPTULO 3. ANLISIS, DISEO E IMPLEMENTACIN

3.2. Segunda fase


Una vez diseada e implementada la estructura base del proyecto nos dispusimos a analizar como estructurar en la biblioteca los conceptos de: grafos, neuronas, sinapsis, RNA, Multiperceptron, ... Fruto de este anlisis llegamos a las siguientes conclusiones: Toda RNA tiene un grafo asociado, cuyos vrtices son las neuronas y donde las aristas almacenan la informacin asociada a la sinapsis neuronal. Toda neurona tiene una funcin de activacin asociada, la cual puede ser o no derivable, en caso de serlo, dicha funcin tendr a su vez otra funcin asociada que corresponder con su derivada. Cada modelo de RNA acepta solo ciertas funciones de activacin. Los modelos de RNA comparten operaciones. Cada modelo de RNA utiliza diferentes tipos de neuronas y sinapsis (diferente funcin de activacin, diferente informacin asociada). Las redes neuronales articiales pueden ser clasicadas en supervisadas y no supervisadas, segn su tipo de entrenamiento. Partiendo de estas conclusiones hemos realizado el diseo de la estructura de Libgann (vase la Figura 3.1). La implementacin de este diseo ha sido quizs, la tarea que ms tiempo me ha ocupado en la creacin de Libgann. La implementacin de una biblioteca en C++, nos brinda una interfaz clara y elegante, debido a mecanismos como: Uso de plantillas. Orientacin a objetos. Sobrecarga de operadores y mtodos miembro. Uso de la STL (Standard Template Library). ... Esto provoca que a la hora de llevar a cabo la implementacin, dispongamos de innumerable cantidad de caminos a coger, debido a esto, una persona sin demasiada experiencia de programacin puede pasar mucho, mucho, pero que mucho tiempo hasta encontrar la estructura que busca, y an as, cuando cree que la ha encontrado, surge un nuevo requisito y vuelta a empezar. Una vez se dio con la estructura deseada, comenzamos a implementar los diferentes modelos de RNA. Empezamos implementando el Multiperceptron, a ste le

3.3. TERCERA FASE

13

Figura 3.1: Diseo de la estructura de clases en Libgann.

siguieron la red de base radial, la red de Jordan y la red de Hopeld. Cada modelo de RNA se implementa independientemente de los dems, esto hace que sea sumamente fcil introducir nuevos modelos en la biblioteca partiendo de las clases bases ya implementadas. De la misma forma, es fcil ampliar las funcionalidades de cada modelo de RNA (nuevos algoritmos de aprendizaje, nuevos mtodos miembros...). Estas dos caractersticas hacen que Libgann sea un proyecto muy escalable, ya que posibilita que muchos usuarios trabajen en paralelo sin que sus trabajos se intereran.

3.3. Tercera fase


Desde un principio tenamos como requisito poder obtener una representacin grca de las RNA implementadas, con el n de dotar al proyecto de cierta proyeccin pedaggica. Para conseguir tal n, buscamos algn proyecto que facilitara esta tarea. La bsqueda termin en el momento que encontramos

GraphViz,

una aplicacin/biblioteca que permite dibujar grafos con gran

sencillez y calidad.

14

CAPTULO 3. ANLISIS, DISEO E IMPLEMENTACIN


Debido a que nuestra biblioteca utiliza como clase base un grafo, era obvio

que debamos relacionar el dibujado de las RNA con el concepto de grafo. La solucin a este problema fue crear una nueva clase llamada

GraphDraw,

que encapsulara la funcionalidad de GraphViz y se construyera a partir de un grafo dado, de forma, que la tarea de dibujar una RNA se resume al hecho de construir un objeto de la clase

GraphDraw a partir del grafo asociado a la RNA,

dicho objeto nos permitir dibujar el grafo a partir del cual se construy. Por otro lado, cada modelo de RNA tiene sus propios requisitos a la hora de ser dibujado, de forma, que sera deseable poder especializar el dibujo obtenido a partir del objeto

GraphDraw,

para ello crearemos en la clase

GraphDraw

una

serie de operaciones miembro que nos permitan llevar a cabo esta tarea. De forma que la interfaz resultante de la clase

GraphDraw

ser:

template <typename class GraphDraw { public :


// C o n s t r u c t o r
GraphDraw (

V,

typename

A >

const Graph& G, const char * a l g o r i t h m _ g v


agraph (

= " dot " ) ;

// Devuelve e l Agraph

const

Agraph_t *

void ) const ;

void

// Devuelve en e l f i c h e r o dado por path l a s a l i d a de // GraphViz en e l formato dado . Si e l f i c h e r o e x i s t e l o // s o b r e s c r i b e


draw (

const char * const char *

pa th , format )

const ; const char * const char *


attr , value ) ;

void

// E s t a b l e c e una p r o p i e d a d por d e f e c t o para l o s v r t i c e s


set_default_vertex_attr (

void

// E s t a b l e c e una p r o p i e d a d por d e f e c t o para l a s a r i s t a s


set_default_edge_attr (

const char * const char *


attr ,

attr , value ) ;

void

// E s t a b l e c e una p r o p i e d a d para e l g r a f o
set_graph_attr (

const char * const char *

value ) ;

3.4. CUARTA FASE

15

void

// E s t a b l e c e una p r o p i e d a d para e l s u b g r a f o
set_subgraph_attr (

const char * const char * const char *

name , attr , value ) ;

void

// E s t a b l e c e una p r o p i e d a d para un v r t i c e
set_vertex_attr (

const V& v e r t e x , const char * a t t r , const char * v a l u e ) ;

void

// E s t a b l e c e una p r o p i e d a d para una a r i s t a


set_edge_attr (

const V& s o u r c e , const V& t a r g e t , const char * a t t r , const char * v a l u e ) ; const


V & vertex ) ;

void void

// Crea un nuevo nodo i n e x i s t e n t e en e l g r a f o i n i c i a l


create_vertex (

// Crea una nueva a r i s t a i n e x i s t e n t e en e l g r a f o i n i c i a l


create_edge (

const const

V & vertex1 , V & vertex2 ) ;

void

// Crea un s u b g r a f o
create_subgraph (

const char *

name ) ;

void
};

// Aade un v r t i c e a l g r a f o dado por name


add_vertex_subgraph (

const V& v e r t e x , const char * name ) ;

Al ser los objetos de la clase de la clase

Graph,

implicar que

GraphDraw construidos a partir de objetos la clase GraphDraw deber ser implementada Graph.

tambin como una clase paramtrica de C++, permitindonos esto utilizr dicha clase para cualquier especializacin de

3.4. Cuarta fase


La cuarta fase consisti en implementar mtodos que permitieran salvar y recuperar los diferentes modelos de RNA. El primer paso para ello fue elegir un lenguaje con el que guardar la informacin. En esta ocasin nos decantamos por

XML,

ya que con ste no tenamos que preocuparnos de la creacin

16

CAPTULO 3. ANLISIS, DISEO E IMPLEMENTACIN

de un analizador que validara nuestros cheros. No obstante, s tuvimos que denir un conjunto de DTD's que denieran los diferentes tipos de cheros que usaramos. Como ejemplo, a continuacin mostramos el DTD asociado a la Red de Hopeld:

<!-- hopfield.dtd --> <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT hopfield (neurons, links, datas)> neurons (neuron)+> neurons n CDATA #REQUIRED> neuron (threshold)> neuron index CDATA #REQUIRED> threshold (#PCDATA)> links (link)+> link (source, target, weight)> source (#PCDATA)> target (#PCDATA)> weight (#PCDATA)>

<!-- Datos de entrada y salida de la red --> <!ELEMENT datas (inputs, outputs)> <!ELEMENT inputs (input)+> <!ELEMENT outputs (output)+> <!ELEMENT input (#PCDATA)> <!ATTLIST input index CDATA #REQUIRED> <!ELEMENT output (#PCDATA)> <!ATTLIST output index CDATA #REQUIRED>
El siguiente paso fue crear mtodos en los diferentes modelos de RNA, que permitieran salvar y recuperar, para ello hicimos uso de la biblioteca

Libxml++-2.6,

la cual nos facilit la tarea de crear, manipular y validar los

documentos XML. Como resultado, en cada modelos de RNA aparecieron tres nuevos mtodos:

Un constructor

Hopfield (

const char *

path )

throw

( XmlValidationError ) ;

Un mtodo para salvar la RNA

void

save (

const char *

path )

const ;

3.5. QUINTA FASE


Un mtodo para recuperar la RNA

17

void

load (

const char *

path )

throw

( XmlValidationError ) ;

Los patrones al igual que los diferentes modelos de redes neuronales, requieren ser tambin salvados y recuperados, para conseguir esto seguimos el mismo esquema que con los modelos de RNA.

3.5. Quinta fase


Esta fase consisti en la creacin de una jerarqua de excepciones, que permitiera manejar los errores producidos por los usuarios al utilizar Libgann. Esta quinta fase, realmente no se realiz posteriormente a la cuarta, sino que se fue llevando a cabo durante todo el desarrollo del proyecto, fruto de este trabajo se cre la jerarqua de excepciones mostrada en la Figura 3.2.

Figura 3.2: Jerarqua de excepciones de Libgann.

Las excepciones de Libgann se construyen a partir de un mensaje descriptivo:

LibgannException (

const

s t r i n g & msg ) ;

18

CAPTULO 3. ANLISIS, DISEO E IMPLEMENTACIN


El cual podr ser consultado a travs del mtodo:

string

description (

void ) ;

Captulo 4

Redes neuronales
4.1. Qu son las redes neuronales articiales?
Con la aparicin de las computadoras, el ser humano puede automatizar la resolucin de innumerables problemas, estos van desde la edicin de un documento, hasta el clculo intensivo en estudios cientcos. En todas estas tareas las computadoras son innitamente ms ecientes que el ser humano, no obstante, existen un conjunto de problemas difcilmente resolubles por las mquinas. Supongamos que vamos por la calle y vemos a una persona conocida, cunto tiempo tardamos en reconocer a esta persona?, lo que para nosotros es una tarea trivial, para un ordenador es casi inabordable. Este tipo de problemas se caracterizan por la dicultad de describir una solucin a travs de una secuencia de acciones, debido a esto, surge la necesidad de buscar otras tcnicas para abordar estos problemas. Alguien pens que una buena forma de afrontar estos problemas sera actuar igual que actuamos los seres humanos. Esto supone modelar el funcionamiento del cerebro haciendo uso de los conocimientos del sistema nervioso adquiridos hasta el momento, con el n de establecer un modelo computacional que se asemeje al funcionamiento del sistema nervioso. El resultado de este estudio son las llamadas

articiales

redes neuronales

(RNA).

Las RNA no tienen un funcionamiento ni de lejos comparable con el ser humano, no obstante suponen una til herramienta para resolver un conjunto de problemas difcilmente resolubles con las tcnicas de programacin convencionales.

4.2. Fundamentos biolgicos


El sistema nervioso de los animales se compone fundamentalmente de tres partes:

Los receptores: vista, olfato, odo, sensores trmicos, ... 19

20

CAPTULO 4. REDES NEURONALES


Centro de procesamiento: cerebro. Los efectores: msculos, glndulas sudorparas, ... Los receptores se encargan de recibir la informacin del exterior y de co-

dicarla en un formato legible por el centro de procesamiento, cuando este ltimo recibe la informacin la procesa y posiblemente enviar una orden a los efectores. El elemento ms complejo de este sistema es el centro de procesamiento, ya que actualmente se conoce bastante sobre el funcionamiento de los receptores y efectores pero casi nada del cerebro. El sistema nervioso tiene como unidad bsica de funcionamiento una clula llamada neurona (vase Figura 4.1).

Figura 4.1: Neurona biolgica.

El sistema nervioso es el resultado de la unin de millones de neuronas, de tal manera, que el axn de una neurona desembocar en las dendritas de otras neuronas, estas uniones se denominan

sinapsis neuronal

y a travs de ellas una

neurona puede comunicarse con sus vecinas. Las neuronas mantienen en reposo una diferencia de potencial con el exterior, debido a una concentracin de potasio (carga negativa) en el interior ms elevada que en el exterior, donde por el contrario existe ms sodio (carga positiva), esto es posible gracias a dos factores: Una permeabilidad selectiva de la membrana celular al potasio. Unas bombas que envan el sodio al exterior de la neurona. En un momento determinado una neurona propaga una seal elctrica por su axn hasta llegar a las sinapsis neuronales con sus vecinas. Cuando la seal llega al terminal del axn liberarn neurotransmisores en las dendritas de las neuronas receptoras, los cuales generarn una carga elctrica en stas. Cada neurona receptora recibir cargas elctricas (neurotransmisores) por parte de

4.3. MODELO COMPUTACIONAL

21

varias neuronas, pudiendo tener cada una de estas cargas efectos excitadores o inhibidores. La suma de todas estas seales en la neurona receptora, dar como resultado un potencial llamado

potencial sinptico.

En el caso de que dicho

potencial supere un umbral, se producir la apertura de unos canales en la membrana celular, a travs de los cuales entrar el sodio del exterior, generando as una seal elctrica que se propagar por el axn hasta las dendritas de las neuronas vecinas. Despus de esta brevsima introduccin a los fundamentos biolgicos de las RNA, nos queda pendiente una cuestin muy importante, Donde reside el conocimiento?, el conocimiento no reside en las propias neuronas, sino en la conexin entre ellas (sinapsis). Dijimos con anterioridad que cada sinapsis poda actuar excitando o inhibiendo el potencial sinptico de una neurona, no obstante no solo existen dos estados posibles para las sinapsis, ests pueden adoptar cualquier valor en un intervalo, inhibiendo o excitando a la neurona receptora dependiendo de su valor. Por otro lado, la fuerza de estos enlaces sinpticos no es ja, cambia constantemente con el n de adaptarse a nuevos conocimientos o reforzar los ya existentes. Esto explica por qu cuanto ms estudiamos mejor nos aprendemos algo, ya que en una primera pasada se modican algunas de las sinapsis de nuestro cerebro, crendose un primer esquema de conocimiento, mientras que en posteriores repasos, el conocimiento se rearma y queda consolidado debido al renamiento del grado de fuerza de las sinapsis neuronales. La estructura del sistema nervioso es imposible de implementar hoy en da, ya que cada neurona se conecta con cientos de neuronas y existen miles de millones de neuronas. Esto provoca que con la tecnologa actual no sea posible implementar un sistema con ese grado de conexionismo.

4.3. Modelo computacional


Cada modelo de RNA tiene caractersticas propias, no obstante podemos dar una descripcin general del funcionamiento y composicin de las RNA, con el n de ofrecer una introduccin previa a la explicacin de cada modelo concreto de red neuronal.

4.3.1. Neurona articial


Al igual que en los sistemas neuronales biolgicos, en las redes neuronales articiales existe una unidad bsica de funcionamiento tambin llamada neurona, que tratar de asemejarse lo ms posible a su homlogo biolgico. Cada modelo de red neuronal utiliza tipos diferentes de neuronas, no obstante la mayora de ellas comparten algunos aspectos en comn, de forma, que en general podemos decir que las neuronas articiales sern de la forma ilustrada en la Figura 4.2. Donde:

22

CAPTULO 4. REDES NEURONALES


x1 w1 x2 w2 ... ... wn f (net ) y

xn
Figura 4.2: Neurona articial.

x1 , x2 , . . . , xn

representan las entradas a la neurona. son los pesos asociados a las conexiones de entrada.

w1 , w2 , . . . , wn net = f y

n i=1 wi xi .

es la funcin de activacin. representa el umbral de la neurona. es la salida de la neurona, tal que

y = f (net ).

Por analoga con el modelo biolgico la funcin de activacin suele ser del tipo

todo a nada, por ello es muy utilizada la funcin escaln


f (x) = 1 x 0 1 x>0

dada por:

No obstante, en algunos modelos es necesario el uso de funciones de activacin derivables, en estos casos se suele usar la funcin

sigmoidal, dada por:

f (x) =

1 1 + ex

Como podemos ver en la Figura 4.4 la funcin sigmoidal tiene cierta similitud con la funcin escaln.

4.3. MODELO COMPUTACIONAL

23

Figura 4.3: Representacin grca de la funcin escaln.

Figura 4.4: Representacin grca de la funcin sigmoidal.

4.3.2. Redes Neuronales


Como en los modelos biolgicos, las RNA se componen de neuronas, en este caso articiales, de forma que una red neuronal tendr el aspecto de la Figura 4.5. Antes de presentar algunos de los modelos de redes neuronales existentes, es interesante conocer las propiedades que catalogan a cada modelo de red neuronal. Podemos clasicar a las redes neuronales articiales segn:

Topologa Aprendizaje

4.3.2.1. Topologa
Las RNA se componen de un conjunto de neuronas, las cuales suelen estar organizadas en capas. Segn el nmero de capas de una red podemos distinguir:

Redes monocapa:

24

CAPTULO 4. REDES NEURONALES

x1

f (net )

x2

f (net )

x3

f (net )

Figura 4.5: Red neuronal articial.

Formadas por un conjunto de neuronas que se estructuran en una sola capa. Podemos ver una de estas redes en la Figura 4.6, en la cual y

x3

son las entradas a la red y

y1 , y2 N

y3

x1 , x2

son las salidas.

x1

y1

x2

y2

x3

y3

Figura 4.6: Red neuronal monocapa.

Las neuronas cuyas salidas corresponden con las salidas de la red diremos que estn en la capa de salida. El resto de neuronas diremos que estn en las capas ocultas. En este caso (Figura 4.6) podemos ver que todas las neuronas de la red estn, estn estructuradas en una nica capa de salida.

Redes multicapa: Formadas por un conjunto de neuronas que se estructuran en varias capas, podemos ver un ejemplo de este tipo de redes neuronales en la Figura 4.7.

4.3. MODELO COMPUTACIONAL


x1 y1

25

x2

y2

x3

y3

Figura 4.7: Red neuronal multicapa.

Otro aspecto para clasicar a las redes neuronales es la forma en la que se conectan las neuronas que las componen. Anteriormente dijimos que las neuronas se estructuran en capas dentro de las redes neuronales, pudindose distinguir as dos tipos de redes neuronales segn la forma en la que se conecten las neuronas de las diferentes capas:

Con conexiones hacia delante: Sern redes neuronales en las cuales las neuronas de una capa se podrn conectar solo y exclusivamente con las neuronas de las capas siguientes. Un ejemplo de este tipo de red es el mostrado en la Figura 4.7. Con conexiones hacia atrs: Este tipo de redes (vase la Figura 4.8) sern ms generales que las anteriores, permitiendo adems de conexiones hacia delante:

Conexiones de las neuronas de una capa a las neuronas de la capa anterior. Conexiones autorrecurrentes de una neurona a s misma. Conexiones entre neuronas de la misma capa.

4.3.2.2. Aprendizaje
Como en el modelo biolgico, el conocimiento en las redes neuronales articiales se encuentra en las conexiones, no obstante cabe preguntarnos, Cmo aprende una RNA?, pues bien, el proceso de aprendizaje de una RNA no es ms que la obtencin de los pesos adecuados para la resolucin de un problema especco. Existen dos formas de aprendizaje:

26

CAPTULO 4. REDES NEURONALES

N x1 N y1

x2

y2

x3

N N

y3

Figura 4.8: Red neuronal multicapa con conexiones hacia atrs.

Oine: El aprendizaje de la red se realiza en una fase independiente al uso y explotacin, llamada fase de entrenamiento, la cual ser la nica fase en la que se modicarn los pesos de las conexiones. Para el entrenamiento de la red partiremos de unos patrones que dividiremos en dos conjuntos: entrenamiento y prueba, de forma que: 1. Entrenaremos la red con el conjunto de entrenamiento. 2. La red entrenada deber superar un test basado en el conjunto de prueba. Le pasamos a la red el conjunto de prueba, tal que el error cometido por la red para este conjunto no deber superar un umbral, de ser as deberemos volver a entrenar la red. De esta forma nos aseguraremos que la red tenga la capacidad de generalizacin necesaria. Las redes neuronales no estn construidas para trabajar con datos pertenecientes a los conjuntos de entrenamiento y validacin. Estos ltimos solo se utilizan para conseguir una red que sea capaz de generalizar la solucin del problema, dndonos as posibilidad de resolver el problema con datos que nunca antes han sido vistos por la red. 3. La red estar lista para ser usada y explotada. Inline: En este tipo de aprendizaje no haremos distincin entre una fase de entrenamiento y una de uso, por el contrario, la red ira adaptando sus pesos en todo momento, realizndose as un aprendizaje continuo.

4.3. MODELO COMPUTACIONAL

27

Otro criterio para clasicar el tipo de aprendizaje de las redes neuronales articiales es la existencia o no de un tutor, el cual controle el aprendizaje de la red, en este sentido podemos distinguir: Aprendizaje supervisado. En este tipo de aprendizaje la red neuronal aprende a travs de un conjunto de patrones para los cuales se facilita la solucin correcta a la red, de forma, que sta pueda calcular el error cometido y modicar los pesos de las conexiones dependiendo de ste. Aprendizaje no supervisado. Con el aprendizaje no supervisado la red neuronal no conoce el resultado correcto para cada uno de los patrones de entrenamiento. En este tipo de entrenamiento la red trata de hallar aspectos en comn de los patrones de entrada, categorizando estos.

Captulo 5

Modelos de Redes Neuronales


5.1. Perceptron
Este modelo de red neuronal fue uno de los primeros en aparecer, es capaz de realizar tareas de clasicacin de forma automtica, para ello usa un mtodo de aprendizaje supervisado. El Perceptron est formado por una sola neurona sin conexiones recurrentes, con la Figura 5.1.

n entradas y una sola salida, podemos verlo en

x1 w1 x2 w2 ... ... wn f (net ) y

xn
Figura 5.1: Perceptron.

Donde

es la funcin escaln, dada por:

f (x) =
Por otro lado

1 x 0 1 x>0

representa el concepto de umbral de las neuronas biolgicas,


29

30

CAPTULO 5. MODELOS DE REDES NEURONALES

de forma que cuando la suma de las entradas ponderadas por sus respectivos pesos supere dicho umbral, la neurona dar como salida devolver

1,

en caso contrario

1.

Esta salida binaria propiciar el uso del Perceptron como clasi-

cador binario, de tal forma, que si al pasar un patrn a la neurona, sta da como resultado

1,

signicar que dicho patrn pertenece a la clase A, mien-

tras que si da como resultado

1,

ste pertenecer a la clase B. El uso de varios

Perceptrones en una misma capa nos permitir disear clasicadores para un nmero arbitrario de clases diferentes, un ejemplo de esto lo podemos ver en la Figura 5.2.

f (net ) x1

y1

x2

f (net )

y2

x3 f (net ) y3

Figura 5.2: Varios Perceptrones en la misma capa.

A travs de esta estructura, podremos realizar una correspondencia entre cada posible variacin con repeticin de los valores de salida y cada una de las clases que queremos representar, de forma que con clasicar los patrones de entrada en

Perceptrones podremos

2n

clases. No obstante, podremos realizar

otros tipos de correspondencias. Supongamos que tenemos aquellas salidas de la red cuyos valores fueran todos que valiera

Perceptrones,

podramos determinar, que las posibles clases estuvieran representadas por

a excepcin de uno

1.

De esta forma, la red de Perceptrones de la Figura 5.2, podra

representar las clases expuestas en el cuadro 5.1. Un Perceptron con de entrada en dos

n entradas es capaz de clasicar un conjunto de patrones clases, para ello traza un hiperplano en un espacio de n

dimensiones, dividiendo este ltimo en dos, tal que los patrones de entrada (puntos en este espacio) pertenecern a una u otra clase dependiendo de en

5.1. PERCEPTRON
Salida -1 -1 1 -1 1 -1 1 -1 -1 Clase A B C

31

Cuadro 5.1: Representacin de clases con varios Perceptrones.

cual de las dos partes del espacio se encuentren.

Ejemplo:
la recta

El Perceptron de la Figura 5.3 dene en el espacio bidimensional

2,15x1 1,2x2 3,1

1 , tal que si tenemos los patrones de entrada del

cuadro 5.2. El Perceptron los dividir en dos clases, tal y como se muestra en la Figura 5.4.

x1

2,15 1,2 f (net 3,1) y

x2
Figura 5.3: Ejemplo de Perceptron.

Hasta el momento, hemos explicado como el Perceptron es capaz de clasicar un conjunto de patrones de entrada a travs de un hiperplano, no obstante, no hemos tratado como el Perceptron determina dicho plano. Para hallar el hiperplano que dene el Perceptron, ste parte de un conjunto de patrones de entrenamiento que se componen de dos partes: Datos de entrada, denotado por

. D()
(solo

Salida deseada o clase del dato de entrada, denotado por existen dos clases).

Debido a esto, el Perceptron sabe a priori a que clase pertenece cada dato de entrada. Con esta informacin, el Perceptron deber encontrar un hiperplano que separe en el espacio los puntos pertenecientes a una y otra clase. La bsqueda del hiperplano se realiza siguiendo un proceso iterativo, en el cual, se modican los pesos y el umbral paulatinamente hasta que se cumpla una condicin de nalizacin. A continuacin describiremos los pasos que deberemos seguir para entrenar un Perceptron:

Ntese que el umbral desempea una funcin muy importante, ya que acta como termino independiente en la ecuacin del hiperplano, permitiendo as, que dicho plano no tenga porque pasar por el origen de coordenadas.

32

CAPTULO 5. MODELOS DE REDES NEURONALES


Patrones de entrada

(10, 10) (9, 11) (11, 9) (9,5, 10) (8,4, 11) (10,5, 12) (11,4, 7) (10, 10) (9, 11) (11, 9) (9,5, 10) (8,4, 11) (10,5, 12) (11,4, 7)
Cuadro 5.2: Patrones de entrada para un Perceptron de dos entradas.

Figura 5.4: Representacin grca de la clasicacin de un Perceptron.

1. Inicializamos los pesos de las conexiones y el umbral del Perceptron con valores aleatorios. 2. Introducimos en el Perceptron el primer patrn de entrenamiento 3. Si la salida del Perceptron no es la esperada modicaremos los pesos y el umbral, tal que:

Y () = D(),

entonces

wi = (D() Y ())xi = (D() Y ())


Donde

es el llamado factor de aprendizaje, el cual amortigua las posi-

bles oscilaciones que se produzcan en la modicacin de los pesos. Este

5.1. PERCEPTRON
parmetro debe adoptar valores en el intervalo ximos a

33

(0, 1), tal que valores pr-

promovern un aprendizaje lento y convergente, mientras que

los valores cercanos a

1,

llevarn a aprendizajes muy rpidos pero con

posibilidad de oscilar demasiado en la bsqueda de unos pesos adecuados. La eleccin de este parmetro depender del caso particular con el que estemos tratando. 4. En este punto deberemos denir una condicin de parada, una posible opcin, sera detener el entrenamiento cuando para todos los valores de entrada, la red neuronal devolviera el valor esperado. Otra opcin consistira en determinar un nmero de ciclos de entrenamiento, tal que si el nmero de ciclos es N, realizaremos el proceso de aprendizaje con todos los patrones de entrenamiento N veces.

Podramos pensar que si ya conocemos las salidas deseadas para el conjunto de entrenamiento, que sentido tiene usar el Perceptron, pues bien, el conjunto de entrenamiento nos ayuda a encontrar una conguracin de la red, que esperamos se comporte adecuadamente con un conjunto de patrones que todava desconoce. A lo largo de esta seccin, hemos visto como el Perceptron clasica los diferentes casos de entrada a travs de un hiperplano, pues bien, aqu surge una pregunta interesante, Qu ocurre cuando los patrones de entrada de las diferentes clases no son separables a travs de un hiperplano?, la respuesta es que el Perceptron no puede clasicar este tipo de patrones, lo cual supone un insuperable impedimento, ya que la mayora de los usos a los que van destinadas las redes neuronales requieren esta caracterstica. La solucin de este problema, pasa por aadir nuevas capas al modelo, como ejemplo podemos ver la Figura 5.5. El Perceptron de la salida parte de la clasicacin realizada por los otros dos Perceptrones, de forma que utilizando esta informacin puede denir regiones en el espaci mas complejas que un mero hiperplano.

x1

P1 P3 y

x2

P2

Figura 5.5: Red de Perceptrones con dos capas.

Por ejemplo, supongamos que los Perceptrones

P1

P2

de la Figura 5.5

denen las regiones en el espacio mostradas en la Figura 5.6. El Perceptron

P3

partir de estas regiones denidas, pudiendo clasicar los patrones segn

34

CAPTULO 5. MODELOS DE REDES NEURONALES

la ubicacin de estos en las divisiones hechas por los dos hiperplanos, de forma, que el conjunto de la red podr denir regiones de clasicacin como las mostradas en la Figura 5.7.

Figura 5.6: Regiones denidas por los Perceptrones P1 y P2.

Figura 5.7: Regiones denidas por la red de Perceptrones.

Pudiera parecer que a travs de este modelo quedara solucionado el problema de la separabilidad lineal de los patrones, sin embargo surge un problema, ya que sabemos como entrenar los Perceptrones de la capa de salida, pero no el resto, en la prxima seccin daremos solucin a este problema.

5.2. Multiperceptron
El Multiperceptron es una generalizacin del Perceptron explicado en la seccin 5.1, nace con un descubrimiento de Rumelhart, Hinton y Willians, ellos hallaron un mtodo para propagar el error cometido en la capa de salida hacia las capas ocultas de la red, permitiendo entrenar las neuronas pertenecientes a stas. Este mtodo recibe el nombre de

Backpropagation.

El Multiperceptron es una RNA multicapa con conexiones hacia delante que tienen un peso asociado. Las neuronas utilizan una funcin de activacin

5.2. MULTIPERCEPTRON

35

derivable que se asemeja a la funcin escaln, siendo muy comn el uso de las funciones: Sigmoidal (vase la Figura 4.4)

1 1 + e x
Tangente hiperblica (vase la Figura 5.8)

ex ex ex + ex

Figura 5.8: Representacin grca de la funcin tangente hiperblica.

La eleccin de una u otra funcin de activacin depender principalmente del recorrido que queramos que tenga la salida del Multiperceptron. El Multiperceptron puede estar formado por un nmero ilimitado de capas, de forma que las neuronas de cada capa se encuentran totalmente conectadas a todas las neuronas de la capa siguiente (vase la Figura 4.7).

5.2.1. Backpropagation
Backpropagation es un mtodo de aprendizaje supervisado que se compone de dos fases: Pasada hacia delante: Introducimos un patrn en la entrada de la red y propagamos los valores que devuelven las neuronas hasta llegar a la salida de la red. Pasada hacia detrs: Una vez tenemos los valores en la salida de la red para un patrn de entrada, calculamos el error cometido y propagamos ste a las neuronas de las capas ocultas, con el n de modicar los pesos y umbrales de todas las neuronas de la red.

36

CAPTULO 5. MODELOS DE REDES NEURONALES


Al ser Backpropagation un mtodo de aprendizaje supervisado, podemos

entender que el objetivo de ste, es minimizar el error cometido por la red en el conjunto de patrones de entrenamiento, dicho error viene dado por la expresin:

1 ET = N
Donde

E (n)
n=1

(5.1)

es el nmero de patrones de entrenamiento y

cometido por la red en el patrn

n,

E (n)

es el error

que viene dado por:

E (n) =
Donde salida

1 2

e i 2 (n)
iC

(5.2)

C,

ei (n)

representa el error cometido por la neurona

en el patrn de entrenamiento

n,

de la capa de

viene dado por:

ei (n) = di (n) yi (n)


Siendo respectivamente neurona

(5.3)

n.

di (n)

yi ( n )

la salida esperada y obtenida de la

perteneciente a la capa de salida, para el patrn de entrenamiento

Por otro lado

yi (n)

viene dado por:

yi (n) = f (neti (n) i )


Donde

(5.4)

neti (n)

es la funcin de activacin,

es el umbral de la neurona

viene dado por:

neti (n) =
hC 1

wh,i xh

(5.5)

Representando esta expresin la suma ponderada de las entradas a la neurona i. En este caso,

h.

La neurona

xh

es la entrada a la neurona

pertenece a la capa

C 1,

proveniente de la neurona

no obstante, debemos de darnos

cuenta de que:

xh = yh
Usaremos la expresin

(5.6)

Ya que la entrada de toda neurona corresponder con la salida de otra .

xh

cuando queramos hacer mencin a una entrada y

yh

cuando nos reramos a una salida. Como conclusin, el entrenamiento del Multiperceptron tiene como objetivo minimizar el error total dado en la Ecuacin 5.1. Para minimizar este error el proceso utilizado ser modicar los parmetros (pesos y umbrales) de la red tras la presentacin de cada patrn de entrenamiento. La modicacin de

A excepcin de la neuronas de la capa de entrada.

5.2. MULTIPERCEPTRON

37

pesos y umbrales estar hecha en concordancia al error cometido por la red en cada patrn de entrenamiento. El mtodo de aprendizaje Backpropagation, aplica una correccin a cada peso

w(n)

w(n),

la cual es proporcional a la derivada parcial

E (n) w(n) , tal que:


(5.7)

w(n) =

E (n) w(n) wi,j


entre la neurona

No obstante, a la hora de modicar un peso deberemos de establecer dos posibles casos:

j,

La neurona j pertenece a la capa de salida C :


En este caso podemos conocer directamente el error cometido por la neurona a la cual vamos a modicar sus pesos, ya que conocemos la salida deseada en esa neurona para un patrn de entrenamiento determinado (vase la Figura 5.9).

...

C ... wi,j ...

xi (n)

f (netj (n) j )

yj (n)

...

Figura 5.9: Neurona

perteneciente a la capa

C.

Basndonos en que la neurona decir que:

j pertenece a la capa de salida C , podemos

ej (n) E (n) = ej (n) wi,j wi,j


dependa de

(5.8)

Ya que el nico error cometido por una neurona de la capa de salida que

wi,j

es

ej .

Utilizando la expresin 5.3 obtenemos:

e j (n)
Dado que

(dj (n) yj (n)) ej (n) = ej (n) wi,j wi,j

(5.9)

dj (n)

es una expresin constante, entonces:

e j (n)

(dj (n) yj (n)) yj (n) = ej (n) wi,j wi,j

(5.10)

38

CAPTULO 5. MODELOS DE REDES NEURONALES


Utilizando la expresin 5.4:

yj (n) f (netj (n) j ) (netj (n) j ) = = f (netj (n) j ) wi,j wi,j wi,j wi,j xi ,

(5.11)

Basndonos en la expresin 5.5, sabemos que el nico valor de esta expresin que depende de es luego:

f (netj (n) j )
Donde

(netj (n) j ) = f (netj (n) j )xi (n) wi,j

(5.12)

xi (n) es la entrada de la neurona asociada al peso modicado. Por


de la capa

tanto, la expresin que nos permitir modicar el peso asociado entre una neurona de

i de la capa C 1 y una neurona j entrenamiento n, viene dada por:

C , para un patrn

wi,j = j (n) xi (n)


Donde

(5.13)

j (n)

viene dado por:

j (n) = ej (n) f (netj (n) j )

(5.14)

La neurona j no pertenece a la capa de salida:


Para explicar este caso supondremos que

C1

neurona

i pertenecer a la capa C 2, adems aparecer una nueva k , la cual pertenece a la capa de salida C . Esto queda expuesto

pertenece a la capa oculta

en la Figura 5.10.

...

C 1 ... wi,j ... wj,k

xi (n)

f (netj (n) j )

f (netk (n) k )

yk ( n )

...

Figura 5.10: Neurona

perteneciente a la capa

C 1.

En este caso la neurona peso

wi,j

no pertenece a la capa de salida, por tanto, el

afectar a todas las salidas de la red, con lo cual:

5.2. MULTIPERCEPTRON
E (n) = wi,j ek (n) wi,j

39

e k (n)
kC

(5.15)

Basndonos en la expresin 5.3, tenemos que:

ek (n)
k C

ek (n) = wi,j

ek (n)
kC

yk (n) wi,j

(5.16)

Aplicando la expresin 5.4, tenemos que:

yk (n) f (netk (n) k ) = wi,j wi,j


Operando obtenemos que:

(5.17)

f (netk (n) k ) (netk (n) k ) = f (netk (n) k ) wi,j wi,j


Tenemos que saber que el peso neurona de salida

(5.18)

k,

wi,j ,

solo afecta a la entrada

xj

de la

por tanto:

xj (n) (netk (n) k ) = wj,k wi,j wi,j


Sustituyendo esta expresin en la ecuacin 5.18 obtenemos:

(5.19)

xj (n) f (netk (n) k ) = f (netk (n) k )wj,k wi,j wi,j


Obteniendo que:

(5.20)

E (n) = wi,j

ek (n)f (netk (n) k )wj,k


k C

xj (n) wi,j

(5.21)

Haciendo uso de la expresin 5.14 obtenemos:

E (n) = wi,j

k (n)wj,k
k C

xj (n) wi,j

(5.22)

Usando la expresin 5.4 tenemos que:

xj (n) f (netj (n) j ) = wi,j wi,j

(5.23)

40

CAPTULO 5. MODELOS DE REDES NEURONALES


Basndonos en que la nica entrada de la neurona es

xi

que depende de

wi,j

obtenemos que:

xj (n) = f (netj (n) j )xi (n) wi,j


Por tanto:

(5.24)

E (n) = wi,j
Adems debido a que que:

k (n)wj,k f (netj (n) j )xi (n)


kC
no depende de

(5.25)

f (netj (n) j )xi (n)

k,

tenemos

E (n) = f (netj (n) j )xi (n) wi,j


Y como consecuencia:

k (n)wj,k
kC

(5.26)

wi,j = j (n) xi (n)


Donde

(5.27)

j (n)

viene dado por:

j (n) = f (netj (n) j )


kC

wj,k k (n) wi,j

(5.28)

En resumen, podemos decir que la modicacin de un peso patrn de entrenamiento

para un

ser igual a:

wi,j = j (n) xi (n)


Siendo

j (n): j
sea una neurona de salida:

En caso de que

f (netj (n) j ) ej (n)


En caso de que

sea una neurona oculta:

f (netj (n) j )
kC

wj,k k (n)

5.2. MULTIPERCEPTRON

41

Dada una neurona, podemos ver el umbral como el peso asociado a una nueva conexin, la cual tendr como entrada constante el valor -1, de forma que:

j = j (n)
Como podemos ver, el mtodo de aprendizaje Backpropagation hace necesario conocer la derivada de la funcin de activacin de cada neurona, tal que: La derivada de la funcin sigmoidal viene dada por:

Sig (x) = Sig (x)(1 Sig (x))


La derivada de la funcin tangente hiperblica es:

T anh (x) = 2Sig (x)(1 Sig (x))


Para entrenar el Multiperceptron partimos de un conjunto de patrones, los cuales representan una muestra aleatoria de los posibles casos a los que se enfrentar la red una vez supere la fase de aprendizaje. Cuando hemos entrenado una red, no tenemos la certeza de que dicha red funcione correctamente en su fase de ejecucin, a esta caracterstica la denominaremos

generalizacin,

y se

dene como la capacidad de la red para extrapolar lo aprendido en su fase de entrenamiento a su fase de ejecucin. Para garantizar la generalizacin de una red neuronal, dividiremos el conjunto de patrones inicial en dos grupos: Patrones de entrenamiento Patrones de vericacin A travs del primero de estos dos conjuntos la red congurar sus parmetros para minimizar el error cometido en los patrones de dicho conjunto, una vez realizada esta fase de entrenamiento, procederemos a observar la respuesta de la red para los patrones de vericacin, los cuales no han sido vistos aun por la red. En caso de que el error cometido por la red sea muy grande, esto signicar que la red no tiene capacidad de generalizacin, en el caso contrario, podemos decir que la red ha aprendido a resolver un problema basndose en la informacin proveniente del conjunto de entrenamiento. Los patrones de entrenamiento y vericacin provienen ambos del mismo conjunto, la seleccin de un patrn para la pertenencia a uno u otro conjunto ha de ser totalmente aleatoria, de esta forma nos aseguraremos que la red tiene realmente la capacidad de generalizacin que hemos comprobado a travs del conjunto de vericacin. A la hora de seleccionar que proporcin de patrones pertenecen al conjunto de entrenamiento o al conjunto de vericacin, podemos decir, que no hay una regla ja, no obstante, como punto de partida estara bien considerar un 60 % de patrones de entrenamiento y un 40 % de patrones de vericacin.

42

CAPTULO 5. MODELOS DE REDES NEURONALES

5.2.2. Inclusin del momento en la regla de aprendizaje


Como vimos en la seccin 5.1, el factor de aprendizaje puede tomar valores en el intervalo

(0, 1),

de forma que valores cercanos a

harn que la red

converja rpidamente. No obstante cuando usamos estos valores para el factor de aprendizaje, es posible que la red neuronal oscile mientras intenta minimizar el error cometido, por otro lado cuando elegimos valores cercanos a se hace muy lenta. Con el n de poder usar valores cercanos a

0,

la

posibilidad de oscilacin es prcticamente nula, sin embargo la convergencia

sin que la

red oscile, se introduce el concepto de momento, que no es ms que realizar una modicacin de los pesos teniendo en cuenta la modicacin justamente anterior, tal que la expresin para el aprendizaje quedar de la siguiente forma:

w(t) = (t) x(t) + w(t 1)


De esta forma, ser necesario ir almacenando las modicaciones en los pesos justamente anteriores a la actual, con esto conseguiremos una mayor convergencia haciendo uso de factores de aprendizaje cercanos a

1.

5.3. Redes neuronales de base radial


Las redes neuronales de base radial nacen debido a la bsqueda de un modelo de red neuronal que necesitase menor tiempo de aprendizaje que el Multiperceptron, para conseguir esto, se cre un modelo que incorpora funciones de activacin locales en las neuronas de la capa oculta. Al igual que el Multiperceptron, la redes neuronales de base radial son redes con conexiones hacia delante, no obstante, a diferencia de ste, la arquitectura de las redes de base radial es algo ms estricta, ya que estn formadas solo por tres capas: Capa de entrada. Capa oculta. Capa de salida. La capa de entrada solo se encarga de distribuir los valores de entrada a la red a las neuronas de la capa oculta, mientras que la capa oculta se caracteriza por usar las funciones de activacin locales anteriormente mencionadas. Por ltimo, la capa de salida solo realiza una combinacin lineal de las neuronas de la capa oculta. Las conexiones entre la capa oculta y la de salida, tienen unos pesos asociados que deberemos entrenar. Por otro lado, las neuronas de la capa de salida tambin poseen umbrales al igual que el Multiperceptron, no obstante en este caso la funcin de activacin de estas neuronas es la funcin lineal. Por todo esto una red neuronal de base radial tendr la forma mostrada en la Figura 5.11.

5.3. REDES NEURONALES DE BASE RADIAL

43

CapaOculta

f (neta a )

ya

xk

xi

f (netb b )

yb

xj

x f (netc c ) yc

Figura 5.11: Red neuronal de base radial.

Una funcin de base radial es una funcin real, cuyos valores solo dependen de la distancia al origen o alternativamente desde la distancia a algn punto de base radial ms usadas son:

llamado centro. Para las redes neuronales que estamos tratando las funciones

Funcin Gausiana:
r 2 ) 2

(r) = e(

Funcin Inversa Cuadrtica:

(r) =

1 1 + r2

44

CAPTULO 5. MODELOS DE REDES NEURONALES

Funcin Inversa Multicuadrtica:

(r) =

1 1 + r2

Donde

r = ||x c||,

como podemos ver, cuanto ms cercano se encuentre

el punto de entrada al centro

de una neurona de la capa oculta, menor ser

y mayor el valor devuelto por la funcin

(r).

A medida que el punto de

entrada se aleja del centro de la neurona, el valor de la funcin de base radial disminuye hasta aproximarse a cero, de forma que segn un patrn de entrada de acerque o aleje al centro de una neurona oculta, sta devolver un valor que representar la cercana de dicho patrn al centro de la neurona. A la hora de aplicar las funciones de base radial a las redes neuronales, modicaremos levemente el valor de

r,

de forma que:

r=
Donde

||x c|| d

representa el concepto de amplitud, de forma que cuanto ms

grande sea ste, mas grande ser el valor devuelto por la funcin de base radial para un mismo patrn de entrada, con este parmetro conseguimos ms plasticidad en la red neuronal. Cuando la red neuronal recibe un patrn de entrada, ste ser propagado a cada neurona de la capa oculta, cada una de estas neuronas, hallarn la

5.3. REDES NEURONALES DE BASE RADIAL

45

distancia a su centro y propagarn un valor a la capa de salida, la cual a travs de una combinacin lineal de dichos valores con los pesos asociados, producir la salida para la red. Una red neuronal de base radial se compone de dos partes, una primera (capa oculta) donde las neuronas trabajan individualmente y tienen una informacin local del problema y una segunda parte, donde se combinan las regiones denidas en la capa oculta para dar soluciones a problemas complejos.

5.3.1. Aprendizaje de las redes neuronales de base radial


Hay varias formas de aprendizaje para las redes neuronales de base radial, nosotros explicaremos aqu el mtodo que bajo nuestro criterio es ms sencillo y produce mejores resultados, ste se compone de dos partes:

5.3.1.1. Fase no supervisada


En esta fase, calcularemos los centros y amplitudes de las neuronas pertenecientes a la capa oculta. En primer lugar calcularemos los centros haciendo uso del algoritmo

K-medias.

El algoritmo de K-medias busca los centros correspondientes a las neuronas de la capa oculta. Para realizar esta tarea divide el conjunto de patrones en K clases, de forma que cada una de stas tendr como representante un centro de la capa oculta. Este algoritmo, consigue encontrar un conjunto de centros, que minimizan la distancia a los patrones de la clase que representa. El algoritmo de K-medias viene dado por los siguientes pasos: 1. Inicializamos los centros de las neuronas de la capa oculta con algunos de los patrones de entrenamiento, con el n de que los valores estn en el rango de los patrones de entrada. Tambin se podran elegir centros aleatorios, siempre y cuando nos cercioremos de que dichos centros se encuentran cercanos a los patrones de entrenamiento, ya que de no ser as, la bsqueda de los centros podra alargarse en exceso. 2. El siguiente paso ser dividir los patrones de entrenamiento en clases. Cada uno de los centros establecidos en la fase anterior denir su propia clase, de forma, que asignaremos cada patrn de entrenamiento, a aquella clase cuyo centro se encuentre ms cercano. 3. Una vez que tenemos cada patrn asignado a una clase, calculamos el centro de los patrones pertenecientes a cada clase, sustituyendo ste al antiguo representante. 4. Realizaremos los pasos 2 y 3 hasta que los centros permanezcan estables. Una vez que hemos calculado los centros, el siguiente paso ser calcular las amplitudes. La amplitud relacionada a cada centro podr ser calculada como

46

CAPTULO 5. MODELOS DE REDES NEURONALES

la media geomtrica de la distancia eucldea a sus dos centros vecinos ms cercanos.

5.3.1.2. Fase supervisada


En esta fase, calcularemos los umbrales de las neuronas de salida y los pesos asociados entre las neuronas de la capa oculta y las neuronas de la capa de salida. Dado que las neuronas de la capa de salida tienen una funcin de activacin derivable, usaremos en esta fase el mtodo de aprendizaje Backpropagation explicado en la seccin 5.2.1. Como vimos, la modicacin de los pesos y umbrales de la capa de salida vienen dados por:

wi,j = f (netj (n) j ) ej (n) xi (n) j = f (netj (n) j ) ej (n)


Como sabemos que la funcin de activacin de estas neuronas es entonces tenemos que:

f (x) = x,

wi,j = ej (n) xi (n) j = ej (n)


Al igual que ocurra con el Multiperceptron, deberemos de establecer una condicin de parada, ya sea basada en el error cometido o en el nmero de iteraciones.

5.4. Jordan
La red de Jordan es un modelo de red neuronal multicapa parcialmente recurrente, esto quiere decir que existe recursin entre algunas de las neuronas de la red, dicha recursin permitir que la red neuronal recuerde valores de activacin de algunas neuronas en el pasado. En este tipo de redes neuronales, podemos distinguir un grupo de neuronas que reciben el nombre de

de contexto,

neuronas

stas nos permitirn recordar estados anteriores de activacin de

algunas neuronas. En el caso de la red de Jordan, las neuronas de contexto nos permiten recordar los estados de activacin de las neuronas de salida, para ello, estas redes tienen la forma mostrada en la Figura 5.12. Como podemos ver en la gura, existen dos tipos de conexiones recurrentes, que en este caso han sido marcadas de color rojo: Conexiones entre la capa de salida y las neuronas de contexto:

5.4. JORDAN

47

Neuronas de contexto

C1

C2

Figura 5.12: Red neuronal de Jordan.

Estas conexiones permitirn que cuando cambie la salida de la red, se actualicen las neuronas de contexto, dicha conexin tiene un peso jo asociado en el intervalo [0,1] y pueden ser vistas como el cable que transmite la informacin a la memoria, siendo las neuronas de contexto la memoria en este modelo. Conexiones autorecurrentes en las neuronas de contexto: Estas conexiones son las que implementan el grado de memoria del modelo, para ello tienen un peso asociado en el intervalo [0, 1], lo que nos permitir denir el grado de permanencia en memoria de los datos almacenados. El nmero de neuronas de contexto no es opcional, ser el mismo que el nmero de neuronas de la capa de salida. Para entender el funcionamiento de esta red neuronal, explicaremos sus dos operaciones bsicas: Actualizacin: A diferencia de lo que ocurra en el Multiperceptron, en este caso no solo debemos propagar el dato de entrada a la red, ya que tambin ser necesario tener en cuenta los valores de las neuronas de contexto, de forma que el dato a propagar vendr dado por:

Vector de estados proveniente de las neuronas de contexto.

48

CAPTULO 5. MODELOS DE REDES NEURONALES

Entrada de la red.

Una vez obtengamos la salida de la red, deberemos actualizar las neuronas de contexto, para ello deberemos calcular cada salida de cada neurona de contexto como la media ponderada de sus dos entradas (la autorecurrente y la que viene de la capa de salida), de forma que obtengamos un nuevo valor para cada una de ellas. Entrenamiento: Para entender como llevar a cabo el entrenamiento de este tipo de redes neuronales, describiremos los pasos a seguir para cada patrn de entrenamiento:

1. El primer paso que debemos dar es inicializar la red neuronal, al igual que hacamos con el Multiperceptron, deberemos asignar valores aleatorios en el intervalo (0,1) a las conexiones hacia delante y a los umbrales de todas las neuronas a excepcin de las de contexto. Por otro lado, ser necesario establecer una activacin inicial para las neuronas de contexto, las cuales tendrn una funcin de activacin lineal. Por ltimo, deberemos establecer valores en el intervalo [0,1] a los pesos de las conexiones recurrentes, estos pesos sern jos y no cambiarn en la fase de entrenamiento. Lo normal, ser que todas las conexiones autorecurentes tengan el mismo valor y que ocurra lo mismo con las conexiones entre la capa de salida y las neuronas de contexto. 2. Actualizamos la red como acabamos de explicar en el apartado anterior. Cuando actualizamos las neuronas de contexto en la fase de entrenamiento, hacemos uso de la salida de la red neuronal, no obstante dicha salida puede no coincidir con la esperada, por ello, existe la posibilidad de usar esta ltima para actualizar las neuronas de contexto. En la prctica, se usa un valor intermedio entre ambos, de forma que existe un factor

[0, 1],

que determina cual de los

dos valores usamos ms, de forma que:

Vusado = Sreal + (1 )Sdeseada


Vusado : Sreal :
Valor usado

Salida Obtenida Salida Deseada

Sdeseada :

Por tanto, valores de

cercanos a uno harn que usemos la salida

obtenida, mientras que valores prximos a cero, harn que usemos ms la salida deseada.

5.5. HOPFIELD

49

3. Calculamos el error cometido con respecto a la salida esperada y actualizamos los pesos y umbrales al igual que haciamos en el Multiperceptron, para ello nos olvidamos por el momento de las conexiones recurrentes existentes en la red. Al igual que haciamos en el Multiperceptron, podemos usar tambin el momento para optimizar el aprendizaje.

5.5. Hopeld
Hasta el momento, todos los modelos de redes neuronales presentados, basaban su funcionamiento en un aprendizaje supervisado, por el contrario, la red de Hopeld utiliza un aprendizaje no supervisado. Este tipo de redes reciben el nombre de autoasociativas, ya que dado un conjunto de datos de entrada, son capaces de agrupar estos atendiendo a las caractersticas comunes de dichos datos. La red de Hopeld es una red neuronal monocapa, en la que cada neurona est conectada con todas las dems excepto consigo misma (vase la Figura 5.13), de tal forma que dado un peso de la conexin entre las neuronas sabemos que:

j,

wi,j = wj,i
Por otro lado, para cada neurona se suele utilizar una funcin de activacin escaln de la forma mostrada en la Figura 4.3. La activacin

i,

en un instante de tiempo

t,

yi , de una neurona

vendr dada por:

yi (t) = f (neti i )
Donde:

neti =
k=i

yk (t 1)wk,i

Al igual que los modelos explicados con anterioridad, la red de Hopeld sigue un entrenamiento o-line, quiere decir que tenemos que discernir entre una fase de entrenamiento y una fase de funcionamiento.

5.5.1. Fase de funcionamiento


Una vez la red neuronal ha sido entrenada, ya estar en disposicin de pasar a la fase de funcionamiento, en esta fase, la red recibir datos, de forma que una vez presentado cada uno de ellos, los propagar. La red neuronal tiene conexiones recursivas, por tanto, el dato propagado volver a la entrada desde la que ste se propag. Debido a esto, nos surge la pregunta: Cundo pararemos dicha propagacin?, pues bien, la respuesta es sencilla, cuando la

50

CAPTULO 5. MODELOS DE REDES NEURONALES

Figura 5.13: Ejemplo de red de Hopeld.

red converja a un valor

3 . La respuesta a la anterior pregunta nos suscita una

nueva pregunta: Qu nos asegura que la red de Hopeld converja?, la respuesta viene de mano del mtodo de aprendizaje que expondremos a continuacin.

5.5.2. Fase de entrenamiento


La red de Hopeld utiliza la regla de Hebb como mtodo de aprendizaje, dicha regla fue descubierta por Donald Hebb, y se basa en una de sus observaciones:

Cuando un axn de una clula A est lo sucientemente cerca de una clula B, como para excitarla, y participa repetida o persistentemente en su disparo, ocurre algn proceso de crecimiento o cambio metablico, en una o en ambas clulas, de modo tal que aumentan tanto la eciencia de A como la de una de las distintas clulas que disparan a B.
Basndonos en lo enunciado por Hebb, en la fase de entrenamiento usaremos la siguiente expresin para calcular los pesos de las conexiones:

wi,j =
k=1
Donde:

xi (k )xj (k ) i = j

P:
3

representa al nmero de patrones de entrenamiento.

Fjese que en la red de Jordan existan conexiones recursivas tambin, sin embargo no se esperaba que la red convergiera, de forma que sus conexiones recursivas solo eran usadas como memoria para recordar antiguos valores de activacin de las neuronas de salida.

5.5. HOPFIELD
xi (k ):
representa el valor de la posicin

51

del patrn de entrenamiento

k.

Con esto, conseguimos que la unin entre neuronas que se activan a la vez se vea reforzada.

5.5.3. Limitaciones de la red Hopeld


La red de Hopeld tiene dos importantes limitaciones que deberemos tener en cuenta a la hora de usar el modelo:

Puede almacenar un nmero muy limitado de datos


El nmero de datos que puede clasicar la red de Hopeld ser igual a

0,138N ,

donde

representa el nmero de neuronas del modelo.

Necesitan que los ejemplos de aprendizaje sean ortogonales


El modelo requiere que las informaciones aprendidas sean sucientemente diferentes entre s, para ello debemos intentar que los datos sean ortogonales. Esto quiere decir, que para cada par de datos, estos diferirn al menos en la mitad de sus componentes.

Captulo 6

Grafos
6.1. Introduccin
Los grafos permiten modelar multitud de problemas y situaciones, un caso particular son las RNA. Toda RNA puede ser vista como un grafo, donde los vrtices son las neuronas y las aristas representan las sinapsis. Por este motivo, a continuacin daremos una introduccin a los grafos, en la que partiremos de unas deniciones bsicas, hasta llegar a la explicacin de conceptos y algoritmos algo ms complicados, los cuales, sern aplicados en la implementacin de la biblioteca. Libgann es una biblioteca orientada a objetos, esto nos lleva a estructurar nuestro sistema haciendo uso de mecanismos como la herencia. Un anlisis de las operaciones que requieren las redes neuronales, nos lleva a la conclusin, de que muchas de estas operaciones no son realmente propias de las redes neuronales, sino del grafo asociado a ellas. Por ello hemos decidido estructurar nuestra biblioteca, de tal forma, que toda red neuronal ser una especializacin de un grafo, debido a esto, la implementacin del grafo elegida, deber cumplir unos requisitos de eciencia y dinamismo requeridos por las redes neuronales, no obstante, este tema ser estudiado con ms profundidad en prximas secciones.

6.2. Deniciones
Denicin 1.
arista Un grafo dirigido es un par de elementos llamados vrtices, y dos por elementos de

a = (u, v ),

V,

G = (V, A), donde V u v,

es un conjunto

es un conjunto de pares ordenados formay como los vrtices origen y

dichos pares reciben el nombre de aristas. Dada una

nombraremos a los vrtices

destino respectivamente. Un grafo dirigido suele ser representado de dos formas: Deniendo textualmente los conjuntos 53

A:

54

CAPTULO 6. GRAFOS
V = {a, b} A = {(a, b), (b, a)}
Grcamente: Como podemos ver en la Figura 6.1 representaremos cada arista con una echa desde el vrtice origen hacia el vrtice destino.

Figura 6.1: Representacin grca de un grafo dirigido.

Denicin 2.

Un grafo no dirigido es un par

junto de elementos llamados vrtices, y formados por elementos de

V,

G = (V, A), donde V es un conA es un conjunto de pares no ordenados

dichos pares reciben el nombre de aristas.

Un grafo no dirigido suele ser tambin representado de dos formas: Deniendo textualmente los conjuntos

A:

V = {a, b} A = {(a, b)}


Grcamente: Las aristas de los grafos no dirigidos son pares no ordenados, debido a esto, no tiene sentido representarlas grcamente con echas, en su lugar, como muestra la Figura 6.2, usaremos una linea dibujada entre los vrtices que la denen.

Figura 6.2: Representacin grca de un grafo no dirigido.

Denicin 3.
(a, b) A
vrtices.

Un grafo dirigido

existir otro

(b, a)

G = (V, A)

ser simtrico, si por cada par

perteneciente al mismo conjunto.

Denicin 4.

Un grafo ser completo si existe una arista por cada par de

Denicin 5. Las aristas de un grafo dirigido G = (V, A) inducen una relacin


sobre los vrtices llamada que,

uV v V,

relacin de adyacencia. Dados dos vrtices u y v


v
es adyacente a

tal

diremos que

u,

si y solo si

(u, v ) A.

6.2. DEFINICIONES

55

Denicin 6. Denicin 7. Denicin 8.

Llamaremos predecesores de un vrtice dado, a todos aquellos

vrtices adyacentes a l. Llamaremos antecesores de un vrtice dado, a todos aquellos

vrtices que lo tienen como adyacente. Un grafo ponderado es una tripleta

(V, A, P )

donde

es una

funcin tal que:

P :AY
Donde

representa el recorrido de la funcin, el cual, podremos denir

segn el uso al que ir dirigido el grafo.

Denicin 9.

G = (V, A), un camino desde el vrtice v0 a vn es una secuencia de aristas pertenecientes al grafo (v0 , v1 ), (v1 , v2 ), . . . , (vn1 , vn ), de forma, que si v0 , v1 , v2 , . . . , vn son todos distintos diremos que el camino es
Dado un grafo simple. La longitud del camino ser igual al nmero de aristas que denen el camino. Podemos considerar que para todo vrtice existir un camino a s mismo, cuya longitud ser cero.

Denicin 10. Denicin 11. Denicin 12. Denicin 13. Denicin 14. Denicin 15.
G = (V, A )
el grafo dirigido

Dado un grafo dirigido, llamaremos ciclo al camino cuyo vrti-

ce inicial coincide con el nal. Un ciclo simple es un ciclo sin vrtices repetidos a excepcin del inicial y nal. Un grafo cclico es aquel que contiene al menos un ciclo. Un grafo acclico ser aquel que no contiene ningn ciclo. Dado un grafo no dirigido, diremos que ste es conexo, si y

solo si existe un camino por cada par de vrtices. Dado un grafo dirigido, diremos que ste es fuertemente co-

nexo, si y solo si existe un camino por cada par de vrtices. Dado un grafo dirigido

G = (V, A), existe un grafo no dirigido G


sea un grafo conexo, diremos que

asociado a ste, fruto de eliminar la orientacin de las aristas.

En el caso de que el grafo no dirigido

es un grafo dbilmente conexo.

(V , A ),

Denicin 16.
tal que:

Un subgrafo de un grafo

G = (V, A),

es otro grafo

G =

V V A A A V V
(Por la denicin de grafo)

56

CAPTULO 6. GRAFOS
Una componente conexa de un grafo no dirigido

Denicin 17.

subgrafo conexo maximal de de ningn otro subgrafo

G, es un G, es decir, un subgrafo conexo que no es subgrafo conexo de G. G,

Denicin 18. Denicin 19.

Una componente fuertemente conexa de un grafo dirigido

es un subgrafo fuertemente conexo maximal de

G.

G = (V, A) y el conjunto de sus componentes fuertemente conexas S1 , S2 , . . . , Sn , llamaremos grafo de condensacin de G denotado por G , al grafo dirigido de la forma G = (V , A ), donde V = {c1 , c2 , . . . , cn } tiene tantos elementos como componentes fuertemente conexas tiene G y (ci , cj ) A si y solo si i = j y hay una arista en A desde algn vrtice de Si a algn vrtice de Sj . En otras palabras consideraremos que todos los vrtices en Si son condensados en un solo vrtice ci para todo 1in
Dado un grafo dirigido

6.3. Ordenacin Topolgica


La ordenacin topolgica (OT) es de gran utilidad hoy en da, su ms directa aplicacin est relacionada con la secuenciacin de trabajos, ya que nos permitir desarrollar un plan de trabajo teniendo en cuenta las dependencias entre ellos. La OT se aplica a grafos dirigidos acclicos como el representado en la Figura 6.3. Podemos interpretar las aristas como dependencias, tal que el trabajo

no puede comenzarse hasta que el

haya terminado. La OT nos dar

como resultado una secuencia de trabajos a seguir, que nos garantizar la inexistencia de bloqueos provocados por las dependencias entre las distintas tareas. El resultado de la

S = a, b, c, d

OT

para el grafo de la Figura 6.3 ser la secuencia

Figura 6.3: Grafo dirigido acclico.

La OT no est denida para grafos cclicos, ya que si el grafo tiene ciclos las tareas implicadas no se pueden realizar, debido a que existen dependencias mutuas entre ellas (vase Figura 6.4).

6.4. ORDENACIN TOPOLGICA PARCIAL

57

Figura 6.4: Grafo dirigido cclico.

Denicin 20.

Dado un grafo dirigido acclico

G, a la (u, v ) A Ord(u) < Ord(v ).


denacin topolgica de

aplicacin inyectiva

G = (V, A), llamaremos orOrd : V N, donde

6.4. Ordenacin Topolgica Parcial


Las redes neuronales biolgicas se caracterizan por su paralelismo, ya que la fuerza de cada enlace neuronal puede variar en todo momento, de forma, que no existen restricciones de secuencialidad. Todo lo contrario ocurre con las RNA, ya que los ordenadores son mquinas secuenciales, es decir, en un momento determinado solo podremos tratar una neurona por cada unidad de proceso que disponga la mquina. Por tanto, se hace necesario establecer una ordenacin sobre las neuronas para su tratamiento. Como se mencion en la seccin 6.1 las redes neuronales pueden ser vistas como grafos, y en consecuencia podemos hallar la OT de stos para establecer el orden de tratamiento de las neuronas. De forma, que para tratar una neurona deberemos haber tratado previamente a todas de las que sta depende. Existen multitud de modelos de RNA, cada uno de ellos establece una estructura diferente sobre la conexin de sus neuronas. Con el n de poder establecer una ordenacin sobre las neuronas, distinguiremos dos clases de RNA: Recursivas No recursivas Las RNA no recursivas se caracterizan porque su grafo asociado es dirigido y acclico, como consecuencia, podemos hallar la ordenacin topolgica de dicho grafo, consiguiendo as establecer un orden de tratamiento sobre todas las neuronas de la red. Las RNA recursivas tienen un grafo dirigido asociado que contiene ciclos, por tanto, no podremos aplicar a dicho grafo directamente la ordenacin topolgica. No obstante, en la denicin 19 mostramos el concepto de grafo de condensacin. Este concepto nos resultar de utilidad para este tipo de RNA, ya que aunque no tengamos una ordenacin para todas las neuronas de la red, s que tendremos una ordenacin parcial de stas. Para

58

CAPTULO 6. GRAFOS

ello hallaremos la ordenacin topolgica del grafo de condensacin asociado, obteniendo as una ordenacin denida sobre conjuntos de neuronas (componentes conexas), a este concepto le llamaremos

Ordenacin Topolgica Parcial

(OTP). La OTP no dene un orden para las neuronas dentro de cada conjunto, aunque esto no supone nada, ya que los modelos de RNA recursivas no requerirn esta caracterstica, pudiendo establecerse un orden aleatorio sobre las neuronas dentro de cada conjunto. Un ejemplo de esto lo podemos ver en la Figura 6.5. Para dicho grafo no podemos establecer una

OT

sobre todas las neuronas, debido a la exis-

tencia de ciclos, no obstante, si agrupamos las neuronas mutuamente dependientes en conjuntos (componentes conexas), podramos determinar en cualquier caso la

OT

de estos, a este concepto le hemos dado el nombre de

De forma que el resultado de la

S = {a}, {b, c, d, e}, {f }

OTP

OTP.

para dicha gura, ser la secuencia

Figura 6.5: Grafo dirigido cclico.

6.5. Algoritmo online para la Ordenacin Topolgica Parcial de grafos dirigidos


Como se ha expuesto en la seccin 6.4, se ha de establecer una ordenacin sobre las neuronas de una RNA, dicha ordenacin ser utilizada para el entrenamiento y uso de la red. Existen dos posibles planteamientos sobre como hallar la OTP de las neuronas de una RNA. Hallar la OTP antes de realizar alguna operacin de la red que requiera de ella. Mantener la OTP de la red en todo momento, para ello, deberemos de modicar la estructura que la representa tras cada operacin que modique el grafo asociado a la RNA. Toda opcin tiene una serie de ventajas e inconvenientes, en el primer caso, cada vez que realicemos una operacin sobre la RNA que requiera de la OTP, deberemos hallar sta, suponiendo un incremento considerable de tiempo cada vez que ejecutemos este tipo de operaciones. La segunda opcin salva

6.5. ALGORITMO ONLINE PARA LA ORDENACIN TOPOLGICA PARCIAL DE GRAFOS DIRIGIDOS

59

este problema, ya que cuando necesitemos la OTP la tendremos calculada, para ello, deberemos de aadir un pequeo coste de tiempo cada vez que realicemos una operacin que modique la estructura del grafo asociado. En Libgann hemos decidido optar por esta segunda opcin, buscando optimizar al mximo las operaciones candidatas de ser ms utilizadas, ya que normalmente las operaciones que hacen uso de la OTP son muy utilizadas en las RNA. Para implementar la opcin elegida necesitamos un algoritmo que nos permita conocer en todo momento la OTP de un grafo.

6.5.1. Representacin
Antes de denir el funcionamiento del algoritmo, expondremos la representacin grca con la que trabajaremos. La

OT

de un grafo da como resultado una secuencia de vrtices, si repre-

sentamos dicha secuencia junto con las aristas del grafo, vemos que todas las aristas irn de izquierda a derecha, en este caso diremos, que las aristas tienen una orientacin vlida. Como ejemplo de esto podemos ver en la Figura 6.6 la representacin grca de la ordenacin topolgica del grafo de la Figura 6.3.

Figura 6.6: Representacin grca de la

OT. OTP, no obstante,

Podemos utilizar una representacin semejante para la no podremos obtener en todos los casos una

OTP

para cuya representacin

todas las aristas tengan una orientacin vlida. Un ejemplo de esto lo podemos ver en la Figura 6.7, la cual muestra una posible representacin grca de la OTP del grafo dirigido cclico expuesto en la Figura 6.4.

Figura 6.7: Posible representacin grca de la

OTP.

La

OTP

establece una

OT

sobre las componentes conexas de un grafo,

esto nos lleva a pensar en una representacin grca en la cual las componentes conexas estn agrupadas y sean distinguibles por un cdigo de colores (vase Figuras 6.8, 6.9). De forma que todas las aristas cuyo origen y destino pertenezcan a componentes conexas distintas, tendrn una orientacin vlida, sin embargo, no ocurrir lo mismo para las aristas que no cumplan est con-

60

CAPTULO 6. GRAFOS

dicin, ya que sobre los vrtices que forman una componente conexa existir una interdependencia mutua.

Figura 6.8: Grafo dirigido cclico.

Figura 6.9: Representacin grca de la

OTP.

En la Figura 6.9, los colores representan las diferentes componentes conexas del grafo, como podemos ver, todas las aristas cuyo origen y destino pertenecen a componentes conexas distintas tendrn una orientacin vlida. Esta ser la representacin grca que usaremos para mostrar la

OTP.

6.5.2. Algoritmo
Un algoritmo online que calcule la grafo. Un grafo

OTP,

deber mantener un resultado

vlido tras cada una de las posibles modicaciones que se produzcan en el

G = (V, A)

puede ser modicado por cuatro operaciones:

Modicar el conjunto

V. V. V.

Aadir un elemento a

Eliminar un elemento a

Modicar el conjunto

A. A. A.

Aadir un elemento a

Eliminar un elemento a

Una forma de denir el algoritmo, ser exponer las modicaciones que debemos realizar en la

OTP

para cada una de estas operaciones. Para exponer

estas modicaciones, partiremos de una

OTP vlida, de forma, que tras realizar

6.5. ALGORITMO ONLINE PARA LA ORDENACIN TOPOLGICA PARCIAL DE GRAFOS DIRIGIDOS


la operacin que en ese momento estemos tratando, la

61

OTP

ser modicada

para que siga cumpliendo las condiciones anteriormente expuestas.

6.5.2.1. Aadir un elemento a V


Dado un grafo

G = (V, A),

cuando aadimos un elemento al conjunto

V,

ste ser por s mismo una componente conexa, por tanto, podremos aadir dicho vrtice en cualquier lugar de la de dicho vrtice.

OTP

sin que se desvirte sta. Siempre

y cuando no dividamos una componente conexa ya existente con la insercin

6.5.2.2. Aadir un elemento a A


Dado un grafo

G = (V, A),

cuando aadimos una arista

(u, v ),

podemos

diferenciar varios casos:

Los vrtices u y v pertenecen a la misma componente conexa:


Cuando insertamos una arista cuyo origen y destino pertenecen a la misma componente conexa, no existen repercusiones sobre la nente.

OTP,

ya que

sta no determina un orden sobre los elementos de una misma compo-

Los vrtices u y v no pertenecen a la misma componente conexa:

La arista sigue una orientacin vlida:


Cuando insertamos una arista cuyo origen y destino no pertenecen a la misma componente conexa, y la direccin de la arista sigue una orientacin vlida, no hay repercusiones sobre la

OTP

de un grafo,

ya que despus de la insercin de sta, las componentes conexas seguirn agrupadas y todas las aristas entre las componentes conexas seguirn teniendo una orientacin vlida.

La arista no sigue una orientacin vlida:


Este caso es el ms complicado dentro de las inserciones de una arista. La Figura 6.10 ilustra dicho caso, en ella se utiliza una simplicacin de la representacin expuesta con anterioridad. Cada recuadro representa una componente conexa, siendo

las componentes

de los vrtices origen y destino de la arista insertada. El resto de aristas no han sido representadas, aunque sabemos, que todas las aristas entre componentes conexas distintas a excepcin de la nueva, seguirn una orientacin vlida. En las inserciones de este tipo deniremos como los cambios con el n de mantener una

regin afectada

el

intervalo de componentes conexas sobre las que debemos realizar

OTP

vlida. Quedando

62

CAPTULO 6. GRAFOS

Figura 6.10: Insercin de una arista con orientacin no vlida.

Figura 6.11: Regin afectada.

delimitado dicho intervalo por las componentes a las que pertenecen los vrtices de la arista insertada (vase Figura 6.11). Dentro de esta regin afectada, haremos una clasicacin de las componentes conexas que se encuentran dentro, aunque previamente daremos algunas deniciones necesarias.

Denicin 21.
un vrtice

Dado un grafo dirigido

es accesible por otro

si y solo si existe un camino

G = (V, A), diremos que v , y los denotaremos por v ; u, desde v hasta u.

Denicin 22.

G = (V, A), diremos que una componente conexa x es accesible por otra y , y los denotaremos 1 por y ; x , si y solo si existe al menos un par de vrtices (a, b) pertenecientes a las componentes x e y respectivamente, tal que b ; a.
Dado un grafo dirigido Dada una componente conexa

perteneciente a la regin afectada

de la Figura 6.11, podemos distinguir cuatro tipos mutuamente excluyentes en los que podramos clasicar a

z:

Tipo 0: y ; z z ; x
Cuando una componente es de este tipo, sabemos que despus de la insercin formar una misma componente conexa con e

y,

ya que existir un camino entre cualquier par de vrtices

pertenecientes a las componentes

x, y

z.

1 Hemos denotado este concepto con el mismo nombre que el anterior para simplicar, delegando en el contexto el uso de uno u otro.

6.5. ALGORITMO ONLINE PARA LA ORDENACIN TOPOLGICA PARCIAL DE GRAFOS DIRIGIDOS

63

Tipo 1: (y ; z ) z ; x
Para modicar la

OTP

deberemos de tener en cuenta que este

tipo de componentes conexas debern preceder a

x.

Tipo 2: y ; z (z ; x)
Para modicar la

OTP

deberemos de tener en cuenta que este

tipo de componentes conexas debern ser precedido por

y.

Tipo 3: (y ; z ) (z ; x)
Este tipo de componentes conexas son un tanto particulares, ya que dada una componente conexa tipo 1 y una

t2

del tipo 3, una

t1

del

del tipo 2, podemos distinguir varios subtipos:

Tipo Tipo Tipo Tipo

3.0: 3.1: 3.2: 3.3:

t1 ; z z ; t2 t1 ; z (z ; t2 ) (t1 ; z ) z ; t2 (t1 ; z ) (z ; t2 )

Una forma de mantener la

OTP

ser ubicar cada tipo de componen-

te conexa en un lugar determinado de la regin afectada, La Figura 6.12 muestra la ubicacin de los diferentes tipos de componentes conexas.

Figura 6.12: Ubicacin de los diferentes tipos de componentes conexas.

No obstante, debemos aclarar que el orden de las componentes conexas dentro de cada tipo, ser el mismo que tenan antes de la modicacin de la regin afectada.

6.5.2.3. Eliminar un elemento a A


Dado un grafo

G = (V, A),

cuando eliminamos una arista

(u, v ),

podemos

diferenciar varios casos:

64

CAPTULO 6. GRAFOS

Los vrtices u y v no pertenecen a la misma componente conexa:


De forma que cuando eliminemos la arista, la

OTP

seguir siendo vlida,

ya que las componentes conexas seguirn agrupadas y todas las aristas entre las componentes conexas seguirn teniendo una orientacin vlida.

Los vrtices u y

pertenecen a la misma componente conexa:

Este caso es algo ms difcil de abordar, ya que cuando eliminamos una arista en una componente conexa sta se puede dividir en varias. En este caso, la regin afectada abarcar los vrtices de la componente conexa afectada. Una solucin podra venir dada por los siguientes pasos: 1. Eliminaremos la arista. 2. Agruparemos los vrtices de la regin afectada en componentes conexas. 3. Ordenamos topolgicamente entre s las componentes conexas de la regin afectada.

6.5.2.4. Eliminar un elemento a V


Para eliminar un vrtice deberemos eliminar previamente las aristas en las que dicho vrtice est implicado, una vez hecho esto, el vrtice formar por s mismo una componente conexa y podr ser eliminado sin mayor dicultad.

6.6. Estructura
En Libgann todos los modelos de RNA se especializan a partir de un grafo, esto signica, que la estructura de ste ser determinante para el buen o mal funcionamiento de la biblioteca, por este motivo, es obligado un estudio detallado previo a la eleccin de la estructura de grafo a usar. Existen varios tipos de estructuras para implementar un grafo, no obstante, como siempre todas ellas tienen sus ventajas e inconvenientes. Con el n de tomar una decisin sobre la estructura ha utilizar, deberemos de: Analizar las caractersticas principales de cada implementacin de grafo teniendo en cuenta los modelos de RNA que vamos a implementar. Estudiar las operaciones que realizaremos sobre el grafo debido a la especializacin en una RNA, para posteriormente analizar las repercusiones que tendra la eleccin de una u otra estructura con cada una de estas operaciones. Para estudiar los aspectos anteriores, nos centraremos en las dos estructuras principalmente usadas en la implementacin de grafos:

6.6. ESTRUCTURA
Matrices Listas de Adyacencia

65

Dado que el grafo ser utilizado para especializar una RNA, ste deber ser ponderado, ya que ser necesario almacenar cierta informacin en las aristas. Por otro lado, las RNA requieren que las conexiones entre las neuronas sean dirigidas, por tanto, el grafo implementado ser tambin dirigido. En general las RNA tienen un grafo asociado poco denso, esta caracterstica nos lleva a la primera consideracin sobre la estructura a elegir. Los grafos representados a travs de matrices, se caracterizan por ocupar mucho espacio en memoria. Cuando representamos un grafo

G = (V, A)

travs de una matriz, el espacio en memoria ocupado por sta viene dado por

SM (v, a)

donde

v = |V |

a = |A|,

tal que:

SM (v, a) O(v 2 )
Por otro lado, los grafos representados por listas de adyacencia ocupan un espacio aristas:

SL (v, a),

el cual variar dependiendo del nmero de aristas del grafo

(densidad del grafo). De forma, que cuando las listas representan a grafos sin

SL (v, a) O(v )
En el caso de grafos completos

A=V V:

SL (v, a) O(v 2 )
Por tanto, para cualquier grafo:

O(v ) O(SL (v, a)) O(v 2 )


Como conclusin:

O(SL (v, a)) O(SM (v, a))


Por tanto, en trminos de espacio, podemos determinar que las listas de adyacencia son ms apropiadas que las matrices para implementar los grafo en Libgann. Los modelos de redes neuronales requieren conocer las neuronas adyacentes a una dada. En la representacin matricial, esta operacin requiere consultar todos los valores de una la de la matriz, mientras que en las listas de adyacencia esta operacin es ms eciente, ya que dada una neurona, la estructura permite conocer directamente las neuronas adyacentes. Basndonos en esto, podemos decir de nuevo que las listas de adyacencia son ms apropiadas para la implementacin de los grafos en Libgann.

66

CAPTULO 6. GRAFOS
Las redes neuronales requieren conocer los pesos de las conexiones entre dos

neuronas. Esta operacin en la representacin matricial es

O(1),

no obstante,

las redes neuronales no requieren conocer el peso de dos neuronas aleatorias, sino el asociado a una neurona adyacente, de forma que esta operacin solo es una variacin de la anterior. Una caracterstica que se ha querido tener en cuenta en la biblioteca es el dinamismo. Dada una red neuronal, puede que con el nmero de neuronas que dispone no pueda resolver un problema concreto, y como consecuencia sea necesario aumentar el nmero de stas. En el caso de usar una representacin matricial esto sera complicado, ya que la matrices son estructuras estticas en memoria, de forma que sera necesario crear otra nueva matriz y copiar en ella los valores de la antigua. Esto es un gran problema, ya que aparte de requerir mucho espacio para la copia, tambin usar mucho tiempo en traspasar esos valores. Por el contrario, las listas de adyacencia poseen un dinamismo intrnseco, de forma, que es otro punto a favor a tener en cuenta para usar las listas de adyacencia. Por todos estos motivos nos decantaremos por usar una implementacin de grafo basada en listas de adyacencia. Las listas de adyacencia normalmente se implementan a travs de una lista de listas, en la cual existe una primera lista que llamaremos A, la cual contiene en cada posicin un vrtice del grafo y un puntero a otra lista que llamaremos B. Esta lista B contendr por cada posicin un puntero a un elemento de la lista A y una informacin asociada, representando as los vrtices adyacentes a uno dado (vase Figura 6.13).

Figura 6.13: Lista de adyacencia tradicional.

6.6. ESTRUCTURA

67

Sin embargo, la lista de adyacencia que hemos elegido (Figura 6.14) para representar nuestro grafo, diere en algunos aspectos con la lista de adyacencia de la Figura 6.13. Como podemos ver en la representacin escogida, existen dos listas B por cada elemento de A. Estas dos listas almacenan los vrtices predecesores y antecesores a uno dado. Con esta redundancia de informacin, conseguimos una mayor eciencia en las operaciones crticas, ya que se necesitan conocer con mucha frecuencia los vrtices anteriores y siguientes a uno dado. No obstante, debemos tener muy en cuenta, que esta redundancia de informacin puede provocar inconsistencia en el grafo, ya que, la informacin asociada a la conexin de dos vrtices se encuentra duplicada en la representacin, por ello deberemos vigilar que dichos valores estn sincronizados en todo momento. Por otro lado, los elementos de las listas B, no almacenan un puntero a un elemento de la lista A, sino que almacenan directamente el vrtice del grafo, Por qu?. En la seccin 6.5 expusimos la utilizacin de un algoritmo que nos permita mantener la OTP de un grafo en todo momento, pues bien, la justicacin de esta diferencia entre la lista de adyacencia tradicional y la elegida, se debe al uso de este algoritmo. En Libgann el grafo del que especializan todos los modelos de redes neuronales es una lista de adyacencia, la cual mantiene ordenados los elementos de la lista A segn la OTP del grafo. Debido a esto, puede que cuando modiquemos el grafo, los elementos de la lista A sean recolocados o eliminados, por ello, no tiene sentido almacenar punteros en la lista B, ya que habra que estar actualizando estos tras cada cambio, debido a esto, se almacenan vrtices del grafo. Se eligi esta representacin para no tener que usar estructuras adicionales que nos permitieran mantener la OTP online, consiguiendo as un compromiso entre eciencia temporal y espacial.

68

CAPTULO 6. GRAFOS

Figura 6.14: Lista de adyacencia elegida.

Captulo 7

Herramientas utilizadas
7.1. GNU Build System
La portabilidad se ha convertido en una caracterstica crucial en el desarrollo de aplicaciones informticas, ya que permite dirigir el software a una mayor cantidad de usuarios. Cuando desarrollamos en entornos

Make
vo

UNIX, es comn el uso de la aplicacin

para compilar nuestros proyectos. Dicha aplicacin se basa en un archi-

Makefile, el cual especica un conjunto de reglas para construir proyectos. Makefile,


a cada uno de ellos. Esta

Cuando nuestro proyecto va dirigido a varios sistemas operativos o arquitecturas, se har necesaria la adaptacin del tarea puede resultar muy tediosa cuando un proyecto se quiere hacer portable para mltiples sistemas. Para solucionar esto David J. Mackenzie tuvo la idea de crear un script llamado

Makefile

configure, el cual se encargara de adaptar el

a cada sistema. Dicho script hara comprobaciones sobre el tipo de

mquina, SO, compiladores... Este proceso ha sido estandarizado por el proyecto GNU, consiguiendo una interfaz de construccin genrica. Es ampliamente usado y se conoce con el nombre de

GNU Build System. A travs de ste podemos construir e instalar

un proyecto simplemente con los siguientes comandos:

$> ./configure $> make $> make install


No obstante, la construccin del script conjunto de herramientas llamadas dos aplicaciones:

configure

y del

Makefile

puede

ser muy complicada y laboriosa. Para facilitar esta tarea, se han creado un

Autotools, compuestas principalmente por

Autoconf Automake
69

70

CAPTULO 7. HERRAMIENTAS UTILIZADAS

7.1.1. Autoconf
Es una herramienta que nos facilitar la tarea de crear los script's El programa recibe como entrada un chero el script

configure.ac,

configure.

el cual contiene

un conjunto de macros M4 que sern expandidas a cdigo shell, formando as

configure.

7.1.2. Automake
Makefile, para ello recibe Makefile.am, el cual especica la forma en la que se construirn los objetivos en el Makefile nal. Como resultado de la ejecucin del programa, se crear un Makefile.in por cada Makefile.am, siendo estos cheros plantillas que sern especializadas en los Makefile nales a travs del script configure.
Este programa se encarga de la creacin de los como entrada un chero

7.1.3. Libtool
Antiguamente, si un desarrollador quera aprovechar el poder de usar bibliotecas compartidas, ste necesitaba dar soporte a su proyecto para ello. Esto se debe a que existen determinadas plataformas que no soportan bibliotecas compartidas y otras que no soportan las estticas. Por otro lado, si un desarrollador quera construir una biblioteca, tambin deba contemplar en tiempo de construccin, que tipos de bibliotecas soportaba el sistema y como se deban instalar stas. Libtool nace como una buena solucin a los problemas descritos anteriormente. En el caso de construir una biblioteca, cuando usamos Libtool generamos una biblioteca genrica que no es ni esttica ni compartida, aunque sta se implemente luego de una u otra forma segn la plataforma donde la construyamos. En el caso de la construccin de programas, Libtool nos permitir construir programas sin tener en cuenta que tipo de biblioteca estamos usando, ya que nos remitiremos a usar la biblioteca genrica generada por Libtool. Aunque luego internamente se enlazar con una biblioteca compartida o esttica, dependiendo de la plataforma usada.

7.2. Doxygen
Toda biblioteca ha de disponer de un manual de referencia donde se describan las funcionalidades que ofrece. La construccin de este documento es una tarea laboriosa, ya que las bibliotecas suelen contener multitud de elementos que son necesarios describir, como son: clases, funciones, variables,...

7.3. SVN

71

En Libgann, el manual de referencia es generado a travs de una aplicacin llamada

Doxygen,

dicho programa es capaz de reconocer las estructuras de

muchos lenguajes, generando para ellas la documentacin apropiada. El funcionamiento de

Doxygen

es muy sencillo, partimos de:

Un chero de conguracin Doxyfile: Es donde se especica como


se generar la documentacin.

Un cdigo fuente: El cdigo fuente tratado por Doxygen estar comentado bajo una sintaxis especial, a travs de la cual, le comunicaremos a Doxygen informacin relacionada con el elemento documentado. Dados estos dos elementos ejecutaremos Doxygen. ste generar la documentacin en varios posibles formatos de salida congurados en el

Doxyfile.

Una de las mayores ventajas que aporta Doxygen, es que al reconocer las estructuras del lenguaje, la modicacin de stas, no implicar que el desarrollador deba recticar manualmente la documentacin, ya que de esta tarea se har cargo Doxygen. Entre las caractersticas ms importantes de Doxygen podemos encontrar: Generacin de documentacin en mltiples formatos de salida. Soporte para varios idiomas. Se encuentra bajo licencia GPL.

7.3. SVN
En todo proyecto software, se ha de llevar en todo momento un control de los cambios realizados por cada desarrollador. Destinadas a tal n, existen aplicaciones como:

cvs, svn, GNU Arch...

Estas aplicaciones nos facilitarn

realizar el desarrollo de un proyecto entre varias personas, controlando que los cambios realizados por cada usuario no se pisen con los cambios de los dems.

7.4. Graphviz
Graphviz es un proyecto de software libre que permite obtener representaciones grcas de grafos. Se compone de: Un conjunto de programas (

dot, neato, fdp, twopi

circo )

que permi-

ten obtener la representacin grca de los grafos. Cada uno de estos programas usar un algoritmo diferente para disear los grafos. Todos estos programas reciben el grafo a travs de un ujo que hace uso de un lenguaje denido por Graphviz.

72

CAPTULO 7. HERRAMIENTAS UTILIZADAS


Una biblioteca que nos permitir dotar a nuestras aplicaciones, de las funcionalidades que proveen los programas anteriormente descritos. Con Graphviz daremos soporte a nuestro proyecto para dibujar las redes

neuronales que construyamos, aadiendo as una componente pedaggica a Libgann.

7.5. Libxml++-2.6
Libxml++-2.6 es una biblioteca para la creacin y tratamiento de cheros con formato XML, esta biblioteca es un wrapper en C++ de Libxml2, la cual est implementada en C. Libxml++-2.6 ofrece funcionalidades como: Parsear documentos XML, de forma que si dichos documentos no estn bien formados o no cumplen con la especicacin dada por un DTD, la biblioteca lanzar una excepcin que identicar el error. Permite la creacin en memoria de arboles XML de forma sencilla, los cuales pueden ser volcados posteriormente a un chero. ... Por otro lado, Libxml++-2.6 no permite la validacin de documentos XML haciendo uso de XSD, esto se convierte en un inconveniente, ya que este tipo de validacin es ms potente que la realizada por los DTD. Por tanto, a menos que Libxml++-2.6 en un futuro d soporte para XSD, tendremos que dejar de usarla, sustituyndola por Libxml2, que si permite este tipo de validacin.

Apndice A

Manual de instalacin
Libgann hace uso de las Autotools, las cuales proveen una interfaz nica de instalacin para todos aquellos programas que las usan. Partiremos de un chero empaquetado y comprimido llamado cin: 1. Descomprimiremos y desempaquetaremos el chero.

libgann-0.1.tar.gz. Para llevar

a cabo la instalacin, solo deberemos seguir los pasos enumerados a continua-

$> tar -xvf libgann-0.1.tar.gz


2. Entraremos en la carpeta desempaquetada.

$> cd libgann-0.1
3. Conguramos la compilacin e instalacin de la biblioteca.

$> ./configure
4. Compilamos Libgann.

$> make
5. Instalamos la biblioteca.

$> make install


1 2

Para ver las opciones disponibles podemos pasarle la opcin -h. Por defecto Libgann ser instalada en /usr/local.
73

74

APNDICE A. MANUAL DE INSTALACIN


6. Una vez instalada la biblioteca, deberemos actualizar la cache de bibliotecas dinmicas, con el n de aadir Libgann a sta. Para ello, es necesario aadir al chero el comando: blioteca (por defecto ser

/etc/ld.so.conf la ubicacin donde se instal la bi/usr/local/lib) y ejecutar como usuario root

$> ldconfig
7. Para desinstalar la biblioteca usaremos el comando:

$> make uninstall


Si queremos ms informacin referente a la instalacin de Libgann, deberemos consultar el chero

INSTALL

incluido en Libgann.

Apndice B

Tutorial
Este tutorial tiene el objetivo de introducir a los usuarios en el uso de Libgann, para conseguir esto, creemos que la mejor forma es exponer detalladamente un conjunto de ejemplos del uso de la biblioteca. Todos los ejemplos explicados aqu, se encuentran en la carpeta

examples

del proyecto.

B.1. Ejemplo xor


El ejemplo mostrado en esta seccin, pretende introducir al usuario en el uso de las redes neuronales supervisadas implementadas en la biblioteca, usando para ello un Multiperceptron.

1 2 3

// xor . cpp

#include <i o s t r e a m > 4 #include <l i b g a n n . hh> 5 using namespace s t d ; 6 using namespace l i b g a n n ;
7 8 9 10 11 12 13 14 15 16 17 18 19
data_in [ 0 ] = 0; 75 Data data_in ( 2 ) , data_out ( 1 ) ; SupervisedPatterns sps ; Libgann : : i n i t ( ) ;

int

main ( ) {

try

76

APNDICE B. TUTORIAL
data_in [ 1 ] data_out [ 0 ] = 0; = 0; data_out ) ) ;

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , data_in [ 0 ] data_in [ 1 ] data_out [ 0 ] = 1; = 0; = 1;

s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , data_in [ 0 ] data_in [ 1 ] data_out [ 0 ] = 0; = 1; = 1;

data_out ) ) ;

s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , data_in [ 0 ] data_in [ 1 ] data_out [ 0 ] = 1; = 1; = 0;

data_out ) ) ;

s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , s p s . s a v e ( " p a t t e r n . xml " ) ; SupervisedPatterns

data_out ) ) ;

s p s 2 ( " p a t t e r n . xml " ) ;

Multiperceptron : : Layers layers [0] layers [1] layers [2] = 2; = 3; = 1;

layers (3);

M u l t i p e r c e p t r o n mp( l a y e r s ) ; mp . draw ( " m u l t i p e r c e p t r o n . png " , cout < < " El error cometido por " png " ) ; Multiperceptron es : "

< < mp . t r a i n ( s p s 2 , < < endl ;

0.85 ,

0.35 ,

unsigned ( 1 0 0 0 ) )

mp . s a v e ( " m u l t i p e r c e p t r o n . xml " ) ;

B.1. EJEMPLO XOR


64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 }
} cout < < e . description () < < endl ; } cout < < " La salida de la red es : mp2 < < data_in ; mp2 . u p d a t e ( ) ; mp2 > > data_out ; data_in [ 0 ] data_in [ 1 ] = 1; = 0; cout < < " La salida de la red es : d a t a _ o u t = mp2 . u p d a t e ( d a t a _ i n ) ; data_in [ 0 ] data_in [ 1 ] = 0; = 0; cout < < " El error cometido por Multiperceptron 0.35 , < < mp2 . t r a i n ( s p s 2 , < < endl ; 0.85 , Multiperceptron mp2 ( " m u l t i p e r c e p t r o n . xml " ) ; es :

77

unsigned ( 1 0 0 0 ) )

"

" < < data_out [ 0 ] < < endl ;

" < < data_out [ 0 ] < < endl ;

catch ( L i b g a n n E x c e p t i o n

&e ) {

La aplicacin se divide en tres partes:

Construccin del conjunto de patrones de entrenamiento. Entrenamiento del Multiperceptron. Uso del Multiperceptron entrenado.

A continuacin explicaremos detalladamente las lneas de cdigo de cada una de estas partes, no obstante primero explicaremos las lneas que permiten usar Libgann:

78

APNDICE B. TUTORIAL

#include <l i b g a n n . hh> 5 using namespace s t d ; 6 using namespace l i b g a n n ; int


main ( ) {

7 8 9 10

Libgann : : i n i t ( ) ;

Para poder usar cualquier biblioteca es necesario incluir uno o varios cheros de cabecera, en el caso de Libgann ser necesario incluir el chero de cabecera

libgann.hh.
debido a esto, si queremos usar uno de estos elementos, deberemos

Los elementos de la biblioteca se encuentran bajo el espacio de nombres

libgann,

precederlo del citado espacio de nombres. No obstante, cuando vamos a usar muy frecuentemente elementos de la biblioteca, podemos realizar una declaracin de uso a travs de que estamos trabajando. Debemos inicializar la biblioteca, para ello, realizaremos una llamada a la funcin esttica aleatorios.

using,

especicando el espacio de nombres sobre el

init

de la clase

Libgann,

entre las responsabilidades de

este mtodo, est la de inicializar la semilla para la generacin de nmeros

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

SupervisedPatterns

sps ;

Data

data_in ( 2 ) , = 0; = 0; = 0;

data_out ( 1 ) ;

data_in [ 0 ] data_in [ 1 ] data_out [ 0 ]

s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , data_in [ 0 ] data_in [ 1 ] data_out [ 0 ] = 1; = 0; = 1;

data_out ) ) ;

s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , data_in [ 0 ] data_in [ 1 ] data_out [ 0 ] = 0; = 1; = 1;

data_out ) ) ;

B.1. EJEMPLO XOR


34 35 36 37 38 39 40 41
s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , data_out ) ) ; data_in [ 0 ] data_in [ 1 ] data_out [ 0 ] = 1; = 1; = 0; s p s . i n s e r t ( S u p e r v i s e d P a t t e r n ( data_in , data_out ) ) ;

79

En este fragmento de cdigo, construiremos el conjunto de patrones de entrenamiento que usaremos para entrenar al Multiperceptron. En Libgann un conjunto de patrones supervisados de entrenamiento se implementan haciendo uso de la clase

SupervisedPatterns.

Para construir el objeto

sps,

iremos

insertndole patrones de entrenamiento supervisados, estos estn implementados a travs de la clase por

SupervisedPattern.

Dichos patrones se componen cuyo nmero de elementos

de dos datos, uno de entrada y uno de salida. Los datos estn implementados

Data

y no son ms que un vector de

double,

depender de la arquitectura de la red neuronal que vayamos a usar, de forma que si nuestra red tiene dos entradas y una salida, el dato de entrada tendr dos elementos y el de salida uno.

43 44 45

s p s . s a v e ( " p a t t e r n . xml " ) ; SupervisedPatterns s p s 2 ( " p a t t e r n . xml " ) ;

Estas lneas muestran que no tenemos por qu construir siempre en tiempo de compilacin los conjuntos de patrones de entrenamiento, ya que podemos salvar stos con el mtodo

save

en un chero, para luego recuperarlos, con el

constructor de la clase o a travs del mtodo

load.

48 49 50 51 52 53 54

Multiperceptron : : Layers layers [0] layers [1] layers [2] = 2; = 3; = 1;

layers (3);

M u l t i p e r c e p t r o n mp( l a y e r s ) ;

Con estas lneas de cdigo creamos un Multiperceptron de tres capas, cuyo nmero de neuronas por capa es:

Capa de entrada: 2

80

APNDICE B. TUTORIAL
Capa oculta: 3 Capa de salida: 1

El tipo Layers, no es ms que un vector de

unsigned,

el cual nos permite

denir la arquitectura de la red. Para crear un Multiperceptron el constructor recibir un objeto del tipo Layers y una funcin de activacin, en este caso esta ltima no aparece porque se est usando la predeterminada (funcin sigmoidal). La eleccin de una u otra funcin, depender del dominio que queramos en la salida las neuronas de la red, en este caso las neuronas tendrn una salida en el intervalo

(0, 1).
" png " ) ;

56

mp . draw ( " m u l t i p e r c e p t r o n . png " ,

Una vez creado el Multiperceptron, podremos obtener una representacin grca de ste, para ello usaremos su mtodo

draw,

el cual recibe dos cadenas

como parmetros: el chero donde se crear la representacin y el formato de dicha representacin. Los formatos posibles son los soportados por GraphViz. En el momento de crear este manual, los formatos disponibles son:

bmp canon dot xdot cmap dia eps g gd

gd2 gif gtk hpgl ico imap cmapx imap cmapx

ismap jpg jpeg jpe mif mp pcl pdf pic

plain plain png ps ps2 svg svgz tga tif

ti

vml

vmlz

vrml

vtx

wbmp

xlib

58 59 60

cout < < " El

error

cometido

por

Multiperceptron

< < mp . t r a i n ( s p s 2 , < < endl ;

0.85 ,

0.35 ,

unsigned ( 1 0 0 0 ) )

es :

"

En estas lneas entrenamos al Multiperceptron con el conjunto de patrones de entrenamiento previamente creado, para ello usaremos la funcin cual recibe cuatro parmetros:

train,

la

B.1. EJEMPLO XOR


Patrones de entrenamiento. Factor de aprendizaje. Momento. Nmero de ciclos de entrenamiento. Pero hay algo que no cuadra, Por qu

81

respuesta es sencilla. Existen dos versiones del mtodo

unsigned(1000)?, pues bien la train, cuyos prototipos unsigned, realiza el unsigned, mientras
le dice al

solo dieren en el tipo de su ltimo parmetro. Una de las versiones recibe un

unsigned

y la otra un

double.

La versin que recibe el

entrenamiento durante el nmero de ciclos que especica el que la versin que recibe el

double,

entrenar la red mientras sta no consiga

disminuir el error especicado por el es un

double.

El

unsigned(1000)

compilador cual de las dos versiones tiene que usar, ya que el no sabe si

unsigned

o un

double.

1000

63 64 65

mp . s a v e ( " m u l t i p e r c e p t r o n . xml " ) ; Multiperceptron mp2 ( " m u l t i p e r c e p t r o n . xml " ) ;

Al igual que pasaba con los conjuntos de patrones, el Multiperceptron provee los mtodos

save

load,

que permiten salvar y cargar la red respecti-

vamente. Adems tiene un constructor que recibe un chero como parmetro, permitiendo cargar el Multiperceptron de un chero sin necesidad de crear antes ste pasndole un objeto del tipo

Layers.
por Multiperceptron 0.35 ,

67 68 69

cout < < " El

error

cometido

< < mp2 . t r a i n ( s p s 2 , < < endl ;

0.85 ,

unsigned ( 1 0 0 0 ) )

es :

"

Dado que hemos cargado guardado por

mp,

mp2

a partir del chero

multiperceptron.xml

el entrenamiento seguir como lo dejamos entonces.

72 73 74 75 76 77

data_in [ 0 ] data_in [ 1 ]

= 0; = 0;

d a t a _ o u t = mp2 . u p d a t e ( d a t a _ i n ) ; cout < < " La salida de la red es : " < < data_out [ 0 ] < < endl ;

Una vez que la red ha sido entrenada, sta est disponible para ser usada. La red neuronal recibir un dato (Data) en su entrada, cuyo nmero de

82

APNDICE B. TUTORIAL

elementos coincidir con el nmero de neuronas de la capa de entrada. Para introducir este dato en la red usaremos la funcin

update,

la cual propagar

los valores de entrada por la red neuronal, devolviendo el dato de salida producido, cuyo nmero de elementos coincidir con el nmero de neuronas de la capa de salida, en este caso dicho dato de salida solo tendr un elemento.

80 81 82 83 84 85 86 87

data_in [ 0 ] data_in [ 1 ]

= 1; = 0;

mp2 < < data_in ; mp2 . u p d a t e ( ) ; mp2 > > data_out ; cout < < " La salida de la red es : " < < data_out [ 0 ] < < endl ;

Esta es otra forma de obtener la salida de la red para una entrada dada. En este caso se realizan tres pasos: 1. Introducimos un dato en la red. 2. Actualizamos la red. 3. Obtenemos la salida. Lo que hacamos en el fragmento de cdigo anterior a ste en un solo paso, aqu se realiza en tres. Estas operaciones permitirn: Introducir un dato en la red sin necesidad de actualizar sta. Actualizar la red con su entrada actual. Obtener la salida de la red.

89 90 91 92 93

catch ( L i b g a n n E x c e p t i o n

&e ) {

cout < < e . description () < < endl ; }

Libgann provee una jerarqua de excepciones cuya clase base es esta clase dene un mtodo

LibgannException, description que devolver una cadena con la des-

cripcin del error producido. Si queremos ver como acta, podemos probar a pasarle a la red del ejemplo un dato de tres elementos.

Apndice C

Manual de referencia

83

Manual de referencia

Generado por Doxygen 1.5.6

ndice general
1. ndice de clases 1.1. Jerarqua de la clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. ndice de clases 2.1. Lista de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Indice de archivos 3.1. Lista de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Documentacin de las clases 4.1. Referencia de la Estructura libgann::ConvergeError . . . . . . . . . . . . . . . . . . . . . 4.1.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Referencia de la Estructura libgann::DataError . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Referencia de la Estructura libgann::ForbiddenFunctionError . . . . . . . . . . . . . . . . 4.3.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Referencia de la Estructura libgann::FunctionException . . . . . . . . . . . . . . . . . . . 4.4.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5. Referencia de la Clase libgann::Hopeld . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.2. Documentacin de los Tipos Denidos miembros de la clase . . . . . . . . . . . 4.5.2.1. 4.5.3.1. 4.5.3.2. 4.5.4.1. 4.5.4.2. 4.5.4.3. Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hopeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hopeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.3. Documentacin del constructor y destructor . . . . . . . . . . . . . . . . . . . . . 1 1 3 3 5 5 7 7 8 9 9 10 10 11 11 12 13 13 13 14 14 14 14 14 15 15

4.5.4. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . .

II

NDICE GENERAL 4.5.4.4. 4.5.4.5. 4.5.4.6. 4.5.4.7. 4.5.4.8. 4.5.4.9. train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . operator<< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . operator>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . valued_patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 16 16 16 16 17 19 20 21 21 21 21 21 22 22 22 22 23 23 24 24 24 25 25 25 25 27 27 28 28 28 28 29 29 31

4.5.4.10. draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6. Referencia de la Clase libgann::Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.2. Documentacin de los Tipos Denidos miembros de la clase . . . . . . . . . . . 4.6.2.1. 4.6.3.1. 4.6.3.2. 4.6.4.1. 4.6.4.2. 4.6.4.3. 4.6.4.4. 4.6.4.5. 4.6.4.6. 4.6.4.7. 4.6.4.8. 4.6.4.9. Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . operator<< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . operator>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . valued_patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.3. Documentacin del constructor y destructor . . . . . . . . . . . . . . . . . . . . .

4.6.4. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . .

4.6.4.10. save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.4.11. load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.4.12. draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7. Referencia de la Estructura libgann::LayersException . . . . . . . . . . . . . . . . . . . . 4.7.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8. Referencia de la Clase libgann::Libgann . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8.2. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.8.2.1. init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9. Referencia de la Estructura libgann::LibgannException . . . . . . . . . . . . . . . . . . . 4.9.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10. Referencia de la Clase libgann::Multiperceptron . . . . . . . . . . . . . . . . . . . . . . .

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

NDICE GENERAL 4.10.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.2. Documentacin de los Tipos Denidos miembros de la clase . . . . . . . . . . . 4.10.2.1. Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.3. Documentacin del constructor y destructor . . . . . . . . . . . . . . . . . . . . . 4.10.3.1. Multiperceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.3.2. Multiperceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.10.4.1. init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.2. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.3. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.4. train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.5. train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.6. error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.7. operator<< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.8. operator>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.9. valued_patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.10.save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.11.load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4.12.draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11. Referencia de la plantilla de la Clase libgann::NeuralNetwork< A > . . . . . . . . . . . . 4.11.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.2. Documentacin de los Tipos Denidos miembros de la clase . . . . . . . . . . . 4.11.2.1. Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.3. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.11.3.1. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.3.2. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.3.3. operator<< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.3.4. operator>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.3.5. save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.3.6. load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11.3.7. draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.12. Referencia de la Estructura libgann::NumLayersError . . . . . . . . . . . . . . . . . . . . 4.12.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.13. Referencia de la Estructura libgann::NumNeuronsLayersError . . . . . . . . . . . . . . . 4.13.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.14. Referencia de la Estructura libgann::NumPatternsError . . . . . . . . . . . . . . . . . . .
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

III

32 32 32 33 33 33 33 33 33 34 34 35 35 35 36 36 36 36 37 39 40 40 40 40 40 40 41 41 41 41 42 44 44 45 45 46

IV

NDICE GENERAL 4.14.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.15. Referencia de la Estructura libgann::PatternError . . . . . . . . . . . . . . . . . . . . . . 4.15.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.16. Referencia de la Estructura libgann::PatternsError . . . . . . . . . . . . . . . . . . . . . . 4.16.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.17. Referencia de la Estructura libgann::PatternsException . . . . . . . . . . . . . . . . . . . 4.17.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.18. Referencia de la Estructura libgann::PerformanceException . . . . . . . . . . . . . . . . . 4.18.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19. Referencia de la Clase libgann::RadialBasis . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.2. Documentacin de los Tipos Denidos miembros de la clase . . . . . . . . . . . 4.19.2.1. Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.3. Documentacin del constructor y destructor . . . . . . . . . . . . . . . . . . . . . 4.19.3.1. RadialBasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.3.2. RadialBasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.19.4.1. init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.2. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.3. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.4. train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.5. train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.6. error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.7. operator<< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.8. operator>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.9. valued_patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.10.save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.11.load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19.4.12.draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.20. Referencia de la Clase libgann::Rng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.20.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.20.2. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.20.2.1. operator() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21. Referencia de la plantilla de la Clase libgann::SupervisedNeuralNetwork< A > . . . . . . 4.21.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.2. Documentacin de los Tipos Denidos miembros de la clase . . . . . . . . . . . 46 47 47 48 48 49 49 50 50 51 52 53 53 53 53 53 54 54 54 54 54 55 56 56 56 56 57 57 57 59 59 59 59 60 61 61

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

NDICE GENERAL 4.21.2.1. Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.21.3.1. error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.2. valued_patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.3. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.4. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.5. operator<< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.6. operator>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.7. save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.8. load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.21.3.9. draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.22. Referencia de la Clase libgann::SupervisedPattern . . . . . . . . . . . . . . . . . . . . . . 4.22.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.22.2. Documentacin del constructor y destructor . . . . . . . . . . . . . . . . . . . . . 4.22.2.1. SupervisedPattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23. Referencia de la Clase libgann::SupervisedPatterns . . . . . . . . . . . . . . . . . . . . . 4.23.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23.2. Documentacin del constructor y destructor . . . . . . . . . . . . . . . . . . . . . 4.23.2.1. SupervisedPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23.2.2. SupervisedPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23.3. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.23.3.1. insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23.3.2. operator[ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23.3.3. save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23.3.4. load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24. Referencia de la plantilla de la Clase libgann::UnsupervisedNeuralNetwork< A > . . . . 4.24.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.2. Documentacin de los Tipos Denidos miembros de la clase . . . . . . . . . . . 4.24.2.1. Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.3. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.24.3.1. valued_patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.3.2. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.3.3. update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.3.4. operator<< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.3.5. operator>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.3.6. save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

61 61 61 62 62 62 62 63 63 63 63 65 65 65 65 67 67 67 67 68 68 68 68 68 68 70 71 71 71 71 71 72 72 72 72 73

VI

NDICE GENERAL 4.24.3.7. load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24.3.8. draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25. Referencia de la Clase libgann::UnsupervisedPatterns . . . . . . . . . . . . . . . . . . . . 4.25.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25.2. Documentacin del constructor y destructor . . . . . . . . . . . . . . . . . . . . . 4.25.2.1. UnsupervisedPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25.2.2. UnsupervisedPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25.3. Documentacin de las funciones miembro . . . . . . . . . . . . . . . . . . . . . . 4.25.3.1. insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25.3.2. operator[ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25.3.3. save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25.3.4. load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.26. Referencia de la Estructura libgann::XmlException . . . . . . . . . . . . . . . . . . . . . 4.26.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.27. Referencia de la Estructura libgann::XmlValidationError . . . . . . . . . . . . . . . . . . 4.27.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 73 75 75 75 75 76 76 76 76 76 76 78 78 79 79 81 81 83 83 83 84 84 85 85 86 86 87 87 88 88 89 89 90 91 92

5. Documentacin de archivos 5.1. Referencia del Archivo exception.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2. Documentacin de las deniciones . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2.1. THROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Referencia del Archivo functions.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Referencia del Archivo hopeld.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4. Referencia del Archivo jordan.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5. Referencia del Archivo libgann.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6. Referencia del Archivo multiperceptron.hh . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7. Referencia del Archivo neural_network.hh . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8. Referencia del Archivo pattern.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9. Referencia del Archivo radial_basis.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

NDICE GENERAL 5.9.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10. Referencia del Archivo rng.hh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.11. Referencia del Archivo supervised_neural_network.hh . . . . . . . . . . . . . . . . . . . 5.11.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.12. Referencia del Archivo unsupervised_neural_network.hh . . . . . . . . . . . . . . . . . . 5.12.1. Descripcin detallada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

VII

92 93 93 94 94 95 95

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

Captulo 1

ndice de clases
1.1. Jerarqua de la clase
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 29 11 10 27 44 45 49 9 46 47 48 50 7 78 79 39 60 19 31 70 39 60 51 70 12 39 60 39 60 59

Esta lista de herencias esta ordenada aproximadamente por orden alfabtico: libgann::Libgann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . libgann::LibgannException . . . . . . . . . . . . . . . . . . . . . . . . . libgann::FunctionException . . . . . . . . . . . . . . . . . . . . . . . libgann::ForbiddenFunctionError . . . . . . . . . . . . . . . . . . libgann::LayersException . . . . . . . . . . . . . . . . . . . . . . . . libgann::NumLayersError . . . . . . . . . . . . . . . . . . . . . . libgann::NumNeuronsLayersError . . . . . . . . . . . . . . . . . libgann::PatternsException . . . . . . . . . . . . . . . . . . . . . . . libgann::DataError . . . . . . . . . . . . . . . . . . . . . . . . . libgann::NumPatternsError . . . . . . . . . . . . . . . . . . . . . libgann::PatternError . . . . . . . . . . . . . . . . . . . . . . . . libgann::PatternsError . . . . . . . . . . . . . . . . . . . . . . . . libgann::PerformanceException . . . . . . . . . . . . . . . . . . . . . libgann::ConvergeError . . . . . . . . . . . . . . . . . . . . . . . libgann::XmlException . . . . . . . . . . . . . . . . . . . . . . . . . libgann::XmlValidationError . . . . . . . . . . . . . . . . . . . . libgann::NeuralNetwork< A > . . . . . . . . . . . . . . . . . . . . . . . libgann::SupervisedNeuralNetwork< A > . . . . . . . . . . . . . . . libgann::Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . libgann::Multiperceptron . . . . . . . . . . . . . . . . . . . . . . libgann::UnsupervisedNeuralNetwork< A > . . . . . . . . . . . . . libgann::NeuralNetwork< double > . . . . . . . . . . . . . . . . . . . . libgann::SupervisedNeuralNetwork< double > . . . . . . . . . . . . libgann::RadialBasis . . . . . . . . . . . . . . . . . . . . . . . . libgann::UnsupervisedNeuralNetwork< double > . . . . . . . . . . . libgann::Hopeld . . . . . . . . . . . . . . . . . . . . . . . . . . libgann::NeuralNetwork< libgann::LinkJordan > . . . . . . . . . . . . . libgann::SupervisedNeuralNetwork< libgann::LinkJordan > . . . . . libgann::NeuralNetwork< libgann::LinkMultiperceptron > . . . . . . . . libgann::SupervisedNeuralNetwork< libgann::LinkMultiperceptron > libgann::Rng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ndice de clases libgann::SupervisedPattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . libgann::SupervisedPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . libgann::UnsupervisedPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 67 75

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

Captulo 2

ndice de clases
2.1. Lista de clases
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 9 10 11 12 19 27 28 29 31 39 44 45 46 47 48 49 50 51 59 60 65 67 70 75 78 79

Lista de las clases, estructuras, uniones e interfaces con una breve descripcin: libgann::ConvergeError (Error de convergencia ) . . . . . . . . . . . . . . . . libgann::DataError (Error de dato ) . . . . . . . . . . . . . . . . . . . . . . . libgann::ForbiddenFunctionError (Error de funcin ) . . . . . . . . . . . . . libgann::FunctionException (Excepcin de funcin ) . . . . . . . . . . . . . libgann::Hopeld (Red de Hopeld ) . . . . . . . . . . . . . . . . . . . . . . libgann::Jordan (Red de Jordan ) . . . . . . . . . . . . . . . . . . . . . . . . libgann::LayersException (Excepcin de capas ) . . . . . . . . . . . . . . . . libgann::Libgann (Clase Libgann ) . . . . . . . . . . . . . . . . . . . . . . . libgann::LibgannException (Excepcin de Libgann ) . . . . . . . . . . . . . libgann::Multiperceptron (Multiperceptron ) . . . . . . . . . . . . . . . . . . libgann::NeuralNetwork< A > (Red Neuronal ) . . . . . . . . . . . . . . . . libgann::NumLayersError (Error del nmero de capas ) . . . . . . . . . . . . libgann::NumNeuronsLayersError (Error del nmero de neuronas por capa ) . libgann::NumPatternsError (Error del nmero de patrones ) . . . . . . . . . . libgann::PatternError (Error de patrn ) . . . . . . . . . . . . . . . . . . . . libgann::PatternsError (Error de patrones ) . . . . . . . . . . . . . . . . . . . libgann::PatternsException (Excepcin de patrones ) . . . . . . . . . . . . . libgann::PerformanceException (Excepcin de ejecucin ) . . . . . . . . . . libgann::RadialBasis (Red neuronal de base radial ) . . . . . . . . . . . . . . libgann::Rng (Generador de nmeros aleatorios ) . . . . . . . . . . . . . . . libgann::SupervisedNeuralNetwork< A > (Red Neuronal Supervisada ) . . . libgann::SupervisedPattern (Patrn supervisado ) . . . . . . . . . . . . . . . libgann::SupervisedPatterns (Conjunto de patrones supervisados ) . . . . . . libgann::UnsupervisedNeuralNetwork< A > (Red Neuronal no Supervisada ) libgann::UnsupervisedPatterns (Conjunto de patrones no supervisados ) . . . libgann::XmlException (Excepcin XML ) . . . . . . . . . . . . . . . . . . . libgann::XmlValidationError (Error de validacin ) . . . . . . . . . . . . . .

ndice de clases

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

Captulo 3

Indice de archivos
3.1. Lista de archivos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 84 85 86 87 88 89 90 92 93 94 95

Lista de todos los archivos documentados y con descripciones breves: exception.hh . . . . . . . . . . functions.hh . . . . . . . . . . . hopeld.hh . . . . . . . . . . . jordan.hh . . . . . . . . . . . . libgann.hh . . . . . . . . . . . . multiperceptron.hh . . . . . . . neural_network.hh . . . . . . . pattern.hh . . . . . . . . . . . . radial_basis.hh . . . . . . . . . rng.hh . . . . . . . . . . . . . . supervised_neural_network.hh . unsupervised_neural_network.hh

Indice de archivos

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

Captulo 4

Documentacin de las clases


4.1. Referencia de la Estructura libgann::ConvergeError

Error de convergencia. #include <exception.hh> Diagrama de herencias de libgann::ConvergeError


libgann::LibgannException

libgann::PerformanceException

libgann::ConvergeError

Diagrama de colaboracin para libgann::ConvergeError:


string

msg

libgann::LibgannException

libgann::PerformanceException

libgann::ConvergeError

Mtodos pblicos
ConvergeError (const string &msg)
Constructor.

Documentacin de las clases

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.1.1.

Descripcin detallada

Error de convergencia. Especializacin de PerformanceException. Representa el error producido por falta de convergencia. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.2 Referencia de la Estructura libgann::DataError

4.2.

Referencia de la Estructura libgann::DataError

Error de dato. #include <exception.hh> Diagrama de herencias de libgann::DataError


libgann::LibgannException

libgann::PatternsException

libgann::DataError

Diagrama de colaboracin para libgann::DataError:


string

msg

libgann::LibgannException

libgann::PatternsException

libgann::DataError

Mtodos pblicos
DataError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.2.1.

Descripcin detallada

Error de dato. Especializacin de PatternsException. Representa el error de usar un dato incompatible. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

10

Documentacin de las clases

4.3.

Referencia de la Estructura libgann::ForbiddenFunctionError

Error de funcin. #include <exception.hh> Diagrama de herencias de libgann::ForbiddenFunctionError


libgann::LibgannException

libgann::FunctionException

libgann::ForbiddenFunctionError

Diagrama de colaboracin para libgann::ForbiddenFunctionError:


string

msg

libgann::LibgannException

libgann::FunctionException

libgann::ForbiddenFunctionError

Mtodos pblicos
ForbiddenFunctionError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.3.1.

Descripcin detallada

Error de funcin. Especializacin de FunctionException. Representa el error de usar una funcin de activacin no permitida. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.4 Referencia de la Estructura libgann::FunctionException

11

4.4.

Referencia de la Estructura libgann::FunctionException

Excepcin de funcin. #include <exception.hh> Diagrama de herencias de libgann::FunctionException


libgann::LibgannException

libgann::FunctionException

libgann::ForbiddenFunctionError

Diagrama de colaboracin para libgann::FunctionException:


string

msg

libgann::LibgannException

libgann::FunctionException

Mtodos pblicos
FunctionException (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.4.1.

Descripcin detallada

Excepcin de funcin. Es una clase especializada de LibgannException, que agrupa aquellas excepciones relacionadas con las funciones de activacin. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

12

Documentacin de las clases

4.5.

Referencia de la Clase libgann::Hopeld

Red de Hopeld. #include <hopfield.hh> Diagrama de herencias de libgann::Hopeld


libgann::NeuralNetwork< double >

libgann::UnsupervisedNeuralNetwork< double >

libgann::Hopfield

Diagrama de colaboracin para libgann::Hopeld:

vector< Neuron * >

outputs inputs

libgann::NeuralNetwork< double >

libgann::UnsupervisedNeuralNetwork< double >

vector< Neuron >

neurons

libgann::Hopfield

Tipos pblicos
typedef vector< unsigned > Layers
Tipo usado para especicar la arquitectura de la red.

Mtodos pblicos
Hopeld (const Layers &layers) throw (NumLayersError, NumNeuronsLayersError)
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.5 Referencia de la Clase libgann::Hopeld


Constructor.

13

Hopeld (const char path) throw (XmlValidationError)


Constructor.

void init (double a=-1, double b=1)


Inicializa la red de Hopeld.

Data update (const Data &data_in) throw (DataError)


Propaga por la red el dato de entrada dado como parmetro.

void update ()
Propaga por la red los valores ya existentes en la entrada de sta.

void train (const UnsupervisedPatterns &patterns) throw (PatternsError)


Entrena la red de Hopeld para unos patrones dados a travs de la regla de Hebb.

void operator<< (const Data &data) throw (DataError)


Introduce en la entrada de la red un dato.

void operator>> (Data &data) const


Devuelve por referencia la salida de la red.

bool valued_patterns (const UnsupervisedPatterns &patterns) const


Valida los patrones de entrenamiento.

void save (const char path) const


Guarda en el chero dado la red neuronal en formato XML.

void load (const char path) throw (XmlValidationError)


Carga la red neuronal especicada en el chero dado.

void draw (const char path, const char format) const


Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.

4.5.1.

Descripcin detallada

Red de Hopeld. Esta clase implementa el modelo de Hopeld, el cual consiste en una red neuronal monocapa recursiva con aprendizaje no supervisado.

4.5.2.
4.5.2.1.

Documentacin de los Tipos Denidos miembros de la clase


typedef vector<unsigned> libgann::NeuralNetwork< double >::Layers [inherited]

Tipo usado para especicar la arquitectura de la red. Para construir la red ser necesario denir la arquitectura (nmero de capas y nmero de neuronas por capa) de sta. Para ello usaremos un objeto del tipo Layers, el cual no es ms que un vector de enteros positivos.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

14

Documentacin de las clases

El nmero de elementos de este vector, corresponder con el nmero de capas, mientras que cada entero positivo del vector, denir el nmero de neuronas de cada capa. Como ejemplo, supongamos que tenemos un objeto del tipo Layers dado por (3,5,1), a travs de este objeto podramos construir una red de tres capas, en la cual la primera capa tendra tres neuronas, la segunda cinco y la tercera una.

4.5.3.
4.5.3.1.

Documentacin del constructor y destructor


libgann::Hopeld::Hopeld (const Layers & layers) throw (NumLayersError, NumNeuronsLayersError)

Constructor. Este constructor crea una red de Hopeld cuya arquitectura viene dada por el objeto layers y cuya funcin de activacin es obligadamente la funcin escaln. Una vez crea la red, el constructor llama al mtodo init() de la clase con sus parmetros por defecto, con lo cual, la red se inicializa en su construccin. Parmetros: layers referencia constante a un objeto de la clase Layers. Toda red de Hopeld se construir a partir de este objeto, el cual especica el nmero de neuronas que tendr la red. Debemos destacar, que dicho objeto no es ms que un vector de unsigned, el cual deberemos construir antes de pasarselo a la red. Dado que las redes de Hopeld tienen estrictamente una capa, el vector del tipo Layers tendr un solo elemento, de no ser as, se disparar la excepcin NumLayersError. Por otro lado tampoco podremos denir la capa con cero neuronas, ya que esto carece de sentido. En caso de que se dara esta circunstancia, se disparar la excepcin NumNeuronsLayersError. layers Especica la arquitectura de la red neuronal.

4.5.3.2.

libgann::Hopeld::Hopeld (const char path) throw (XmlValidationError) [inline]

Constructor. Este constructor crea una red basndose en la informacin contenida en el chero que recibe como parmetro, para ello, dicho chero deber cumplir la especicacin dada a travs del DTD asociado a la red de Hopeld, en caso de no ser as, el constructor lanzar la excepcin XmlValidationError. Parmetros: path Fichero donde se encuentra la especicacin de la red que vamos a cargar.

4.5.4.
4.5.4.1.

Documentacin de las funciones miembro


void libgann::Hopeld::init (double a = -1, double b = 1)

Inicializa la red de Hopeld. Este mtodo inicializa los umbrales de la red con valores aleatorios, los cuales, estarn comprendidos en el intervalo denido por los parmetros de entrada. No es necesario que el primer parmetro sea menor que el segundo como se podra intuir, el intervalo se formar entre el menor de los dos parmetros y el mayor, independientemente de en que posicin estn el menor y mayor.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.5 Referencia de la Clase libgann::Hopeld 4.5.4.2.

15

Data libgann::Hopeld::update (const Data & data_in) throw (DataError) [virtual]

Propaga por la red el dato de entrada dado como parmetro. Este mtodo introduce por la entrada de la red un dato para posteriormente propagarlo hacia la salida de sta. El dato introducido no es ms que un vector formado por valores del tipo double. El nmero de elementos de ste tendr que coincidir con el nmero de neuronas existentes en la capa de entrada de la red . De no ser as, se disparar la excepcin DataError. Parmetros: data_in Dato que ser propagado por la red. Devuelve: El mtodo devuelve el dato que se encuentra en la salida de la red despus de la propagacin. Implementa libgann::NeuralNetwork< double >. 4.5.4.3. void libgann::Hopeld::update () [virtual]

Propaga por la red los valores ya existentes en la entrada de sta. En este mtodo, a diferencia del mtodo anterior, no se recibe un dato de entrada, por el contrario la red propagar el valor ya existente en su entrada. Implementa libgann::NeuralNetwork< double >. 4.5.4.4. void libgann::Hopeld::train (const UnsupervisedPatterns & patterns) throw (PatternsError)

Entrena la red de Hopeld para unos patrones dados a travs de la regla de Hebb. Para entrenar la red, necesitamos un conjunto de patrones de entrenamiento. Cada patrn estar formado en este caso por un solo dato, ya que la red trabaja bajo un aprendizaje no supervisado, de forma, que el dato deber contener el mismo nmero de elementos que neuronas hay en la red. De no ser as, se lanzar la excepcin PatternsError, debida a la incompatibilidad de los patrones para la red. Parmetros: patterns Patrones de entrenamiento

4.5.4.5.

void libgann::Hopeld::operator<< (const Data & data) throw (DataError) [virtual]

Introduce en la entrada de la red un dato. Este mtodo coloca en la entrada de la red el dato dado. Si existiera alguna incompatibilidad de dicho dato con la arquitectura de la red (el nmero de elementos del dato fuera distinto al nmero de neuronas de entrada), se lanzara la excepcin DataError. Parmetros: data Dato que se introducir en la entrada de la red. Implementa libgann::NeuralNetwork< double >.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

16 4.5.4.6.

Documentacin de las clases void libgann::Hopeld::operator>> (Data & data) const [virtual]

Devuelve por referencia la salida de la red. Este mtodo coloca la salida de la red en el objeto pasado por referencia. Parmetros: data Dato pasado por referencia donde se introducir la salida de la red. Implementa libgann::NeuralNetwork< double >. 4.5.4.7. bool libgann::Hopeld::valued_patterns (const UnsupervisedPatterns & patterns) const [virtual]

Valida los patrones de entrenamiento. Este mtodo se encarga de validar que un conjunto de patrones son compatibles con la arquitectura de la red, para ello, comprueba que el nmero de elementos de cada patrn, corresponda con el nmero de neuronas de la capa de entrada. Parmetros: patterns Patrones a evaluar. Devuelve: Devuelve bool si el conjunto de patrones es vlido para la red y false en caso contrario. Implementa libgann::UnsupervisedNeuralNetwork< double >. 4.5.4.8. void libgann::Hopeld::save (const char path) const [virtual]

Guarda en el chero dado la red neuronal en formato XML. Este mtodo se encarga de guardar la red neuronal en un chero, de forma que podamos recuperar en un futuro los valores conseguidos a travs de los diferentes procesos de aprendizaje. Parmetros: path Ubicacin donde se crear el chero. Implementa libgann::NeuralNetwork< double >. 4.5.4.9. void libgann::Hopeld::load (const char path) throw (XmlValidationError) [virtual]

Carga la red neuronal especicada en el chero dado. Este mtodo cargar la red especicada en el chero dado, para ello dicho chero deber cumplir la especicacin dada a travs del DTD asociado al modelo. En caso de no ser as, el mtodo lanzar la excepcin XmlValidationError. Implementa libgann::NeuralNetwork< double >.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.5 Referencia de la Clase libgann::Hopeld 4.5.4.10. void libgann::Hopeld::draw (const char path, const char format) const [virtual]

17

Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz. Este mtodo crear una representacin grca de la red neuronal en una ubicacin dada. Parmetros: path Ubicacin donde se crear el chero. format Formato de salida para el chero. Los formatos disponibles son los mismos que con GraphViz: bmp Windows Bitmap Format canon dot xdot DOT cmap Client-side imagemap (deprecated) dia Dia format eps Encapsulated PostScript g FIG gd gd2 GD/GD2 formats gif GIF gtk GTK canvas hpgl HP-GL/2 ico Icon Image File Format imap cmapx Server-side and client-side imagemaps imap_np cmapx_np Server-side and client-side imagemaps ismap Server-side imagemap (deprecated) jpg jpeg jpe JPEG mif FrameMaker MIF format mp MetaPost pcl PCL pdf Portable Document Format (PDF) pic PIC plain plain-ext Simple text format png Portable Network Graphics format ps PostScript ps2 PostScript for PDF svg svgz Scalable Vector Graphics tga Truevision Targa Format (TGA) tif tiff TIFF (Tag Image File Format)
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

18 vml vmlz Vector Markup Language (VML) vrml VRML vtx Visual Thought format wbmp Wireless BitMap format xlib Xlib canvas Reimplementado de libgann::NeuralNetwork< double >.

Documentacin de las clases

La documentacin para esta clase fue generada a partir del siguiente chero: hopeld.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.6 Referencia de la Clase libgann::Jordan

19

4.6.

Referencia de la Clase libgann::Jordan

Red de Jordan. #include <jordan.hh> Diagrama de herencias de libgann::Jordan


libgann::NeuralNetwork< A >

libgann::SupervisedNeuralNetwork< libgann::LinkJordan >

libgann::Jordan

Diagrama de colaboracin para libgann::Jordan:


vector< Neuron * >

outputs inputs

libgann::NeuralNetwork< A >

libgann::SupervisedNeuralNetwork< libgann::LinkJordan >

libgann::Function

libgann::Jordan

Tipos pblicos
typedef vector< unsigned > Layers
Tipo usado para especicar la arquitectura de la red.

Mtodos pblicos
Jordan (const Layers &layers, const Function function=SIGMOID) throw (NumNeuronsLayersError, NumLayersError, ForbiddenFunctionError)
Constructor.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

20

Documentacin de las clases

Jordan (const char path) throw (XmlValidationError)


Constructor.

void init (double a=-1, double b=1, double c=0, double d=0, double e=0)
Inicializa la red de Jordan.

Data update (const Data &data_in) throw (DataError)


Propaga por la red el dato de entrada dado como parmetro.

void update ()
Propaga por la red los valores ya existentes en la entrada de sta.

unsigned train (const SupervisedPatterns &patterns, double learn_factor, double momentum_factor, double inerc_factor, double max_error) throw (PatternsError)
Entrena la red de Jordan con un error prejado.

double train (const SupervisedPatterns &patterns, double learn_factor, double momentum_factor, double inerc_factor, unsigned n) throw (PatternsError)
Entrena la red de Jordan un nmero de iteraciones.

double error (const SupervisedPatterns &patterns) throw (PatternsError)


Devuelve el error que comete la red para los patrones dados.

void operator<< (const Data &data) throw (DataError)


Introduce en la entrada de la red un dato.

void operator>> (Data &data) const


Devuelve por referencia la salida de la red.

bool valued_patterns (const SupervisedPatterns &patterns) const


Valida un conjunto de patrones.

void save (const char path) const


Guarda en el chero dado la red neuronal en formato XML.

void load (const char path) throw (XmlValidationError)


Carga la red neuronal especicada en el chero dado.

void draw (const char path, const char format) const


Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.

4.6.1.

Descripcin detallada

Red de Jordan. Esta clase implementa la red neuronal de Jordan.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.6 Referencia de la Clase libgann::Jordan

21

4.6.2.
4.6.2.1.

Documentacin de los Tipos Denidos miembros de la clase


template<class A> typedef vector<unsigned> libgann::NeuralNetwork< A >::Layers [inherited]

Tipo usado para especicar la arquitectura de la red. Para construir la red ser necesario denir la arquitectura (nmero de capas y nmero de neuronas por capa) de sta. Para ello usaremos un objeto del tipo Layers, el cual no es ms que un vector de enteros positivos. El nmero de elementos de este vector, corresponder con el nmero de capas, mientras que cada entero positivo del vector, denir el nmero de neuronas de cada capa. Como ejemplo, supongamos que tenemos un objeto del tipo Layers dado por (3,5,1), a travs de este objeto podramos construir una red de tres capas, en la cual la primera capa tendra tres neuronas, la segunda cinco y la tercera una.

4.6.3.
4.6.3.1.

Documentacin del constructor y destructor


libgann::Jordan::Jordan (const Layers & layers, const Function function = SIGMOID) throw (NumNeuronsLayersError, NumLayersError, ForbiddenFunctionError)

Constructor. Este constructor crea una red de Jordan cuya arquitectura viene dada por el objeto layers y cuya funcin de activacin queda determinada por un puntero constante a un objeto de la clase Function, cuyo valor por defecto es SIGMOID. Una vez crea la red, el constructor llama al mtodo init() de la clase con sus parmetros por defecto, con lo cual, la red se inicializa en su construccin. Parmetros: layers referencia constante a un objeto de la clase Layers. Toda red de Jordan se construir a partir de este objeto, el cual especica el nmero de neuronas que tendr la red en cada capa. Debemos destacar, que dicho objeto no es ms que un vector de unsigned, el cual deberemos construir antes de pasarselo al constructor. Dado que este objeto especica la arquitectura de la red, al menos ste denir una capa, de no ser as, se disparar la excepcin ZeroLayersError. Por otro lado tampoco podremos denir ninguna capa con cero neuronas, ya que esto carece de sentido. En caso de que se dara esta circunstancia, se disparar la excepcin NumNeuronsLayersError. layers Especica la arquitectura de la red neuronal. function Especica la funcin de activacin que usar la red de Jordan. Los posibles valores son: SIGMOID y HYPERBOLIC_TANGENT.

4.6.3.2.

libgann::Jordan::Jordan (const char path) throw (XmlValidationError) [inline]

Constructor. Este constructor crea una red basndose en la informacin contenida en el chero que recibe como parmetro, para ello, dicho chero deber cumplir la especicacin dada a travs del DTD asociado a la red de Jordan, en caso de no ser as, el constructor lanzar la excepcin XmlValidationError. Parmetros: path Fichero donde se encuentra la especicacin de la red que vamos a cargar.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

22

Documentacin de las clases

4.6.4.
4.6.4.1.

Documentacin de las funciones miembro


void libgann::Jordan::init (double a = -1, double b = 1, double c = 0, double d = 0, double e = 0)

Inicializa la red de Jordan. Este mtodo inicializa los pesos y umbrales de la red, no obstante no todos los valores sern inicializados de la misma forma, distinguiremos entre: Conexiones autorecurrentes en las neuronas de contexto Conexiones entre las neuronas de salida y las de contexto. Activacin inicial de las neuronas de contexto. El resto de conexiones y umbrales. Parmetros: a Extremo del intervalo que dene los valores a asignar a los pesos y umbrales citados en ltima instancia en la lista anterior. b Extremo del intervalo que dene los valores a asignar a los pesos y umbrales citados en ltima instancia en la lista anterior. No es necesario que el primer parmetro sea menor que el segundo como se podra intuir, el intervalo se formar entre el menor de los dos parmetros y el mayor, independientemente de en que posicin estn el menor y mayor. c Valor de los pesos de las conexiones auto recurrentes en las neuronas de contexto. d Valor de los pesos de las conexiones entre la capa de salida y contexto. e Valor de la activacin inicial de las neuronas de contexto. 4.6.4.2. Data libgann::Jordan::update (const Data & data_in) throw (DataError) [virtual]

Propaga por la red el dato de entrada dado como parmetro. Este mtodo introduce por la entrada de la red un dato para posteriormente propagarlo hacia la salida de sta. El dato introducido no es ms que un vector formado por valores del tipo double. El nmero de elementos de ste tendr que coincidir con el nmero de neuronas existentes en la capa de entrada de la red . De no ser as, se disparar la excepcin DataError. Parmetros: data_in Dato que ser propagado por la red. Devuelve: El mtodo devuelve el dato que se encuentra en la salida de la red despus de la propagacin. Implementa libgann::NeuralNetwork< A >. 4.6.4.3. void libgann::Jordan::update () [virtual]

Propaga por la red los valores ya existentes en la entrada de sta. En este mtodo, a diferencia del mtodo anterior, no se recibe un dato de entrada, por el contrario la red propagar el valor ya existente en su entrada. Implementa libgann::NeuralNetwork< A >.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.6 Referencia de la Clase libgann::Jordan 4.6.4.4. unsigned libgann::Jordan::train (const SupervisedPatterns & patterns, double learn_factor, double momentum_factor, double inerc_factor, double max_error) throw (PatternsError)

23

Entrena la red de Jordan con un error prejado. Este mtodo nos permitir entrenar la red jando un error mximo, de forma que cuando sta obtenga un error menor que el prejado para los patrones de entrada, el mtodo terminar, devolviendo el nmero de interacciones realizadas en el entrenamiento. Para entrenar la red de Jordan, necesitamos un conjunto de patrones de entrenamiento. Cada uno de estos patrones estar formado por dos datos: una entrada y una salida esperada. El nmero de elementos del dato de entrada, deber ser el mismo que el nmero de neuronas en la capa de entrada, mientras que el nmero de elementos del dato de salida, deber coincidir con el nmero de neuronas de la capa de salida. De no darse alguna de estas dos condiciones, se lanzar la excepcin PatternsError, debido a la incompatibilidad de los patrones con la red. Parmetros: patterns Patrones de entrenamiento. learn_factor Factor de aprendizaje. momentum_factor Momento. inerc_factor Factor de aprendizaje forzado. Este factor nos permite actualizar las neuronas de contexto con un valor comprendido entre la salida esperada y el valor obtenido por la red. Valores cercanos a 0 nos permitirn usar la salida esperada, mientras valores cercanos a 1 nos permitirn usar la salida obtenida por la red. max_error Error mximo prejado. Cuando realizamos una llamada a este mtodo, debemos estar seguros de no usar valores confundibles con enteros en este parmetro, ya que el compilador no sabra que versin de train estamos usando. Devuelve: Devuelve el nmero de iteraciones que realiza el entrenamiento para llegar al error prejado.

4.6.4.5.

double libgann::Jordan::train (const SupervisedPatterns & patterns, double learn_factor, double momentum_factor, double inerc_factor, unsigned n) throw (PatternsError)

Entrena la red de Jordan un nmero de iteraciones. Este mtodo nos permitir entrenar la red jando un nmero de iteraciones, de forma que una vez se hayan realizado estas, el mtodo devolver el error cometido por la red. Para entrenar la red de Jordan, necesitamos un conjunto de patrones de entrenamiento. Cada uno de estos patrones estar formado por dos datos: una entrada y una salida esperada. El nmero de elementos del dato de entrada, deber ser el mismo que el nmero de neuronas en la capa de entrada, mientras que el nmero de elementos del dato de salida, deber coincidir con el nmero de neuronas de la capa de salida. De no darse alguna de estas dos condiciones, se lanzar la excepcin PatternsError, debido a la incompatibilidad de los patrones con la red. Parmetros: patterns Patrones de entrenamiento. learn_factor Factor de aprendizaje. momentum_factor Momento. inerc_factor Factor de aprendizaje forzado, este factor nos permite actualizar las neuronas de contexto con un valor comprendido entre la salida esperada y el valor obtenido por la red, valores cercanos a 0 nos permitirn usar la salida esperada, mientras valores cercanos a 1 nos permitirn usar la salida obtenida por la red.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

24

Documentacin de las clases n Nmero de iteraciones. Cuando realizamos una llamada a este mtodo, debemos estar seguros de no usar valores confundibles con double en este parmetro, ya que el compilador no sabra que versin de train estamos usando.

Devuelve: Devuelve el error cometido por la red para los patrones de entrada una vez ejecutadas todas la iteraciones del entrenamiento.

4.6.4.6.

double libgann::Jordan::error (const SupervisedPatterns & patterns) throw (PatternsError) [virtual]

Devuelve el error que comete la red para los patrones dados. Este mtodo devolver el error cometido por la red en el conjunto de patrones dado. Si se produce alguna incompatibilidad de los patrones con la arquitectura de la red, se lanzar la excepcin PatternsError. Parmetros: patterns Conjunto de patrones. Devuelve: Devuelve el error cuadrtico medio producido por la red en el conjunto de patrones. Implementa libgann::SupervisedNeuralNetwork< A >. 4.6.4.7. void libgann::Jordan::operator<< (const Data & data) throw (DataError) [virtual]

Introduce en la entrada de la red un dato. Este mtodo coloca en la entrada de la red el dato dado. Si existiera alguna incompatibilidad de dicho dato con la arquitectura de la red (el nmero de elementos del dato fuera distinto al nmero de neuronas de entrada), se lanzara la excepcin DataError. Parmetros: data Dato que se introducir en la entrada de la red. Implementa libgann::NeuralNetwork< A >. 4.6.4.8. void libgann::Jordan::operator>> (Data & data) const [virtual]

Devuelve por referencia la salida de la red. Este mtodo coloca la salida de la red en el objeto pasado por referencia. Parmetros: data Dato pasado por referencia donde se introducir la salida de la red. Implementa libgann::NeuralNetwork< A >.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.6 Referencia de la Clase libgann::Jordan 4.6.4.9. bool libgann::Jordan::valued_patterns (const SupervisedPatterns & patterns) const [virtual]

25

Valida un conjunto de patrones. Este mtodo se encarga de validar que un conjunto de patrones sea compatible con la arquitectura de la red. Parmetros: patterns Patrones a evaluar. Devuelve: Devuelve true si el conjunto de patrones es vlido para la red y false en caso contrario. Implementa libgann::SupervisedNeuralNetwork< A >. 4.6.4.10. void libgann::Jordan::save (const char path) const [virtual]

Guarda en el chero dado la red neuronal en formato XML. Este mtodo se encarga de guardar la red neuronal en un chero, de forma que podamos recuperar en un futuro los valores conseguidos a travs de los diferentes procesos de aprendizaje. Parmetros: path Ubicacin donde se crear el chero. Implementa libgann::NeuralNetwork< A >. 4.6.4.11. void libgann::Jordan::load (const char path) throw (XmlValidationError) [virtual]

Carga la red neuronal especicada en el chero dado. Este mtodo cargar la red especicada en el chero dado, para ello dicho chero deber cumplir la especicacin dada a travs del DTD asociado al modelo. En caso de no ser as, el mtodo lanzar la excepcin XmlValidationError. Implementa libgann::NeuralNetwork< A >. 4.6.4.12. void libgann::Jordan::draw (const char path, const char format) const [virtual]

Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz. Este mtodo crear una representacin grca de la red neuronal en una ubicacin dada. Parmetros: path Ubicacin donde se crear el chero. format Formato de salida para el chero. Los formatos disponibles son los mismos que con GraphViz: bmp Windows Bitmap Format canon dot
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

26 xdot DOT cmap Client-side imagemap (deprecated) dia Dia format eps Encapsulated PostScript g FIG gd gd2 GD/GD2 formats gif GIF gtk GTK canvas hpgl HP-GL/2 ico Icon Image File Format imap cmapx Server-side and client-side imagemaps imap_np cmapx_np Server-side and client-side imagemaps ismap Server-side imagemap (deprecated) jpg jpeg jpe JPEG mif FrameMaker MIF format mp MetaPost pcl PCL pdf Portable Document Format (PDF) pic PIC plain plain-ext Simple text format png Portable Network Graphics format ps PostScript ps2 PostScript for PDF svg svgz Scalable Vector Graphics tga Truevision Targa Format (TGA) tif tiff TIFF (Tag Image File Format) vml vmlz Vector Markup Language (VML) vrml VRML vtx Visual Thought format wbmp Wireless BitMap format xlib Xlib canvas Reimplementado de libgann::NeuralNetwork< A >.

Documentacin de las clases

La documentacin para esta clase fue generada a partir del siguiente chero: jordan.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.7 Referencia de la Estructura libgann::LayersException

27

4.7.

Referencia de la Estructura libgann::LayersException

Excepcin de capas. #include <exception.hh> Diagrama de herencias de libgann::LayersException


libgann::LibgannException

libgann::LayersException

libgann::NumLayersError

libgann::NumNeuronsLayersError

Diagrama de colaboracin para libgann::LayersException:


string

ms g

libgann::LibgannException

libgann::LayersException

Mtodos pblicos
LayersException (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.7.1.

Descripcin detallada

Excepcin de capas. Es una clase especializada de LibgannException, que agrupa aquellas excepciones relacionadas con la especicacin de capas. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

28

Documentacin de las clases

4.8.

Referencia de la Clase libgann::Libgann

Clase Libgann. #include <libgann.hh>

Mtodos pblicos estticos


static void init ()
Inicializa la biblioteca para poder ser usada.

4.8.1.

Descripcin detallada

Clase Libgann. Esta clase encapsula las funciones propias de la biblioteca, como puede ser la inicializacin de sta.

4.8.2.
4.8.2.1.

Documentacin de las funciones miembro


static void libgann::Libgann::init () [inline, static]

Inicializa la biblioteca para poder ser usada. Se trata de un mtodo que se encarga de inicializar la biblioteca, entre sus funciones est inicializar la semilla de nmeros aleatorios. La documentacin para esta clase fue generada a partir del siguiente chero: libgann.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.9 Referencia de la Estructura libgann::LibgannException

29

4.9.

Referencia de la Estructura libgann::LibgannException

Excepcin de Libgann. #include <exception.hh> Diagrama de herencias de libgann::LibgannException


libgann::ForbiddenFunctionError libgann::FunctionException libgann::NumLayersError

libgann::LayersException

libgann::NumNeuronsLayersError

libgann::DataError

libgann::NumPatternsError libgann::LibgannException libgann::PatternsException libgann::PatternError libgann::PerformanceException libgann::PatternsError

libgann::ConvergeError libgann::XmlException libgann::XmlValidationError

Diagrama de colaboracin para libgann::LibgannException:


string

ms g

libgann::LibgannException

Mtodos pblicos
LibgannException (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.9.1.

Descripcin detallada

Excepcin de Libgann. Clase base a partir de la cual especializaremos el resto de excepciones en Libgann.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

30

Documentacin de las clases

La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.10 Referencia de la Clase libgann::Multiperceptron

31

4.10.

Referencia de la Clase libgann::Multiperceptron

Multiperceptron. #include <multiperceptron.hh> Diagrama de herencias de libgann::Multiperceptron


libgann::NeuralNetwork< A >

libgann::SupervisedNeuralNetwork< libgann::LinkMultiperceptron >

libgann::Multiperceptron

Diagrama de colaboracin para libgann::Multiperceptron:


vector< Neuron * > outputs inputs libgann::NeuralNetwork< A > libgann::SupervisedNeuralNetwork< libgann::LinkMultiperceptron > f libgann::Function libgann::Multiperceptron

Tipos pblicos
typedef vector< unsigned > Layers
Tipo usado para especicar la arquitectura de la red.

Mtodos pblicos
Multiperceptron (const Layers &layers, const Function function=SIGMOID) throw (NumLayersError, NumNeuronsLayersError, ForbiddenFunctionError)
Constructor.

Multiperceptron (const char path) throw (XmlValidationError)


Constructor.

void init (double a=-1, double b=1)


Inicializa el Multiperceptron.

Data update (const Data &data_in) throw (DataError)


Propaga por la red el dato de entrada dado como parmetro.

void update ()
Propaga por la red los valores ya existentes en la entrada de sta.

unsigned train (const SupervisedPatterns &patterns, double learn_factor, double momentum_factor, double max_error) throw (PatternsError)
Entrena al Multiperceptron con un error prejado.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

32

Documentacin de las clases

double train (const SupervisedPatterns &patterns, double learn_factor, double momentum_factor, unsigned n) throw (PatternsError)
Entrena al Multiperceptron un nmero de iteraciones.

double error (const SupervisedPatterns &patterns) throw (PatternsError)


Devuelve el error que comete la red para los patrones dados.

void operator<< (const Data &data) throw (DataError)


Introduce en la entrada de la red un dato.

void operator>> (Data &data) const


Devuelve por referencia la salida de la red.

bool valued_patterns (const SupervisedPatterns &patterns) const


Valida un conjunto de patrones.

void save (const char path) const


Guarda en el chero dado la red neuronal en formato XML.

void load (const char path) throw (XmlValidationError)


Carga la red neuronal especicada en el chero dado.

void draw (const char path, const char format) const


Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.

4.10.1.

Descripcin detallada

Multiperceptron. Esta clase implementa la red neuronal conocida con el nombre de Multiperceptron.

4.10.2.
4.10.2.1.

Documentacin de los Tipos Denidos miembros de la clase


template<class A> typedef vector<unsigned> libgann::NeuralNetwork< A >::Layers [inherited]

Tipo usado para especicar la arquitectura de la red. Para construir la red ser necesario denir la arquitectura (nmero de capas y nmero de neuronas por capa) de sta. Para ello usaremos un objeto del tipo Layers, el cual no es ms que un vector de enteros positivos. El nmero de elementos de este vector, corresponder con el nmero de capas, mientras que cada entero positivo del vector, denir el nmero de neuronas de cada capa. Como ejemplo, supongamos que tenemos un objeto del tipo Layers dado por (3,5,1), a travs de este objeto podramos construir una red de tres capas, en la cual la primera capa tendra tres neuronas, la segunda cinco y la tercera una.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.10 Referencia de la Clase libgann::Multiperceptron

33

4.10.3.
4.10.3.1.

Documentacin del constructor y destructor


libgann::Multiperceptron::Multiperceptron (const Layers & layers, const Function function = SIGMOID) throw (NumLayersError, NumNeuronsLayersError, ForbiddenFunctionError)

Constructor. Este constructor crea un Multiperceptron cuya arquitectura viene dada por el objeto layers y cuya funcin de activacin queda determinada por un puntero constante a un objeto de la clase Function, cuyo valor por defecto es SIGMOID. Una vez crea la red, el constructor llama al mtodo init() de la clase con sus parmetros por defecto, con lo cual, la red se inicializa en su construccin. Parmetros: layers Referencia constante a un objeto de la clase Layers. Especica el nmero de neuronas que tendr el Multiperceptron en cada capa. Debemos destacar, que dicho objeto no es ms que un vector de unsigned, el cual deberemos construir antes de pasrselo al Multiperceptron. Dado que este objeto especica la arquitectura de la red, al menos ste denir una capa, de no ser as, se disparar la excepcin NumLayersError. Por otro lado, tampoco podremos denir ninguna capa con cero neuronas, ya que esto carece de sentido. En caso de que se dara esta circunstancia, se disparar la excepcin NumNeuronsLayersError. function Especica la funcin de activacin que usar el Multiperceptron. Los posibles valores son: SIGMOID y HYPERBOLIC_TANGENT. En caso de pasarle una funcin diferente se lanzar la excepcin ForbiddenFunctionError. 4.10.3.2. libgann::Multiperceptron::Multiperceptron (const char path) throw (XmlValidationError) [inline]

Constructor. Este constructor crea una red basndose en la informacin contenida en el chero que recibe como parmetro. Dicho chero deber cumplir la especicacin dada a travs un DTD asociado al Multiperceptron, en caso de no ser as, el constructor lanzar la excepcin XmlValidationError. Parmetros: path Fichero donde se encuentra la especicacin de la red que vamos a cargar.

4.10.4.
4.10.4.1.

Documentacin de las funciones miembro


void libgann::Multiperceptron::init (double a = -1, double b = 1)

Inicializa el Multiperceptron. Este mtodo inicializa los pesos y umbrales de la red con valores aleatorios, los cuales estarn comprendidos en el intervalo denido por los parmetros de entrada. No es necesario que el primer parmetro sea menor que el segundo, como se podra intuir. El intervalo se formar entre el menor de los dos parmetros y el mayor, independientemente de en que posicin estn el menor y el mayor. 4.10.4.2. Data libgann::Multiperceptron::update (const Data & data_in) throw (DataError) [virtual]

Propaga por la red el dato de entrada dado como parmetro.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

34

Documentacin de las clases

Este mtodo introduce por la entrada de la red un dato para posteriormente propagarlo hacia la salida de sta. El dato introducido no es ms que un vector formado por valores del tipo double. El nmero de elementos de ste tendr que coincidir con el nmero de neuronas existentes en la capa de entrada de la red . De no ser as, se disparar la excepcin DataError. Parmetros: data_in Dato que ser propagado por la red. Devuelve: El mtodo devuelve el dato que se encuentra en la salida de la red despus de la propagacin. Implementa libgann::NeuralNetwork< A >. 4.10.4.3. void libgann::Multiperceptron::update () [virtual]

Propaga por la red los valores ya existentes en la entrada de sta. En este mtodo, a diferencia del mtodo anterior, no se recibe un dato de entrada, por el contrario la red propagar el valor ya existente en su entrada. Implementa libgann::NeuralNetwork< A >. 4.10.4.4. unsigned libgann::Multiperceptron::train (const SupervisedPatterns & patterns, double learn_factor, double momentum_factor, double max_error) throw (PatternsError)

Entrena al Multiperceptron con un error prejado. Este mtodo nos permitir entrenar al Multiperceptron jando un error mximo, de forma que cuando el Multiperceptron obtenga un error menor que el prejado, el mtodo terminar devolviendo el nmero de iteraciones realizadas en el entrenamiento. Para entrenar al Multiperceptron, necesitamos un conjunto de patrones de entrenamiento. Cada uno de estos patrones estar formado por dos datos: una entrada y una salida esperada. El nmero de elementos del dato de entrada, deber ser el mismo que el nmero de neuronas en la capa de entrada, mientras que el nmero de elementos del dato de salida, deber coincidir con el nmero de neuronas de la capa de salida. De no darse alguna de estas dos condiciones, se lanzar la excepcin PatternsError, debido a la incompatibilidad de los patrones con la red. Parmetros: patterns Patrones de entrenamiento learn_factor Factor de aprendizaje momentum_factor Momento max_error Error mximo prejado. Cuando realizamos una llamada a este mtodo, debemos estar seguros de no usar valores confundibles con enteros en este parmetro, ya que el compilador no sabra que versin de train estamos usando. Devuelve: Devuelve el nmero de iteracines que realiza el entrenamiento para llegar al error prejado.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.10 Referencia de la Clase libgann::Multiperceptron 4.10.4.5. double libgann::Multiperceptron::train (const SupervisedPatterns & patterns, double learn_factor, double momentum_factor, unsigned n) throw (PatternsError)

35

Entrena al Multiperceptron un nmero de iteraciones. Este mtodo nos permitir entrenar al Multiperceptron jando un nmero de iteraciones. Una vez se hayan realizado stas, el mtodo devolver el error cometido por la red. Para entrenar al Multiperceptron, necesitamos un conjunto de patrones de entrenamiento. Cada uno de estos patrones estar formado por dos datos: una entrada y una salida esperada. El nmero de elementos del dato de entrada, deber ser el mismo que el nmero de neuronas en la capa de entrada, mientras que el nmero de elementos del dato de salida, deber coincidir con el nmero de neuronas de la capa de salida. De no darse alguna de estas dos condiciones, se lanzar la excepcin PatternsError, debido a la incompatibilidad de los patrones con la red. Parmetros: patterns Patrones de entrenamiento learn_factor Factor de aprendizaje momentum_factor Momento n Nmero de iteraciones. Cuando realizamos una llamada a este mtodo, debemos estar seguros de no usar valores confundibles con double en este parmetro, ya que el compilador no sabra que versin de train estamos usando. Devuelve: Devuelve el error cometido por la red una vez ejecutadas las iteraciones del entrenamiento.

4.10.4.6.

double libgann::Multiperceptron::error (const SupervisedPatterns & patterns) throw (PatternsError) [virtual]

Devuelve el error que comete la red para los patrones dados. Este mtodo devolver el error cometido por la red en el conjunto de patrones dado. Si se produce alguna incompatibilidad de los patrones con la arquitectura de la red, se lanzar la excepcin PatternsError. Parmetros: patterns Conjunto de patrones. Devuelve: Devuelve el error cuadrtico medio producido por la red en el conjunto de patrones. Implementa libgann::SupervisedNeuralNetwork< A >. 4.10.4.7. void libgann::Multiperceptron::operator<< (const Data & data) throw (DataError) [virtual]

Introduce en la entrada de la red un dato. Este mtodo coloca en la entrada de la red el dato dado. Si existiera alguna incompatibilidad de dicho dato con la arquitectura de la red (el nmero de elementos del dato fuera distinto al nmero de neuronas de entrada), se lanzara la excepcin DataError.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

36 Parmetros: data Dato que se introducir en la entrada de la red. Implementa libgann::NeuralNetwork< A >. 4.10.4.8.

Documentacin de las clases

void libgann::Multiperceptron::operator>> (Data & data) const [virtual]

Devuelve por referencia la salida de la red. Este mtodo coloca la salida de la red en el objeto pasado por referencia. Parmetros: data Dato pasado por referencia donde se introducir la salida de la red. Implementa libgann::NeuralNetwork< A >. 4.10.4.9. bool libgann::Multiperceptron::valued_patterns (const SupervisedPatterns & patterns) const [virtual]

Valida un conjunto de patrones. Este mtodo se encarga de validar que un conjunto de patrones sea compatible con la arquitectura de la red. Parmetros: patterns Patrones a evaluar. Devuelve: Devuelve true si el conjunto de patrones es vlido para la red y false en caso contrario. Implementa libgann::SupervisedNeuralNetwork< A >. 4.10.4.10. void libgann::Multiperceptron::save (const char path) const [virtual]

Guarda en el chero dado la red neuronal en formato XML. Este mtodo se encarga de guardar la red neuronal en un chero, de forma que podamos recuperar en un futuro los valores conseguidos a travs de los diferentes procesos de aprendizaje. Parmetros: path Ubicacin donde se crear el chero. Implementa libgann::NeuralNetwork< A >. 4.10.4.11. void libgann::Multiperceptron::load (const char path) throw (XmlValidationError) [virtual]

Carga la red neuronal especicada en el chero dado. Este mtodo cargar la red especicada en el chero dado, para ello dicho chero deber cumplir la especicacin dada a travs del DTD asociado al modelo. En caso de no ser as, el mtodo lanzar la excepcin XmlValidationError. Implementa libgann::NeuralNetwork< A >.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.10 Referencia de la Clase libgann::Multiperceptron 4.10.4.12. void libgann::Multiperceptron::draw (const char path, const char format) const [virtual]

37

Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz. Este mtodo crear una representacin grca de la red neuronal en una ubicacin dada. Parmetros: path Ubicacin donde se crear el chero. format Formato de salida para el chero. Los formatos disponibles son los mismos que con GraphViz: bmp Windows Bitmap Format canon dot xdot DOT cmap Client-side imagemap (deprecated) dia Dia format eps Encapsulated PostScript g FIG gd gd2 GD/GD2 formats gif GIF gtk GTK canvas hpgl HP-GL/2 ico Icon Image File Format imap cmapx Server-side and client-side imagemaps imap_np cmapx_np Server-side and client-side imagemaps ismap Server-side imagemap (deprecated) jpg jpeg jpe JPEG mif FrameMaker MIF format mp MetaPost pcl PCL pdf Portable Document Format (PDF) pic PIC plain plain-ext Simple text format png Portable Network Graphics format ps PostScript ps2 PostScript for PDF svg svgz Scalable Vector Graphics tga Truevision Targa Format (TGA) tif tiff TIFF (Tag Image File Format)
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

38 vml vmlz Vector Markup Language (VML) vrml VRML vtx Visual Thought format wbmp Wireless BitMap format xlib Xlib canvas Reimplementado de libgann::NeuralNetwork< A >.

Documentacin de las clases

La documentacin para esta clase fue generada a partir del siguiente chero: multiperceptron.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.11 Referencia de la plantilla de la Clase libgann::NeuralNetwork< A >

39

4.11.

Referencia de la plantilla libgann::NeuralNetwork< A >

de

la

Clase

Red Neuronal. #include <neural_network.hh> Diagrama de herencias de libgann::NeuralNetwork< A >


libgann::Jordan< libgann::LinkJordan > libgann::SupervisedNeuralNetwork< A > libgann::NeuralNetwork< A > libgann::UnsupervisedNeuralNetwork< A > libgann::Multiperceptron< libgann::LinkMultiperceptron >

Diagrama de colaboracin para libgann::NeuralNetwork< A >:


vector< Neuron * >

outputs inputs

libgann::NeuralNetwork< A >

Tipos pblicos
typedef vector< unsigned > Layers
Tipo usado para especicar la arquitectura de la red.

Mtodos pblicos
virtual Data update (const Data &data_in)=0 throw (DataError)
Propaga por la red el dato de entrada dado como parmetro.

virtual void update ()=0


Propaga por la red los valores ya existentes en la entrada de sta.

virtual void operator<< (const Data &data)=0 throw (DataError)


Introduce en la entrada de la red un dato.

virtual void operator>> (Data &data) const =0


Devuelve por referencia la salida de la red.

virtual void save (const char path) const =0


Guarda en el chero dado la red neuronal en formato XML.

virtual void load (const char path)=0 throw (XmlValidationError)


Carga la red neuronal especicada en el chero dado.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

40 virtual void draw (const char path, const char format) const
Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.

Documentacin de las clases

4.11.1.

Descripcin detallada

template<class A> class libgann::NeuralNetwork< A > Red Neuronal.

4.11.2.
4.11.2.1.

Documentacin de los Tipos Denidos miembros de la clase


template<class A> typedef vector<unsigned> libgann::NeuralNetwork< A >::Layers

Tipo usado para especicar la arquitectura de la red. Para construir la red ser necesario denir la arquitectura (nmero de capas y nmero de neuronas por capa) de sta. Para ello usaremos un objeto del tipo Layers, el cual no es ms que un vector de enteros positivos. El nmero de elementos de este vector, corresponder con el nmero de capas, mientras que cada entero positivo del vector, denir el nmero de neuronas de cada capa. Como ejemplo, supongamos que tenemos un objeto del tipo Layers dado por (3,5,1), a travs de este objeto podramos construir una red de tres capas, en la cual la primera capa tendra tres neuronas, la segunda cinco y la tercera una.

4.11.3.
4.11.3.1.

Documentacin de las funciones miembro


template<class A> virtual Data libgann::NeuralNetwork< A >::update (const Data & data_in) throw (DataError) [pure virtual]

Propaga por la red el dato de entrada dado como parmetro. Este mtodo introduce por la entrada de la red un dato para posteriormente propagarlo hacia la salida de sta. El dato introducido no es ms que un vector formado por valores del tipo double. El nmero de elementos de ste tendr que coincidir con el nmero de neuronas existentes en la capa de entrada de la red . De no ser as, se disparar la excepcin DataError. Parmetros: data_in Dato que ser propagado por la red. Devuelve: El mtodo devuelve el dato que se encuentra en la salida de la red despus de la propagacin. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.11.3.2. template<class A> virtual void libgann::NeuralNetwork< A >::update () [pure virtual]

Propaga por la red los valores ya existentes en la entrada de sta. En este mtodo, a diferencia del mtodo anterior, no se recibe un dato de entrada, por el contrario la red propagar el valor ya existente en su entrada. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.11 Referencia de la plantilla de la Clase libgann::NeuralNetwork< A > 4.11.3.3. template<class A> virtual void libgann::NeuralNetwork< A >::operator<< (const Data & data) throw (DataError) [pure virtual]

41

Introduce en la entrada de la red un dato. Este mtodo coloca en la entrada de la red el dato dado. Si existiera alguna incompatibilidad de dicho dato con la arquitectura de la red (el nmero de elementos del dato fuera distinto al nmero de neuronas de entrada), se lanzara la excepcin DataError. Parmetros: data Dato que se introducir en la entrada de la red. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.11.3.4. template<class A> virtual void libgann::NeuralNetwork< A >::operator>> (Data & data) const [pure virtual]

Devuelve por referencia la salida de la red. Este mtodo coloca la salida de la red en el objeto pasado por referencia. Parmetros: data Dato pasado por referencia donde se introducir la salida de la red. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.11.3.5. template<class A> virtual void libgann::NeuralNetwork< A >::save (const char path) const [pure virtual]

Guarda en el chero dado la red neuronal en formato XML. Este mtodo se encarga de guardar la red neuronal en un chero, de forma que podamos recuperar en un futuro los valores conseguidos a travs de los diferentes procesos de aprendizaje. Parmetros: path Ubicacin donde se crear el chero. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.11.3.6. template<class A> virtual void libgann::NeuralNetwork< A >::load (const char path) throw (XmlValidationError) [pure virtual]

Carga la red neuronal especicada en el chero dado. Este mtodo cargar la red especicada en el chero dado, para ello dicho chero deber cumplir la especicacin dada a travs del DTD asociado al modelo. En caso de no ser as, el mtodo lanzar la excepcin XmlValidationError. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

42 4.11.3.7.

Documentacin de las clases template<class A> void libgann::NeuralNetwork< A >::draw (const char path, const char format) const [inline, virtual]

Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz. Este mtodo crear una representacin grca de la red neuronal en una ubicacin dada. Parmetros: path Ubicacin donde se crear el chero. format Formato de salida para el chero. Los formatos disponibles son los mismos que con GraphViz: bmp Windows Bitmap Format canon dot xdot DOT cmap Client-side imagemap (deprecated) dia Dia format eps Encapsulated PostScript g FIG gd gd2 GD/GD2 formats gif GIF gtk GTK canvas hpgl HP-GL/2 ico Icon Image File Format imap cmapx Server-side and client-side imagemaps imap_np cmapx_np Server-side and client-side imagemaps ismap Server-side imagemap (deprecated) jpg jpeg jpe JPEG mif FrameMaker MIF format mp MetaPost pcl PCL pdf Portable Document Format (PDF) pic PIC plain plain-ext Simple text format png Portable Network Graphics format ps PostScript ps2 PostScript for PDF svg svgz Scalable Vector Graphics tga Truevision Targa Format (TGA) tif tiff TIFF (Tag Image File Format)
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.11 Referencia de la plantilla de la Clase libgann::NeuralNetwork< A > vml vmlz Vector Markup Language (VML) vrml VRML vtx Visual Thought format wbmp Wireless BitMap format xlib Xlib canvas

43

Reimplementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. La documentacin para esta clase fue generada a partir del siguiente chero: neural_network.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

44

Documentacin de las clases

4.12.

Referencia de la Estructura libgann::NumLayersError

Error del nmero de capas. #include <exception.hh> Diagrama de herencias de libgann::NumLayersError


libgann::LibgannException

libgann::LayersException

libgann::NumLayersError

Diagrama de colaboracin para libgann::NumLayersError:


string

ms g

libgann::LibgannException

libgann::LayersException

libgann::NumLayersError

Mtodos pblicos
NumLayersError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.12.1.

Descripcin detallada

Error del nmero de capas. Especializacin de LayersException. Representa el error de usar un objeto del tipo Layers, con un nmero de capas no permitido. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.13 Referencia de la Estructura libgann::NumNeuronsLayersError

45

4.13.

Referencia de la Estructura libgann::NumNeuronsLayersError

Error del nmero de neuronas por capa. #include <exception.hh> Diagrama de herencias de libgann::NumNeuronsLayersError
libgann::LibgannException

libgann::LayersException

libgann::NumNeuronsLayersError

Diagrama de colaboracin para libgann::NumNeuronsLayersError:


string

ms g

libgann::LibgannException

libgann::LayersException

libgann::NumNeuronsLayersError

Mtodos pblicos
NumNeuronsLayersError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.13.1.

Descripcin detallada

Error del nmero de neuronas por capa. Especializacin de LayersException. Representa el error de usar un objeto del tipo Layers que especica al menos en una de sus capas, un nmero de neuronas no permitido. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

46

Documentacin de las clases

4.14.

Referencia de la Estructura libgann::NumPatternsError

Error del nmero de patrones. #include <exception.hh> Diagrama de herencias de libgann::NumPatternsError


libgann::LibgannException

libgann::PatternsException

libgann::NumPatternsError

Diagrama de colaboracin para libgann::NumPatternsError:


string

msg

libgann::LibgannException

libgann::PatternsException

libgann::NumPatternsError

Mtodos pblicos
NumPatternsError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.14.1.

Descripcin detallada

Error del nmero de patrones. Especializacin de PatternsException. Representa el error de usar un nmero de patrones demasiado pequeo. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.15 Referencia de la Estructura libgann::PatternError

47

4.15.

Referencia de la Estructura libgann::PatternError

Error de patrn. #include <exception.hh> Diagrama de herencias de libgann::PatternError


libgann::LibgannException

libgann::PatternsException

libgann::PatternError

Diagrama de colaboracin para libgann::PatternError:


string

msg

libgann::LibgannException

libgann::PatternsException

libgann::PatternError

Mtodos pblicos
PatternError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.15.1.

Descripcin detallada

Error de patrn. Especializacin de PatternsException. Representa el error de usar un patrn incompatible. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

48

Documentacin de las clases

4.16.

Referencia de la Estructura libgann::PatternsError

Error de patrones. #include <exception.hh> Diagrama de herencias de libgann::PatternsError


libgann::LibgannException

libgann::PatternsException

libgann::PatternsError

Diagrama de colaboracin para libgann::PatternsError:


string

msg

libgann::LibgannException

libgann::PatternsException

libgann::PatternsError

Mtodos pblicos
PatternsError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.16.1.

Descripcin detallada

Error de patrones. Especializacin de PatternsException. Representa el error de usar un conjunto de patrones incompatibles. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.17 Referencia de la Estructura libgann::PatternsException

49

4.17.

Referencia de la Estructura libgann::PatternsException

Excepcin de patrones. #include <exception.hh> Diagrama de herencias de libgann::PatternsException


libgann::DataError

libgann::NumPatternsError libgann::LibgannException libgann::PatternsException libgann::PatternError

libgann::PatternsError

Diagrama de colaboracin para libgann::PatternsException:


string

msg

libgann::LibgannException

libgann::PatternsException

Mtodos pblicos
PatternsException (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.17.1.

Descripcin detallada

Excepcin de patrones. Es una clase especializada de LibgannException, que agrupa aquellas excepciones relacionadas con los patrones. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

50

Documentacin de las clases

4.18.

Referencia de la Estructura libgann::PerformanceException

Excepcin de ejecucin. #include <exception.hh> Diagrama de herencias de libgann::PerformanceException


libgann::LibgannException

libgann::PerformanceException

libgann::ConvergeError

Diagrama de colaboracin para libgann::PerformanceException:


string

msg

libgann::LibgannException

libgann::PerformanceException

Mtodos pblicos
PerformanceException (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.18.1.

Descripcin detallada

Excepcin de ejecucin. Es una clase especializada de LibgannException, que agrupa aquellas excepciones relacionadas con la ejecucin de los mtodos de la biblioteca. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.19 Referencia de la Clase libgann::RadialBasis

51

4.19.

Referencia de la Clase libgann::RadialBasis

Red neuronal de base radial. #include <radial_basis.hh> Diagrama de herencias de libgann::RadialBasis


libgann::NeuralNetwork< double >

libgann::SupervisedNeuralNetwork< double >

libgann::RadialBasis

Diagrama de colaboracin para libgann::RadialBasis:


vector< Neuron * >

outputs inputs

libgann::NeuralNetwork< double >

libgann::SupervisedNeuralNetwork< double >

vector< Neuron >

libgann::Function

neurons_inputs neurons_outputs

libgann::RadialBasis

Tipos pblicos
typedef vector< unsigned > Layers
Tipo usado para especicar la arquitectura de la red.

Mtodos pblicos
RadialBasis (const Layers &layers, const Function f=GAUSSIAN) throw (NumLayersError, NumNeuronsLayersError, NumNeuronsLayersError, ForbiddenFunctionError)
Constructor.

RadialBasis (const char path) throw (XmlValidationError)


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

52
Constructor.

Documentacin de las clases

void init (double a=-1, double b=1)


Inicializa la red neuronal de base radial.

Data update (const Data &data_in) throw (DataError)


Propaga por la red el dato de entrada dado como parmetro.

void update ()
Propaga por la red los valores ya existentes en la entrada de sta.

unsigned train (const SupervisedPatterns &patterns, double learn_factor, double max_error) throw (PatternsError, NumPatternsError, ConvergeError)
Entrena la red neuronal de base radial con un error prejado.

double train (const SupervisedPatterns &patterns, double learn_factor, unsigned n) throw (PatternsError, NumPatternsError)
Entrena la red un nmero de iteraciones.

double error (const SupervisedPatterns &patterns) throw (PatternsError)


Devuelve el error que comete la red para los patrones dados.

void operator<< (const Data &data) throw (DataError)


Introduce en la entrada de la red un dato.

void operator>> (Data &data) const


Devuelve por referencia la salida de la red.

bool valued_patterns (const SupervisedPatterns &patterns) const


Valida un conjunto de patrones.

void save (const char path) const


Guarda en el chero dado la red neuronal en formato XML.

void load (const char path) throw (XmlValidationError)


Carga la red neuronal especicada en el chero dado.

void draw (const char path, const char format) const


Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.

4.19.1.

Descripcin detallada

Red neuronal de base radial. Esta clase implementa el modelo de red neuronal llamado de Base Radial.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.19 Referencia de la Clase libgann::RadialBasis

53

4.19.2.
4.19.2.1.

Documentacin de los Tipos Denidos miembros de la clase


typedef vector<unsigned> libgann::NeuralNetwork< double >::Layers [inherited]

Tipo usado para especicar la arquitectura de la red. Para construir la red ser necesario denir la arquitectura (nmero de capas y nmero de neuronas por capa) de sta. Para ello usaremos un objeto del tipo Layers, el cual no es ms que un vector de enteros positivos. El nmero de elementos de este vector, corresponder con el nmero de capas, mientras que cada entero positivo del vector, denir el nmero de neuronas de cada capa. Como ejemplo, supongamos que tenemos un objeto del tipo Layers dado por (3,5,1), a travs de este objeto podramos construir una red de tres capas, en la cual la primera capa tendra tres neuronas, la segunda cinco y la tercera una.

4.19.3.
4.19.3.1.

Documentacin del constructor y destructor


libgann::RadialBasis::RadialBasis (const Layers & layers, const Function f = GAUSSIAN) throw (NumLayersError, NumNeuronsLayersError, NumNeuronsLayersError, ForbiddenFunctionError)

Constructor. Este constructor crea una red neuronal de base radial cuya arquitectura viene dada por el objeto layers y cuya funcin de activacin de base radial, queda determinada por un puntero constante a un objeto de la clase Function, cuyo valor por defecto es GAUSSIAN. Una vez crea la red, el constructor llama al mtodo init() de la clase con sus parmetros por defecto, con lo cual, la red es inicializada en su construccin. Parmetros: layers referencia constante a un objeto de la clase Layers. Toda red neuronal de base radial se construir a partir de este objeto. El cual especica el nmero de neuronas que tendr la red en cada capa. Debemos destacar, que dicho objeto no es ms que un vector de unsigned, el cual deberemos construir antes de pasrselo a la red. Dado que las redes de base radial tienen estrictamente tres capas, el vector del tipo Layers tendr tres elementos. De no ser as, se disparar la excepcin NumLayersError. Por otro lado tampoco podremos denir ninguna capa con cero neuronas, ya que esto carece de sentido, en caso de que se dara esta circunstancia, se disparar la excepcin NumNeuronsLayersError. La red de base radial requiere de tres neuronas ocultas al menos, esto se debe, a que el clculo de las amplitudes se realiza como la media geomtrica de la distancia del centro a sus dos vecinos ms cercanos. En caso de no darse esta condicin lanzaremos la excepcin NumNeuronsLayersError. layers Especica la arquitectura de la red neuronal. f Especica la funcin de activacin de base radial que usar la red, los posibles valores son: GAUSSIAN, INVERSE_QUADRATIC Y INVERSE_MULTIQUADRATIC.

4.19.3.2.

libgann::RadialBasis::RadialBasis (const char path) throw (XmlValidationError) [inline]

Constructor. Este constructor crea una red basndose en la informacin contenida en el chero que recibe como parmetro, para ello, dicho chero deber cumplir la especicacin dada a travs de un DTD asociado a las redes de base radial, en caso de no ser as, el constructor lanzar la excepcin XmlValidationError.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

54 Parmetros:

Documentacin de las clases

path Fichero donde se encuentra la especicacin de la red que vamos a cargar.

4.19.4.
4.19.4.1.

Documentacin de las funciones miembro


void libgann::RadialBasis::init (double a = -1, double b = 1)

Inicializa la red neuronal de base radial. Este mtodo inicializa los pesos y umbrales de la red con valores aleatorios, los cuales, estarn comprendidos en el intervalo denido por los parmetros de entrada. No es necesario que el primer parmetro sea menor que el segundo como se podra intuir, el intervalo se formar entre el menor de los dos parmetros y el mayor, independientemente de en que posicin estn el menor y mayor. 4.19.4.2. Data libgann::RadialBasis::update (const Data & data_in) throw (DataError) [virtual]

Propaga por la red el dato de entrada dado como parmetro. Este mtodo introduce por la entrada de la red un dato para posteriormente propagarlo hacia la salida de sta. El dato introducido no es ms que un vector formado por valores del tipo double. El nmero de elementos de ste tendr que coincidir con el nmero de neuronas existentes en la capa de entrada de la red . De no ser as, se disparar la excepcin DataError. Parmetros: data_in Dato que ser propagado por la red. Devuelve: El mtodo devuelve el dato que se encuentra en la salida de la red despus de la propagacin. Implementa libgann::NeuralNetwork< double >. 4.19.4.3. void libgann::RadialBasis::update () [virtual]

Propaga por la red los valores ya existentes en la entrada de sta. En este mtodo, a diferencia del mtodo anterior, no se recibe un dato de entrada, por el contrario la red propagar el valor ya existente en su entrada. Implementa libgann::NeuralNetwork< double >. 4.19.4.4. unsigned libgann::RadialBasis::train (const SupervisedPatterns & patterns, double learn_factor, double max_error) throw (PatternsError, NumPatternsError, ConvergeError)

Entrena la red neuronal de base radial con un error prejado. Este mtodo nos permitir entrenar la red jando un error mximo, de forma que cuando la red obtenga un error menor que el prejado para los patrones de entrenamiento, el mtodo terminar, devolviendo el nmero de iteraciones realizadas en el entrenamiento. Cada uno de estos patrones estar formado por dos datos: una entrada y una salida esperada. El nmero de elementos del dato de entrada, deber ser el
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.19 Referencia de la Clase libgann::RadialBasis

55

mismo que el nmero de neuronas en la capa de entrada, mientras que el nmero de elementos del dato de salida, deber coincidir con el nmero de neuronas de la capa de salida. De no darse alguna de estas dos condiciones, se lanzar la excepcin PatternsError, debido a la incompatibilidad de los patrones con la red. Por otro lado, debido al algoritmo utilizado para hallar los centros, es necesario que haya igual o mayor nmero de patrones de entrenamiento que neuronas ocultas en la red, de no ser as, se lanzar la excepcin NumPatternsError. Debemos de tener en cuenta, que valores demasiado elevados en el factor de aprendizaje, podrn propiciar que la red no converja y por tanto nunca terminara la ejecucin de esta funcin. En el momento que la funcin detecte que el error es innito lanzar la excepcin ConvergeError. Parmetros: patterns Patrones de entrenamiento learn_factor Factor de aprendizaje max_error Error mximo prejado. Cuando realizamos una llamada a este mtodo, debemos estar seguros de no usar valores confundibles con enteros en este parmetro, ya que el compilador no sabra que versin de train estamos usando. Devuelve: Devuelve el nmero de iteraciones que realiza el entrenamiento para llegar al error prejado.

4.19.4.5.

double libgann::RadialBasis::train (const SupervisedPatterns & patterns, double learn_factor, unsigned n) throw (PatternsError, NumPatternsError)

Entrena la red un nmero de iteraciones. Este mtodo nos permitir entrenar la red jando un nmero de iteraciones, de forma que una vez se hayan realizado stas, el mtodo devolver el error cometido por la red en los patrones de entrenamiento. Para entrenar la red, necesitamos un conjunto de patrones de entrenamiento. Cada uno de estos patrones estar formado por dos datos: una entrada y una salida esperada. El nmero de elementos del dato de entrada, deber ser el mismo que el nmero de neuronas en la capa de entrada, mientras que el nmero de elementos del dato de salida, deber coincidir con el nmero de neuronas de la capa de salida. De no darse alguna de estas dos condiciones, se lanzar la excepcin PatternsError, debido a la incompatibilidad de los patrones con la red. Por otro lado, debido al algoritmo utilizado para hallar los centros, es necesario que haya igual o mayor nmero de patrones de entrenamiento que neuronas ocultas en la red, de no ser as, se lanzar la excepcin NumPatternsError. Debemos de tener en cuenta, que valores demasiado elevados en el factor de aprendizaje, podrn propiciar que la red no converja en el aprendizaje. A diferencia de la otra versin de train, si la red no converge, no podr caer en un bucle innito, ya que realizaremos el aprendizaje durante un nmero jo de ciclos. Parmetros: patterns Patrones de entrenamiento learn_factor Factor de aprendizaje n Nmero de iteraciones. Cuando realizamos una llamada a este mtodo, debemos estar seguros de no usar valores confundibles con double en este parmetro, ya que el compilador no sabra que versin de train estamos usando. Devuelve: Devuelve el error cometido por la red para los patrones de entrada una vez ejecutadas todas la iteraciones del entrenamiento.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

56 4.19.4.6.

Documentacin de las clases double libgann::RadialBasis::error (const SupervisedPatterns & patterns) throw (PatternsError) [virtual]

Devuelve el error que comete la red para los patrones dados. Este mtodo devolver el error cometido por la red en el conjunto de patrones dado. Si se produce alguna incompatibilidad de los patrones con la arquitectura de la red, se lanzar la excepcin PatternsError. Parmetros: patterns Conjunto de patrones. Devuelve: Devuelve el error cuadrtico medio producido por la red en el conjunto de patrones. Implementa libgann::SupervisedNeuralNetwork< double >. 4.19.4.7. void libgann::RadialBasis::operator<< (const Data & data) throw (DataError) [virtual]

Introduce en la entrada de la red un dato. Este mtodo coloca en la entrada de la red el dato dado. Si existiera alguna incompatibilidad de dicho dato con la arquitectura de la red (el nmero de elementos del dato fuera distinto al nmero de neuronas de entrada), se lanzara la excepcin DataError. Parmetros: data Dato que se introducir en la entrada de la red. Implementa libgann::NeuralNetwork< double >. 4.19.4.8. void libgann::RadialBasis::operator>> (Data & data) const [virtual]

Devuelve por referencia la salida de la red. Este mtodo coloca la salida de la red en el objeto pasado por referencia. Parmetros: data Dato pasado por referencia donde se introducir la salida de la red. Implementa libgann::NeuralNetwork< double >. 4.19.4.9. bool libgann::RadialBasis::valued_patterns (const SupervisedPatterns & patterns) const [virtual]

Valida un conjunto de patrones. Este mtodo se encarga de validar que un conjunto de patrones sea compatible con la arquitectura de la red. Parmetros: patterns Patrones a evaluar.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.19 Referencia de la Clase libgann::RadialBasis Devuelve: Devuelve true si el conjunto de patrones es vlido para la red y false en caso contrario. Implementa libgann::SupervisedNeuralNetwork< double >. 4.19.4.10. void libgann::RadialBasis::save (const char path) const [virtual]

57

Guarda en el chero dado la red neuronal en formato XML. Este mtodo se encarga de guardar la red neuronal en un chero, de forma que podamos recuperar en un futuro los valores conseguidos a travs de los diferentes procesos de aprendizaje. Parmetros: path Ubicacin donde se crear el chero. Implementa libgann::NeuralNetwork< double >. 4.19.4.11. void libgann::RadialBasis::load (const char path) throw (XmlValidationError) [virtual]

Carga la red neuronal especicada en el chero dado. Este mtodo cargar la red especicada en el chero dado, para ello dicho chero deber cumplir la especicacin dada a travs del DTD asociado al modelo. En caso de no ser as, el mtodo lanzar la excepcin XmlValidationError. Implementa libgann::NeuralNetwork< double >. 4.19.4.12. void libgann::RadialBasis::draw (const char path, const char format) const [virtual]

Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz. Este mtodo crear una representacin grca de la red neuronal en una ubicacin dada. Parmetros: path Ubicacin donde se crear el chero. format Formato de salida para el chero. Los formatos disponibles son los mismos que con GraphViz: bmp Windows Bitmap Format canon dot xdot DOT cmap Client-side imagemap (deprecated) dia Dia format eps Encapsulated PostScript g FIG gd gd2 GD/GD2 formats gif GIF
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

58 gtk GTK canvas hpgl HP-GL/2 ico Icon Image File Format imap cmapx Server-side and client-side imagemaps imap_np cmapx_np Server-side and client-side imagemaps ismap Server-side imagemap (deprecated) jpg jpeg jpe JPEG mif FrameMaker MIF format mp MetaPost pcl PCL pdf Portable Document Format (PDF) pic PIC plain plain-ext Simple text format png Portable Network Graphics format ps PostScript ps2 PostScript for PDF svg svgz Scalable Vector Graphics tga Truevision Targa Format (TGA) tif tiff TIFF (Tag Image File Format) vml vmlz Vector Markup Language (VML) vrml VRML vtx Visual Thought format wbmp Wireless BitMap format xlib Xlib canvas Reimplementado de libgann::NeuralNetwork< double >.

Documentacin de las clases

La documentacin para esta clase fue generada a partir del siguiente chero: radial_basis.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.20 Referencia de la Clase libgann::Rng

59

4.20.

Referencia de la Clase libgann::Rng

Generador de nmeros aleatorios. #include <rng.hh>

Mtodos pblicos
double operator() (double a, double b) const

4.20.1.

Descripcin detallada

Generador de nmeros aleatorios. Esta clase implementa un generador de nmeros aleatorios.

4.20.2.
4.20.2.1.

Documentacin de las funciones miembro


double libgann::Rng::operator() (double a, double b) const

Mtodo que devuelve un nmero aleatorio entre el menor y el mayor de los valores de entrada. La documentacin para esta clase fue generada a partir del siguiente chero: rng.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

60

Documentacin de las clases

4.21.

Referencia de la plantilla de libgann::SupervisedNeuralNetwork< A >

la

Clase

Red Neuronal Supervisada. #include <supervised_neural_network.hh> Diagrama de herencias de libgann::SupervisedNeuralNetwork< A >


libgann::Jordan< libgann::LinkJordan > libgann::NeuralNetwork< A > libgann::SupervisedNeuralNetwork< A > libgann::Multiperceptron< libgann::LinkMultiperceptron >

Diagrama de colaboracin para libgann::SupervisedNeuralNetwork< A >:


vector< Neuron * >

outputs inputs

libgann::NeuralNetwork< A >

libgann::SupervisedNeuralNetwork< A >

Tipos pblicos
typedef vector< unsigned > Layers
Tipo usado para especicar la arquitectura de la red.

Mtodos pblicos
virtual double error (const SupervisedPatterns &patterns)=0 throw (PatternsError)
Devuelve el error que comete la red para los patrones dados.

virtual bool valued_patterns (const SupervisedPatterns &patterns) const =0


Valida un conjunto de patrones.

virtual Data update (const Data &data_in)=0 throw (DataError)


Propaga por la red el dato de entrada dado como parmetro.

virtual void update ()=0


Propaga por la red los valores ya existentes en la entrada de sta.

virtual void operator<< (const Data &data)=0 throw (DataError)


Introduce en la entrada de la red un dato.

virtual void operator>> (Data &data) const =0


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.21 Referencia de la plantilla de la Clase libgann::SupervisedNeuralNetwork< A >


Devuelve por referencia la salida de la red.

61

virtual void save (const char path) const =0


Guarda en el chero dado la red neuronal en formato XML.

virtual void load (const char path)=0 throw (XmlValidationError)


Carga la red neuronal especicada en el chero dado.

virtual void draw (const char path, const char format) const
Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.

4.21.1.

Descripcin detallada

template<class A> class libgann::SupervisedNeuralNetwork< A > Red Neuronal Supervisada.

4.21.2.
4.21.2.1.

Documentacin de los Tipos Denidos miembros de la clase


template<class A> typedef vector<unsigned> libgann::NeuralNetwork< A >::Layers [inherited]

Tipo usado para especicar la arquitectura de la red. Para construir la red ser necesario denir la arquitectura (nmero de capas y nmero de neuronas por capa) de sta. Para ello usaremos un objeto del tipo Layers, el cual no es ms que un vector de enteros positivos. El nmero de elementos de este vector, corresponder con el nmero de capas, mientras que cada entero positivo del vector, denir el nmero de neuronas de cada capa. Como ejemplo, supongamos que tenemos un objeto del tipo Layers dado por (3,5,1), a travs de este objeto podramos construir una red de tres capas, en la cual la primera capa tendra tres neuronas, la segunda cinco y la tercera una.

4.21.3.
4.21.3.1.

Documentacin de las funciones miembro


template<class A> virtual double libgann::SupervisedNeuralNetwork< A >::error (const SupervisedPatterns & patterns) throw (PatternsError) [pure virtual]

Devuelve el error que comete la red para los patrones dados. Este mtodo devolver el error cometido por la red en el conjunto de patrones dado. Si se produce alguna incompatibilidad de los patrones con la arquitectura de la red, se lanzar la excepcin PatternsError. Parmetros: patterns Conjunto de patrones. Devuelve: Devuelve el error cuadrtico medio producido por la red en el conjunto de patrones. Implementado en libgann::Multiperceptron, libgann::RadialBasis, y libgann::Jordan.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

62 4.21.3.2.

Documentacin de las clases template<class A> virtual bool libgann::SupervisedNeuralNetwork< A >::valued_patterns (const SupervisedPatterns & patterns) const [pure virtual]

Valida un conjunto de patrones. Este mtodo se encarga de validar que un conjunto de patrones sea compatible con la arquitectura de la red. Parmetros: patterns Patrones a evaluar. Devuelve: Devuelve true si el conjunto de patrones es vlido para la red y false en caso contrario. Implementado en libgann::Multiperceptron, libgann::RadialBasis, y libgann::Jordan. 4.21.3.3. template<class A> virtual Data libgann::NeuralNetwork< A >::update (const Data & data_in) throw (DataError) [pure virtual, inherited]

Propaga por la red el dato de entrada dado como parmetro. Este mtodo introduce por la entrada de la red un dato para posteriormente propagarlo hacia la salida de sta. El dato introducido no es ms que un vector formado por valores del tipo double. El nmero de elementos de ste tendr que coincidir con el nmero de neuronas existentes en la capa de entrada de la red . De no ser as, se disparar la excepcin DataError. Parmetros: data_in Dato que ser propagado por la red. Devuelve: El mtodo devuelve el dato que se encuentra en la salida de la red despus de la propagacin. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.21.3.4. template<class A> virtual void libgann::NeuralNetwork< A >::update () [pure virtual, inherited]

Propaga por la red los valores ya existentes en la entrada de sta. En este mtodo, a diferencia del mtodo anterior, no se recibe un dato de entrada, por el contrario la red propagar el valor ya existente en su entrada. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.21.3.5. template<class A> virtual void libgann::NeuralNetwork< A >::operator<< (const Data & data) throw (DataError) [pure virtual, inherited]

Introduce en la entrada de la red un dato. Este mtodo coloca en la entrada de la red el dato dado. Si existiera alguna incompatibilidad de dicho dato con la arquitectura de la red (el nmero de elementos del dato fuera distinto al nmero de neuronas de entrada), se lanzara la excepcin DataError.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.21 Referencia de la plantilla de la Clase libgann::SupervisedNeuralNetwork< A > Parmetros: data Dato que se introducir en la entrada de la red. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.21.3.6. template<class A> virtual void libgann::NeuralNetwork< A >::operator>> (Data & data) const [pure virtual, inherited]

63

Devuelve por referencia la salida de la red. Este mtodo coloca la salida de la red en el objeto pasado por referencia. Parmetros: data Dato pasado por referencia donde se introducir la salida de la red. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.21.3.7. template<class A> virtual void libgann::NeuralNetwork< A >::save (const char path) const [pure virtual, inherited]

Guarda en el chero dado la red neuronal en formato XML. Este mtodo se encarga de guardar la red neuronal en un chero, de forma que podamos recuperar en un futuro los valores conseguidos a travs de los diferentes procesos de aprendizaje. Parmetros: path Ubicacin donde se crear el chero. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.21.3.8. template<class A> virtual void libgann::NeuralNetwork< A >::load (const char path) throw (XmlValidationError) [pure virtual, inherited]

Carga la red neuronal especicada en el chero dado. Este mtodo cargar la red especicada en el chero dado, para ello dicho chero deber cumplir la especicacin dada a travs del DTD asociado al modelo. En caso de no ser as, el mtodo lanzar la excepcin XmlValidationError. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.21.3.9. template<class A> void libgann::NeuralNetwork< A >::draw (const char path, const char format) const [inline, virtual, inherited]

Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz. Este mtodo crear una representacin grca de la red neuronal en una ubicacin dada. Parmetros: path Ubicacin donde se crear el chero.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

64

Documentacin de las clases format Formato de salida para el chero. Los formatos disponibles son los mismos que con GraphViz: bmp Windows Bitmap Format canon dot xdot DOT cmap Client-side imagemap (deprecated) dia Dia format eps Encapsulated PostScript g FIG gd gd2 GD/GD2 formats gif GIF gtk GTK canvas hpgl HP-GL/2 ico Icon Image File Format imap cmapx Server-side and client-side imagemaps imap_np cmapx_np Server-side and client-side imagemaps ismap Server-side imagemap (deprecated) jpg jpeg jpe JPEG mif FrameMaker MIF format mp MetaPost pcl PCL pdf Portable Document Format (PDF) pic PIC plain plain-ext Simple text format png Portable Network Graphics format ps PostScript ps2 PostScript for PDF svg svgz Scalable Vector Graphics tga Truevision Targa Format (TGA) tif tiff TIFF (Tag Image File Format) vml vmlz Vector Markup Language (VML) vrml VRML vtx Visual Thought format wbmp Wireless BitMap format xlib Xlib canvas

Reimplementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. La documentacin para esta clase fue generada a partir del siguiente chero: supervised_neural_network.hh
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.22 Referencia de la Clase libgann::SupervisedPattern

65

4.22.

Referencia de la Clase libgann::SupervisedPattern

Patrn supervisado. #include <pattern.hh> Diagrama de colaboracin para libgann::SupervisedPattern:


vector< double >

input_ output_

libgann::SupervisedPattern

Mtodos pblicos
SupervisedPattern (const Data &input=Data(), const Data &output=Data())
Constructor.

const Data & input () const


Funcin que devuelve una referencia constante al dato de entrada.

const Data & output () const


Funcin que devuelve una referencia constante al dato de salida.

Data & input ()


Funcin que devuelve la referencia al dato de entrada.

Data & output ()


Funcin que devuelve la referencia al dato de salida.

4.22.1.

Descripcin detallada

Patrn supervisado. Dado que los patrones supervisados poseen una salida esperada, ser necesario implementar estos como una nueva clase.

4.22.2.
4.22.2.1.

Documentacin del constructor y destructor


libgann::SupervisedPattern::SupervisedPattern (const Data & input = Data(), const Data & output = Data()) [inline]

Constructor. Un patrn supervisado podr ser construido a partir de un objeto del tipo Data de entrada y otro de salida, en caso de no facilitar estos, se construir con los objetos creados a travs del constructor predeterminado de Data. La documentacin para esta clase fue generada a partir del siguiente chero:
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

66 pattern.hh

Documentacin de las clases

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.23 Referencia de la Clase libgann::SupervisedPatterns

67

4.23.

Referencia de la Clase libgann::SupervisedPatterns

Conjunto de patrones supervisados. #include <pattern.hh>

Mtodos pblicos
SupervisedPatterns ()
Constructor predeterminado.

SupervisedPatterns (const char path) throw (XmlValidationError)


Constructor.

void insert (const SupervisedPattern &sp) throw (PatternError) void clear ()


Mtodo que elimina todos los patrones del conjunto.

void random_shufe ()
Mtodo que baraja aleatoriamente los patrones dentro del conjunto.

size_t size () const


Mtodo que devuelve el nmero de patrones existentes en el conjunto.

const SupervisedPattern & operator[ ] (unsigned i) const void save (const char path) const
Guarda el conjunto de patrones en la ubicacin dada.

void load (const char path) throw (XmlValidationError)


Carga el conjunto de patrones del chero dado.

4.23.1.

Descripcin detallada

Conjunto de patrones supervisados. Dado que es necesario que dentro del conjunto de patrones todos tengan el mismo nmero de entradas y salidas, es necesario implementar este conjunto de patrones a travs de una clase, con el n de controlar esta circunstancia a travs del mecanismo de las excepciones.

4.23.2.
4.23.2.1.

Documentacin del constructor y destructor


libgann::SupervisedPatterns::SupervisedPatterns () [inline]

Constructor predeterminado. Este constructor crea un conjunto de patrones supervisados vaco.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

68 4.23.2.2.

Documentacin de las clases libgann::SupervisedPatterns::SupervisedPatterns (const char path) throw (XmlValidationError) [inline]

Constructor. Construye un conjunto de patrones supervisados a partir del chero dado. Para ello el chero deber cumplir la especicacin denida en el DTD asociado a los conjuntos de patrones supervisados. De no ser as se lanzar la excepcion XmlValidationError. Parmetros: path Fichero donde se encuentra la especicacin del conjunto de patrones supervisados que vamos a cargar.

4.23.3.
4.23.3.1.

Documentacin de las funciones miembro


void libgann::SupervisedPatterns::insert (const SupervisedPattern & sp) throw (PatternError)

Mtodo que inserta un patrn supervisado en el conjunto de patrones. En el caso de que el patrn supervisado insertado no tenga el mismo nmero de elementos en el dato de entrada y salida que los patrones ya existentes en el conjunto, lanzaremos la excepcin PatternError. Parmetros: sp Patrn supervisado que insertaremos.

4.23.3.2.

const SupervisedPattern& libgann::SupervisedPatterns::operator[ ] (unsigned i) const [inline] Mtodo que permite acceder al patron "i" del conjunto. Parmetros: i ndice del patrn supervisado al que queremos acceder.

4.23.3.3.

void libgann::SupervisedPatterns::save (const char path) const

Guarda el conjunto de patrones en la ubicacin dada. Este mtodo se encarga de guardar el conjunto de patrones en un chero con formato XML, de forma que podamos recuperar en un futuro dicho conjunto. Parmetros: path Ubicacin donde se crear el chero.

4.23.3.4.

void libgann::SupervisedPatterns::load (const char path) throw (XmlValidationError)

Carga el conjunto de patrones del chero dado.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.23 Referencia de la Clase libgann::SupervisedPatterns

69

Este mtodo cargar el conjunto de patrones del chero dado, para ello, dicho chero deber cumplir la especicacin denida a travs del DTD asociado al conjunto de patrones. En caso de no cumplir esta condicin, se lanzar la excepcin XmlValidationError. La documentacin para esta clase fue generada a partir del siguiente chero: pattern.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

70

Documentacin de las clases

4.24.

Referencia de la plantilla de libgann::UnsupervisedNeuralNetwork< A >

la

Clase

Red Neuronal no Supervisada. #include <unsupervised_neural_network.hh> Diagrama de herencias de libgann::UnsupervisedNeuralNetwork< A >


libgann::NeuralNetwork< A >

libgann::UnsupervisedNeuralNetwork< A >

Diagrama de colaboracin para libgann::UnsupervisedNeuralNetwork< A >:


vector< Neuron * >

outputs inputs

libgann::NeuralNetwork< A >

libgann::UnsupervisedNeuralNetwork< A >

Tipos pblicos
typedef vector< unsigned > Layers
Tipo usado para especicar la arquitectura de la red.

Mtodos pblicos
virtual bool valued_patterns (const UnsupervisedPatterns &patterns) const =0
Valida los patrones de entrenamiento.

virtual Data update (const Data &data_in)=0 throw (DataError)


Propaga por la red el dato de entrada dado como parmetro.

virtual void update ()=0


Propaga por la red los valores ya existentes en la entrada de sta.

virtual void operator<< (const Data &data)=0 throw (DataError)


Introduce en la entrada de la red un dato.

virtual void operator>> (Data &data) const =0


Devuelve por referencia la salida de la red.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.24 Referencia de la plantilla de la Clase libgann::UnsupervisedNeuralNetwork< A > virtual void save (const char path) const =0
Guarda en el chero dado la red neuronal en formato XML.

71

virtual void load (const char path)=0 throw (XmlValidationError)


Carga la red neuronal especicada en el chero dado.

virtual void draw (const char path, const char format) const
Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.

4.24.1.

Descripcin detallada

template<class A> class libgann::UnsupervisedNeuralNetwork< A > Red Neuronal no Supervisada.

4.24.2.
4.24.2.1.

Documentacin de los Tipos Denidos miembros de la clase


template<class A> typedef vector<unsigned> libgann::NeuralNetwork< A >::Layers [inherited]

Tipo usado para especicar la arquitectura de la red. Para construir la red ser necesario denir la arquitectura (nmero de capas y nmero de neuronas por capa) de sta. Para ello usaremos un objeto del tipo Layers, el cual no es ms que un vector de enteros positivos. El nmero de elementos de este vector, corresponder con el nmero de capas, mientras que cada entero positivo del vector, denir el nmero de neuronas de cada capa. Como ejemplo, supongamos que tenemos un objeto del tipo Layers dado por (3,5,1), a travs de este objeto podramos construir una red de tres capas, en la cual la primera capa tendra tres neuronas, la segunda cinco y la tercera una.

4.24.3.
4.24.3.1.

Documentacin de las funciones miembro


template<class A> virtual bool libgann::UnsupervisedNeuralNetwork< A >::valued_patterns (const UnsupervisedPatterns & patterns) const [pure virtual]

Valida los patrones de entrenamiento. Este mtodo se encarga de validar que un conjunto de patrones son compatibles con la arquitectura de la red, para ello, comprueba que el nmero de elementos de cada patrn, corresponda con el nmero de neuronas de la capa de entrada. Parmetros: patterns Patrones a evaluar. Devuelve: Devuelve bool si el conjunto de patrones es vlido para la red y false en caso contrario. Implementado en libgann::Hopeld.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

72 4.24.3.2.

Documentacin de las clases template<class A> virtual Data libgann::NeuralNetwork< A >::update (const Data & data_in) throw (DataError) [pure virtual, inherited]

Propaga por la red el dato de entrada dado como parmetro. Este mtodo introduce por la entrada de la red un dato para posteriormente propagarlo hacia la salida de sta. El dato introducido no es ms que un vector formado por valores del tipo double. El nmero de elementos de ste tendr que coincidir con el nmero de neuronas existentes en la capa de entrada de la red . De no ser as, se disparar la excepcin DataError. Parmetros: data_in Dato que ser propagado por la red. Devuelve: El mtodo devuelve el dato que se encuentra en la salida de la red despus de la propagacin. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.24.3.3. template<class A> virtual void libgann::NeuralNetwork< A >::update () [pure virtual, inherited]

Propaga por la red los valores ya existentes en la entrada de sta. En este mtodo, a diferencia del mtodo anterior, no se recibe un dato de entrada, por el contrario la red propagar el valor ya existente en su entrada. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.24.3.4. template<class A> virtual void libgann::NeuralNetwork< A >::operator<< (const Data & data) throw (DataError) [pure virtual, inherited]

Introduce en la entrada de la red un dato. Este mtodo coloca en la entrada de la red el dato dado. Si existiera alguna incompatibilidad de dicho dato con la arquitectura de la red (el nmero de elementos del dato fuera distinto al nmero de neuronas de entrada), se lanzara la excepcin DataError. Parmetros: data Dato que se introducir en la entrada de la red. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.24.3.5. template<class A> virtual void libgann::NeuralNetwork< A >::operator>> (Data & data) const [pure virtual, inherited]

Devuelve por referencia la salida de la red. Este mtodo coloca la salida de la red en el objeto pasado por referencia. Parmetros: data Dato pasado por referencia donde se introducir la salida de la red. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld.
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.24 Referencia de la plantilla de la Clase libgann::UnsupervisedNeuralNetwork< A > 4.24.3.6.

73

template<class A> virtual void libgann::NeuralNetwork< A >::save (const char path) const [pure virtual, inherited]

Guarda en el chero dado la red neuronal en formato XML. Este mtodo se encarga de guardar la red neuronal en un chero, de forma que podamos recuperar en un futuro los valores conseguidos a travs de los diferentes procesos de aprendizaje. Parmetros: path Ubicacin donde se crear el chero. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.24.3.7. template<class A> virtual void libgann::NeuralNetwork< A >::load (const char path) throw (XmlValidationError) [pure virtual, inherited]

Carga la red neuronal especicada en el chero dado. Este mtodo cargar la red especicada en el chero dado, para ello dicho chero deber cumplir la especicacin dada a travs del DTD asociado al modelo. En caso de no ser as, el mtodo lanzar la excepcin XmlValidationError. Implementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. 4.24.3.8. template<class A> void libgann::NeuralNetwork< A >::draw (const char path, const char format) const [inline, virtual, inherited]

Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz. Este mtodo crear una representacin grca de la red neuronal en una ubicacin dada. Parmetros: path Ubicacin donde se crear el chero. format Formato de salida para el chero. Los formatos disponibles son los mismos que con GraphViz: bmp Windows Bitmap Format canon dot xdot DOT cmap Client-side imagemap (deprecated) dia Dia format eps Encapsulated PostScript g FIG gd gd2 GD/GD2 formats gif GIF gtk GTK canvas hpgl HP-GL/2 ico Icon Image File Format imap cmapx Server-side and client-side imagemaps
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

74 imap_np cmapx_np Server-side and client-side imagemaps ismap Server-side imagemap (deprecated) jpg jpeg jpe JPEG mif FrameMaker MIF format mp MetaPost pcl PCL pdf Portable Document Format (PDF) pic PIC plain plain-ext Simple text format png Portable Network Graphics format ps PostScript ps2 PostScript for PDF svg svgz Scalable Vector Graphics tga Truevision Targa Format (TGA) tif tiff TIFF (Tag Image File Format) vml vmlz Vector Markup Language (VML) vrml VRML vtx Visual Thought format wbmp Wireless BitMap format xlib Xlib canvas

Documentacin de las clases

Reimplementado en libgann::Multiperceptron, libgann::RadialBasis, libgann::Jordan, y libgann::Hopeld. La documentacin para esta clase fue generada a partir del siguiente chero: unsupervised_neural_network.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.25 Referencia de la Clase libgann::UnsupervisedPatterns

75

4.25.

Referencia de la Clase libgann::UnsupervisedPatterns

Conjunto de patrones no supervisados. #include <pattern.hh>

Mtodos pblicos
UnsupervisedPatterns ()
Constructor predeterminado.

UnsupervisedPatterns (const char path) throw (XmlValidationError)


Constructor.

void insert (const UnsupervisedPattern &up) throw (PatternError) void clear ()


Mtodo que elimina todos los patrones del conjunto.

void random_shufe ()
Mtodo que baraja aleatoriamente los patrones dentro del conjunto.

size_t size () const


Mtodo que devuelve el nmero de patrones existentes en el conjunto.

const UnsupervisedPattern & operator[ ] (unsigned i) const void save (const char path) const
Guarda el conjunto de patrones en la ubicacin dada.

void load (const char path) throw (XmlValidationError)


Carga el conjunto de patrones del chero dado.

4.25.1.

Descripcin detallada

Conjunto de patrones no supervisados. Dado que es necesario que dentro del conjunto de patrones todos tengan el mismo nmero de elementos, es necesario implementar este conjunto de patrones a travs de una clase, con el n de controlar esta circunstancia a travs del mecanismo de las excepciones.

4.25.2.
4.25.2.1.

Documentacin del constructor y destructor


libgann::UnsupervisedPatterns::UnsupervisedPatterns () [inline]

Constructor predeterminado. Este constructor crea un conjunto de patrones no supervisados vaco.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

76 4.25.2.2.

Documentacin de las clases libgann::UnsupervisedPatterns::UnsupervisedPatterns (const char path) throw (XmlValidationError) [inline]

Constructor. Construye un conjunto de patrones no supervisados a partir del chero dado. Para ello el chero deber cumplir la especicacin denida en el DTD asociado a los conjuntos de patrones no supervisados. De no ser as se lanzar la excepcion XmlValidationError. Parmetros: path Fichero donde se encuentra la especicacin del conjunto de patrones no supervisados que vamos a cargar.

4.25.3.
4.25.3.1.

Documentacin de las funciones miembro


void libgann::UnsupervisedPatterns::insert (const UnsupervisedPattern & up) throw (PatternError)

Mtodo que inserta un patrn no supervisado en el conjunto de patrones. En el caso de que el patrn no supervisado insertado no tenga el mismo nmero de elementos que los patrones ya existentes en el conjunto, lanzaremos la excepcin PatternError. Parmetros: up Patrn no supervisado que insertaremos.

4.25.3.2.

const UnsupervisedPattern& libgann::UnsupervisedPatterns::operator[ ] (unsigned i) const [inline] Mtodo que permite acceder al patron "i" del conjunto. Parmetros: i ndice del patrn no supervisado al que queremos acceder

4.25.3.3.

void libgann::UnsupervisedPatterns::save (const char path) const

Guarda el conjunto de patrones en la ubicacin dada. Este mtodo se encarga de guardar el conjunto de patrones en un chero con formato XML, de forma que podamos recuperar en un futuro dicho conjunto. Parmetros: path Ubicacin donde se crear el chero.

4.25.3.4.

void libgann::UnsupervisedPatterns::load (const char path) throw (XmlValidationError)

Carga el conjunto de patrones del chero dado.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.25 Referencia de la Clase libgann::UnsupervisedPatterns

77

Este mtodo cargar el conjunto de patrones del chero dado, para ello, dicho chero deber cumplir la especicacin denida a travs del DTD asociado al conjunto de patrones. En caso de no cumplir esta condicin, se lanzar la excepcin XmlValidationError. La documentacin para esta clase fue generada a partir del siguiente chero: pattern.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

78

Documentacin de las clases

4.26.

Referencia de la Estructura libgann::XmlException

Excepcin XML. #include <exception.hh> Diagrama de herencias de libgann::XmlException


libgann::LibgannException

libgann::XmlException

libgann::XmlValidationError

Diagrama de colaboracin para libgann::XmlException:


string

ms g

libgann::LibgannException

libgann::XmlException

Mtodos pblicos
XmlException (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.26.1.

Descripcin detallada

Excepcin XML. Es una clase especializada de LibgannException, que agrupa aquellas excepciones relacionadas con XML. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

4.27 Referencia de la Estructura libgann::XmlValidationError

79

4.27.

Referencia de la Estructura libgann::XmlValidationError

Error de validacin. #include <exception.hh> Diagrama de herencias de libgann::XmlValidationError


libgann::LibgannException

libgann::XmlException

libgann::XmlValidationError

Diagrama de colaboracin para libgann::XmlValidationError:


string

msg

libgann::LibgannException

libgann::XmlException

libgann::XmlValidationError

Mtodos pblicos
XmlValidationError (const string &msg)
Constructor.

string description (void)


Mtodo que devuelve una descripcin de la excepcin producida.

4.27.1.

Descripcin detallada

Error de validacin. Especializacin de XmlException. Representa el error producido al validar un documento XML. La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

80

Documentacin de las clases

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

Captulo 5

Documentacin de archivos
5.1. Referencia del Archivo exception.hh

#include <string> Dependencia grca adjunta para exception.hh:


exception.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


exception.hh

neural_network.hh

supervised_neural_network.hh

pattern.hh

unsupervised_neural_network.hh

multiperceptron.hh

radial_basis.hh

jordan.hh

hopfield.hh

libgann.hh

Namespaces
namespace libgann

Clases
struct libgann::LibgannException

82
Excepcin de Libgann.

Documentacin de archivos

struct libgann::FunctionException
Excepcin de funcin.

struct libgann::ForbiddenFunctionError
Error de funcin.

struct libgann::LayersException
Excepcin de capas.

struct libgann::NumLayersError
Error del nmero de capas.

struct libgann::NumNeuronsLayersError
Error del nmero de neuronas por capa.

struct libgann::PatternsException
Excepcin de patrones.

struct libgann::NumPatternsError
Error del nmero de patrones.

struct libgann::PatternsError
Error de patrones.

struct libgann::PatternError
Error de patrn.

struct libgann::DataError
Error de dato.

struct libgann::XmlException
Excepcin XML.

struct libgann::XmlValidationError
Error de validacin.

struct libgann::PerformanceException
Excepcin de ejecucin.

struct libgann::ConvergeError
Error de convergencia.

Deniciones
#dene THROW(exception, msg)
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

5.1 Referencia del Archivo exception.hh

83

5.1.1.

Descripcin detallada

Fichero de cabecera donde se declaran las excepciones lanzadas por Libgann.

5.1.2.
5.1.2.1. Valor:

Documentacin de las deniciones


#dene THROW(exception, msg)

throw exception( string(__PRETTY_FUNCTION__) + string(":\n") + string(msg) + string("\n\n"))

\ \ \ \

Macro para formatear y simplicar el lanzamiento de excepciones. Esta macro nos permite lanzar una excepcin especicada como parmetro, con un mensaje tambin dado como parmetro. El mensaje con el que realmente se lanzar la excepcin, ser precedido por la descripcin de la funcin desde la cual fue lanzada.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

84

Documentacin de archivos

5.2.

Referencia del Archivo functions.hh

#include <cmath> #include <string> Dependencia grca adjunta para functions.hh:


functions.hh

cmath

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


functions.hh

multiperceptron.hh

radial_basis.hh

jordan.hh

hopfield.hh

libgann.hh

Namespaces
namespace libgann

Clases
struct libgann::Function struct libgann::DifferentiableFunction struct libgann::TableFunctionName

5.2.1.

Descripcin detallada

Fichero de cabecera donde se declaran las funciones de activacin.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

5.3 Referencia del Archivo hopeld.hh

85

5.3.

Referencia del Archivo hopeld.hh

#include <vector> #include "functions.hh" #include "neuron.hh" #include "unsupervised_neural_network.hh" #include "pattern.hh" #include "exception.hh" Dependencia grca adjunta para hopeld.hh:
hopfield.hh

unsupervised_neural_network.hh

functions.hh

pattern.hh

neural_network.hh

cmath

algorithm

vector

neuron.hh

graph_draw.hh

graph.hh

exception.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


hopfield.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::Hopeld
Red de Hopeld.

5.3.1.

Descripcin detallada

Fichero de cabecera donde se declara la red de Hopeld.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

86

Documentacin de archivos

5.4.

Referencia del Archivo jordan.hh

#include <vector> #include "functions.hh" #include "neuron.hh" #include "supervised_neural_network.hh" #include "pattern.hh" #include "exception.hh" Dependencia grca adjunta para jordan.hh:
jordan.hh

supervised_neural_network.hh

functions.hh

pattern.hh

neural_network.hh

cmath

algorithm

vector

neuron.hh

graph_draw.hh

graph.hh

exception.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


jordan.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::NeuronJordan class libgann::LinkJordan class libgann::Jordan
Red de Jordan.

5.4.1.

Descripcin detallada

Fichero de cabecera donde se declara la red de Jordan.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

5.5 Referencia del Archivo libgann.hh

87

5.5.

Referencia del Archivo libgann.hh

#include "rng.hh" #include "exception.hh" #include "pattern.hh" #include "functions.hh" #include "multiperceptron.hh" #include "radial_basis.hh" #include "jordan.hh" #include "hopfield.hh" #include <cstdlib> #include <ctime> Dependencia grca adjunta para libgann.hh:
libgann.hh

rng.hh

jordan.hh

radial_basis.hh

multiperceptron.hh

hopfield.hh

ctime

cstdlib

pattern.hh

supervised_neural_network.hh

unsupervised_neural_network.hh

functions.hh

algorithm

neural_network.hh

cmath

exception.hh

vector

graph.hh

graph_draw.hh

neuron.hh

string

Namespaces
namespace libgann

Clases
class libgann::Libgann
Clase Libgann.

5.5.1.

Descripcin detallada

Fichero de cabecera donde se declara la clase Libgann. Dicha clase denir aquellos mtodos propios de la biblioteca.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

88

Documentacin de archivos

5.6.

Referencia del Archivo multiperceptron.hh

#include <vector> #include "functions.hh" #include "neuron.hh" #include "supervised_neural_network.hh" #include "pattern.hh" #include "exception.hh" Dependencia grca adjunta para multiperceptron.hh:
multiperceptron.hh

supervised_neural_network.hh

functions.hh

pattern.hh

neural_network.hh

cmath

algorithm

vector

neuron.hh

graph_draw.hh

graph.hh

exception.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


multiperceptron.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::NeuronMultiperceptron class libgann::LinkMultiperceptron class libgann::Multiperceptron
Multiperceptron.

5.6.1.

Descripcin detallada

Fichero de cabecera donde se declara el Multiperceptron.


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

5.7 Referencia del Archivo neural_network.hh

89

5.7.

Referencia del Archivo neural_network.hh

#include <vector> #include "neuron.hh" #include "graph.hh" #include "graph_draw.hh" #include "exception.hh" Dependencia grca adjunta para neural_network.hh:
neural_network.hh

vector

neuron.hh

graph.hh

graph_draw.hh

exception.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


neural_network.hh

supervised_neural_network.hh

unsupervised_neural_network.hh

multiperceptron.hh

radial_basis.hh

jordan.hh

hopfield.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::NeuralNetwork< A >
Red Neuronal.

5.7.1.

Descripcin detallada

Fichero de cabecera donde se declaran las redes neuronales.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

90

Documentacin de archivos

5.8.

Referencia del Archivo pattern.hh

#include <algorithm> #include <vector> #include "exception.hh" Dependencia grca adjunta para pattern.hh:
pattern.hh

algorithm

vector

exception.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


pattern.hh

multiperceptron.hh

radial_basis.hh

jordan.hh

hopfield.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::SupervisedPattern
Patrn supervisado.

class libgann::SupervisedPatterns
Conjunto de patrones supervisados.

class libgann::UnsupervisedPatterns
Conjunto de patrones no supervisados.

Tipos denidos
typedef vector< double > libgann::Data
Tipo bsico de entrada y salida en las redes neuronales.

typedef Data libgann::UnsupervisedPattern


Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

5.8 Referencia del Archivo pattern.hh


Patrn no supervisado.

91

5.8.1.

Descripcin detallada

Fichero de cabecera donde se declaran los patrones que usaremos en las redes neuronales.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

92

Documentacin de archivos

5.9.

Referencia del Archivo radial_basis.hh

#include <vector> #include "neuron.hh" #include "pattern.hh" #include "functions.hh" #include "supervised_neural_network.hh" #include "exception.hh" Dependencia grca adjunta para radial_basis.hh:
radial_basis.hh

supervised_neural_network.hh

functions.hh

pattern.hh

neural_network.hh

cmath

vector

algorithm

exception.hh

graph_draw.hh

graph.hh

neuron.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


radial_basis.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::NeuronRadialBasis class libgann::RadialBasis
Red neuronal de base radial.

5.9.1.

Descripcin detallada

Fichero de cabecera donde se declara la red de base radial.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

5.10 Referencia del Archivo rng.hh

93

5.10.

Referencia del Archivo rng.hh

#include <cstdlib> Dependencia grca adjunta para rng.hh:


rng.hh

cstdlib

Grco de los archivos que directa o indirectamente incluyen a este archivo:


rng.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::Rng
Generador de nmeros aleatorios.

5.10.1.

Descripcin detallada

Fichero de cabecera donde se declara el generador de nmeros aleatorios.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

94

Documentacin de archivos

5.11.

Referencia del Archivo supervised_neural_network.hh

#include "exception.hh" #include "neural_network.hh" Dependencia grca adjunta para supervised_neural_network.hh:


supervised_neural_network.hh

neural_network.hh

exception.hh

vector

neuron.hh

graph.hh

graph_draw.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


supervised_neural_network.hh

multiperceptron.hh

radial_basis.hh

jordan.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::SupervisedNeuralNetwork< A >
Red Neuronal Supervisada.

5.11.1.

Descripcin detallada

Fichero de cabecera donde se declaran las redes neuronales supervisadas.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

5.12 Referencia del Archivo unsupervised_neural_network.hh

95

5.12.

Referencia del Archivo unsupervised_neural_network.hh

#include "exception.hh" #include "neural_network.hh" Dependencia grca adjunta para unsupervised_neural_network.hh:


unsupervised_neural_network.hh

neural_network.hh

exception.hh

vector

neuron.hh

graph.hh

graph_draw.hh

string

Grco de los archivos que directa o indirectamente incluyen a este archivo:


unsupervised_neural_network.hh

hopfield.hh

libgann.hh

Namespaces
namespace libgann

Clases
class libgann::UnsupervisedNeuralNetwork< A >
Red Neuronal no Supervisada.

5.12.1.

Descripcin detallada

Fichero de cabecera donde se declaran las redes neuronales no supervisadas.

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

ndice alfabtico
draw libgann::Hopeld, 16 libgann::Jordan, 25 libgann::Multiperceptron, 36 libgann::NeuralNetwork, 41 libgann::RadialBasis, 57 libgann::SupervisedNeuralNetwork, 63 libgann::UnsupervisedNeuralNetwork, 73 libgann.hh, 87 libgann::ConvergeError, 7 libgann::DataError, 9 libgann::ForbiddenFunctionError, 10 libgann::FunctionException, 11 libgann::Hopeld, 12 draw, 16 Hopeld, 14 init, 14 Layers, 13 load, 16 operator<<, 15 operator>>, 15 save, 16 train, 15 update, 14, 15 valued_patterns, 16 libgann::Jordan, 19 draw, 25 error, 24 init, 22 Jordan, 21 Layers, 21 load, 25 operator<<, 24 operator>>, 24 save, 25 train, 22, 23 update, 22 valued_patterns, 24 libgann::LayersException, 27 libgann::Libgann, 28 init, 28 libgann::LibgannException, 29 libgann::Multiperceptron, 31 draw, 36 error, 35 init, 33 Layers, 32 load, 36 Multiperceptron, 33 operator<<, 35 operator>>, 36 save, 36

error

libgann::Jordan, 24 libgann::Multiperceptron, 35 libgann::RadialBasis, 55 libgann::SupervisedNeuralNetwork, 61 exception.hh, 81 THROW, 83 functions.hh, 84 Hopeld libgann::Hopeld, 14 hopeld.hh, 85 init libgann::Hopeld, 14 libgann::Jordan, 22 libgann::Libgann, 28 libgann::Multiperceptron, 33 libgann::RadialBasis, 54 insert libgann::SupervisedPatterns, 68 libgann::UnsupervisedPatterns, 76 Jordan libgann::Jordan, 21 jordan.hh, 86 Layers libgann::Hopeld, 13 libgann::Jordan, 21 libgann::Multiperceptron, 32 libgann::NeuralNetwork, 40 libgann::RadialBasis, 53 libgann::SupervisedNeuralNetwork, 61 libgann::UnsupervisedNeuralNetwork, 71

NDICE ALFABTICO train, 34 update, 33, 34 valued_patterns, 36 libgann::NeuralNetwork, 39 draw, 41 Layers, 40 load, 41 operator<<, 40 operator>>, 41 save, 41 update, 40 libgann::NumLayersError, 44 libgann::NumNeuronsLayersError, 45 libgann::NumPatternsError, 46 libgann::PatternError, 47 libgann::PatternsError, 48 libgann::PatternsException, 49 libgann::PerformanceException, 50 libgann::RadialBasis, 51 draw, 57 error, 55 init, 54 Layers, 53 load, 57 operator<<, 56 operator>>, 56 RadialBasis, 53 save, 57 train, 54, 55 update, 54 valued_patterns, 56 libgann::Rng, 59 operator(), 59 libgann::SupervisedNeuralNetwork, 60 draw, 63 error, 61 Layers, 61 load, 63 operator<<, 62 operator>>, 63 save, 63 update, 62 valued_patterns, 61 libgann::SupervisedPattern, 65 SupervisedPattern, 65 libgann::SupervisedPatterns, 67 insert, 68 load, 68 save, 68 SupervisedPatterns, 67 libgann::UnsupervisedNeuralNetwork, 70 draw, 73 Layers, 71 load, 73
Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

97 operator<<, 72 operator>>, 72 save, 72 update, 71, 72 valued_patterns, 71 libgann::UnsupervisedPatterns, 75 insert, 76 load, 76 save, 76 UnsupervisedPatterns, 75 libgann::XmlException, 78 libgann::XmlValidationError, 79 load libgann::Hopeld, 16 libgann::Jordan, 25 libgann::Multiperceptron, 36 libgann::NeuralNetwork, 41 libgann::RadialBasis, 57 libgann::SupervisedNeuralNetwork, 63 libgann::SupervisedPatterns, 68 libgann::UnsupervisedNeuralNetwork, 73 libgann::UnsupervisedPatterns, 76 Multiperceptron libgann::Multiperceptron, 33 multiperceptron.hh, 88 neural_network.hh, 89 operator<< libgann::Hopeld, 15 libgann::Jordan, 24 libgann::Multiperceptron, 35 libgann::NeuralNetwork, 40 libgann::RadialBasis, 56 libgann::SupervisedNeuralNetwork, 62 libgann::UnsupervisedNeuralNetwork, 72 operator>> libgann::Hopeld, 15 libgann::Jordan, 24 libgann::Multiperceptron, 36 libgann::NeuralNetwork, 41 libgann::RadialBasis, 56 libgann::SupervisedNeuralNetwork, 63 libgann::UnsupervisedNeuralNetwork, 72 operator() libgann::Rng, 59 pattern.hh, 90 radial_basis.hh, 92 RadialBasis libgann::RadialBasis, 53 rng.hh, 93

98 save

NDICE ALFABTICO

libgann::Hopeld, 16 libgann::Jordan, 25 libgann::Multiperceptron, 36 libgann::NeuralNetwork, 41 libgann::RadialBasis, 57 libgann::SupervisedNeuralNetwork, 63 libgann::SupervisedPatterns, 68 libgann::UnsupervisedNeuralNetwork, 72 libgann::UnsupervisedPatterns, 76 supervised_neural_network.hh, 94 SupervisedPattern libgann::SupervisedPattern, 65 SupervisedPatterns libgann::SupervisedPatterns, 67 THROW exception.hh, 83 train libgann::Hopeld, 15 libgann::Jordan, 22, 23 libgann::Multiperceptron, 34 libgann::RadialBasis, 54, 55 unsupervised_neural_network.hh, 95 UnsupervisedPatterns libgann::UnsupervisedPatterns, 75 update libgann::Hopeld, 14, 15 libgann::Jordan, 22 libgann::Multiperceptron, 33, 34 libgann::NeuralNetwork, 40 libgann::RadialBasis, 54 libgann::SupervisedNeuralNetwork, 62 libgann::UnsupervisedNeuralNetwork, 71, 72 valued_patterns libgann::Hopeld, 16 libgann::Jordan, 24 libgann::Multiperceptron, 36 libgann::RadialBasis, 56 libgann::SupervisedNeuralNetwork, 61 libgann::UnsupervisedNeuralNetwork, 71

Generado el Mon Jan 12 18:32:49 2009 para Libgann por Doxygen

Apndice D

GNU Free Documentation License


Version 1.3, 3 November 2008 Copyright

2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble
The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the eective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modications made by others. This License is a kind of copyleft, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS


193

194

APNDICE D. GNU FREE DOCUMENTATION LICENSE


This License applies to any manual or other work, in any medium, that

contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The 

Document,

below, refers to any such manual or work. Any

member of the public is a licensee, and is addressed as  under copyright law. A 

you. You accept the

license if you copy, modify or distribute the work in a way requiring permission

Modied Version

of the Document means any work containing the

Document or a portion of it, either copied verbatim, or with modications and/or translated into another language. A 

Secondary Section

is a named appendix or a front-matter section

of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The 

Invariant Sections are certain Secondary Sections whose titles are

designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not t the above denition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The 

Cover Texts

are certain short passages of text that are listed,

as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A 

Transparent

copy of the Document means a machine-readable copy,

represented in a format whose specication is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent le format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modication by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not Transparent is called 

Opaque.

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modication. Examples of transparent

195

image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The 

Title Page

means, for a printed book, the title page itself, plus

such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, Title Page means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The 

publisher

means any person or entity that distributes copies of the

Document to the public. A section 

Entitled XYZ means a named subunit of the Document who-

se title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specic section name mentioned below, such as  

Acknowledgements,  Dedications, Endorsements, or  History.) To  Preserve the Title of such a section


The Document may include Warranty Disclaimers next to the notice which

when you modify the Document means that it remains a section Entitled XYZ according to this denition. states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no eect on the meaning of this License.

2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front

196

APNDICE D. GNU FREE DOCUMENTATION LICENSE

cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to t legibly, you should put the rst ones listed (as many as t reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computernetwork location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS
You may copy and distribute a Modied Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modied Version under precisely this License, with the Modied Version lling the role of the Document, thus licensing distribution and modication of the Modied Version to whoever possesses a copy of it. In addition, you must do these things in the Modied Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modications in the Modied Version, together with at least ve of the principal authors of the Document (all of its principal authors, if it has fewer than ve), unless they release you from this requirement.

197

C. State on the Title page the name of the publisher of the Modied Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modied Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled History, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modied Version as given on the Title Page. If there is no section Entitled History in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modied Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the History section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled Acknowledgements or Dedications, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled Endorsements. Such a section may not be included in the Modied Version. N. Do not retitle any existing section to be Entitled Endorsements or to conict in title with any Invariant Section.

198

APNDICE D. GNU FREE DOCUMENTATION LICENSE

O. Preserve any Warranty Disclaimers. If the Modied Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modied Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled Endorsements, provided it contains nothing but endorsements of your Modied Version by various partiesfor example, statements of peer review or that the text has been approved by an organization as the authoritative denition of a standard. You may add a passage of up to ve words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modied Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modied Version.

5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under the terms dened in section 4 above for modied versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodied, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but dierent contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled History in the various original documents, forming one section Entitled History; likewise combine any sections Entitled Acknowledgements, and any sections Entitled Dedications. You must delete all sections Entitled Endorsements.

6. COLLECTIONS OF DOCUMENTS

199

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS


A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an aggregate if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION
Translation is considered a kind of modication, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled Acknowledgements, Dedications, or History, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

200

APNDICE D. GNU FREE DOCUMENTATION LICENSE


You may not copy, modify, sublicense, or distribute the Document except as

expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and nally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder noties you of the violation by some reasonable means, this is the rst time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

10. FUTURE REVISIONS OF THIS LICENSE


The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may dier in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document species that a particular numbered version of this License or any later version applies to it, you have the option of following the terms and conditions either of that specied version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document species that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

11. RELICENSING
Massive Multiauthor Collaboration Site (or MMC Site) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A Massive Multiauthor Collaboration (or MMC) contained in the site means any set of copyrightable works thus published on the MMC site.

201

CC-BY-SA means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-prot corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. Incorporate means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is eligible for relicensing if it is licensed under this License, and if all works that were rst published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents


To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright

YEAR YOUR NAME. Permission is granted to copy,

distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the with . . . Texts. line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

Bibliografa
[1] Hilera, Jos R. & Martnez, Vctor J. (1995). ra-ma. [2] Isasi Viuela, Pedro & Galvn Len, Ins M. (2004).

Redes neuronales articiales: Fundamentos, modelos y aplicaciones.

Redes de neuronas articiales: Un enfoque prctico.


Pearson/Prentice Hall.

[3]

Simon Haykin. (1999).

Neural Networks: A Comprehensive Foundation. Second Edition.


Pearson/Prentice Hall.

[4]

Eric R. Kandel & Thomas M. Jessell & James H. Schwartz. (1999).

Neurociencia y conducta.
Prentice Hall.

[5]

Universidad de Stuttgart.

Stuttgart Neural Network Simulator: User Manual. Computer Algorithms: Introduction to Design & Analysis.
Addison-Wesley, third edition.

[6]

Baase, Sara. & Gelder, Allen Van. (2000).

[7]

Stroustrup, Bjarne. (2002).

El lenguaje de programacin C++. Edicin Especial.


Addison-Wesley Iberoamericana.

[8]

Garca Aburruzaga, Gerardo; Medina Bulo, Inmaculada & Palomo Lozano, Francisco.

Fundamentos de C++.
Servicio de Publicaciones. Universidad de Cdiz. second edition. [9]

GNU Autoconf.

http://www.gnu.org/software/autoconf/
[10]

GNU Automake.

http://www.gnu.org/software/automake/
203

204

BIBLIOGRAFA

[11]

GNU Libtool.

http://www.gnu.org/software/libtool/
[12]

Debian Library Packaging guide.

http://www.netfort.gr.jp/~dancer/column/libpkg-guide/

[13] Wheeler, David A. (2003).

Program Library HOWTO. Zator.

http://www.dwheeler.com/program-library/
[14]

http://www.zator.com/Cpp/index.htm
[15]

CTAN the Comprehensive TeX Archive Network.


http://www.ctan.org

[16]

Doxygen.

http://www.doxygen.org
[17]

Subversion. GraphViz.

http://subversion.tigris.org/
[18]

http://www.graphviz.org/
[19]

Libxml++2.6.

http://libxmlplusplus.sourceforge.net/
[20] David J. Pearce & Paul H. J. Kelly. (2004).

A dynamic algorithm for topologically sorting directed acyclic graph Recommended Practice for Software
IEEE Computer Society. 1998.

[21] IEEE (1998). IEEE Std. 830-1998.

Requirements Specications.

También podría gustarte