Escolar Documentos
Profissional Documentos
Cultura Documentos
16 de febrero de 2009
Departamento: Lengua jes y sistemas informticos Director del proyecto: Francisco Palomo Lozano Autor del proyecto: Francisco Javier Vzquez Pa
Copyright
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
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 . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . .
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. . . .
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
. . . . . . . . . . . . . . . . . . . . . . . . . .
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
73 75
75
xor .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
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
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.
OT.
. . . . . . . . . . . . . . . . . . .
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
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.
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
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
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.
personas que quieran hacer uso de la biblioteca, debern tener conocimientos de dicho lenguaje.
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.
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
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
10
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
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
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
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:
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
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 ) ;
12
13
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.
GraphViz,
sencillez y calidad.
14
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
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,
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:
V,
typename
A >
// Devuelve e l Agraph
const
Agraph_t *
void ) const ;
void
pa th , format )
void
void
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 (
value ) ;
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 (
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 (
void
void void
const const
void
// Crea un s u b g r a f o
create_subgraph (
const char *
name ) ;
void
};
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
XML,
16
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,
documentos XML. Como resultado, en cada modelos de RNA aparecieron tres nuevos mtodos:
Un constructor
Hopfield (
const char *
path )
throw
( XmlValidationError ) ;
void
save (
const char *
path )
const ;
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.
LibgannException (
const
s t r i n g & msg ) ;
18
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.
20
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).
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
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
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.
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.
22
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 .
y = f (net ).
Por analoga con el modelo biolgico la funcin de activacin suele ser del tipo
dada por:
No obstante, en algunos modelos es necesario el uso de funciones de activacin derivables, en estos casos se suele usar la funcin
f (x) =
1 1 + ex
Como podemos ver en la Figura 4.4 la funcin sigmoidal tiene cierta similitud con la funcin escaln.
23
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
x1
f (net )
x2
f (net )
x3
f (net )
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
y1 , y2 N
y3
x1 , x2
x1
y1
x2
y2
x3
y3
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.
25
x2
y2
x3
y3
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
N x1 N y1
x2
y2
x3
N N
y3
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.
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
xn
Figura 5.1: Perceptron.
Donde
f (x) =
Por otro lado
1 x 0 1 x>0
30
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.
cador binario, de tal forma, que si al pasar un patrn a la neurona, sta da como resultado
1,
1,
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
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
otros tipos de correspondencias. Supongamos que tenemos aquellas salidas de la red cuyos valores fueran todos que valiera
Perceptrones,
a excepcin de uno
1.
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
Ejemplo:
la recta
cuadro 5.2. El Perceptron los dividir en dos clases, tal y como se muestra en la Figura 5.4.
x1
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
(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.
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
5.1. PERCEPTRON
parmetro debe adoptar valores en el intervalo ximos a
33
1,
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
P1
P2
de la Figura 5.5
P3
34
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.
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
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
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)
n,
E (n)
es el error
E (n) =
Donde salida
1 2
e i 2 (n)
iC
(5.2)
C,
ei (n)
en el patrn de entrenamiento
n,
de la capa de
(5.3)
n.
di (n)
yi ( n )
yi (n)
(5.4)
neti (n)
es la funcin de activacin,
es el umbral de la neurona
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
cuenta de que:
xh = yh
Usaremos la expresin
(5.6)
xh
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
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),
w(n) =
j,
...
xi (n)
f (netj (n) j )
yj (n)
...
perteneciente a la capa
C.
(5.8)
Ya que el nico error cometido por una neurona de la capa de salida que
wi,j
es
ej .
e j (n)
Dado que
(5.9)
dj (n)
e j (n)
(5.10)
38
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
(5.12)
tanto, la expresin que nos permitir modicar el peso asociado entre una neurona de
C , para un patrn
(5.13)
j (n)
(5.14)
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
en la Figura 5.10.
...
xi (n)
f (netj (n) j )
f (netk (n) k )
yk ( n )
...
perteneciente a la capa
C 1.
wi,j
5.2. MULTIPERCEPTRON
E (n) = wi,j ek (n) wi,j
39
e k (n)
kC
(5.15)
ek (n)
k C
ek (n) = wi,j
ek (n)
kC
yk (n) wi,j
(5.16)
(5.17)
(5.18)
k,
wi,j ,
xj
de la
por tanto:
(5.19)
(5.20)
E (n) = wi,j
xj (n) wi,j
(5.21)
E (n) = wi,j
k (n)wj,k
k C
xj (n) wi,j
(5.22)
(5.23)
40
xi
que depende de
wi,j
obtenemos que:
(5.24)
E (n) = wi,j
Adems debido a que que:
(5.25)
k,
tenemos
k (n)wj,k
kC
(5.26)
(5.27)
j (n)
(5.28)
para un
ser igual a:
j (n): j
sea una neurona de salida:
En caso de que
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:
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
(0, 1),
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
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:
1.
43
CapaOculta
f (neta a )
ya
xk
xi
f (netb b )
yb
xj
x f (netc c ) yc
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(
(r) =
1 1 + r2
44
(r) =
1 1 + r2
Donde
r = ||x c||,
(r).
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
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
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.
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
f (x) = x,
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
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
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:
48
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],
Sdeseada :
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
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.
50
nueva pregunta: Qu nos asegura que la red de Hopeld converja?, la respuesta viene de mano del mtodo de aprendizaje que expondremos a continuacin.
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
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
k.
Con esto, conseguimos que la unin entre neuronas que se activan a la vez se vea reforzada.
0,138N ,
donde
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,
es un conjunto
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.
Denicin 2.
V,
Un grafo no dirigido suele ser tambin representado de dos formas: Deniendo textualmente los conjuntos
A:
Denicin 3.
(a, b) A
vrtices.
Un grafo dirigido
existir otro
(b, a)
G = (V, A)
Denicin 4.
uV v V,
tal
diremos que
u,
si y solo si
(u, v ) A.
6.2. DEFINICIONES
55
(V, A, P )
donde
es una
P :AY
Donde
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
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
(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.
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
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
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).
57
Denicin 20.
aplicacin inyectiva
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
(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
tencia de ciclos, no obstante, si agrupamos las neuronas mutuamente dependientes en conjuntos (componentes conexas), podramos determinar en cualquier caso la
OT
OTP
OTP.
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
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.
Podemos utilizar una representacin semejante para la no podremos obtener en todos los casos una
OTP
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.
OTP.
La
OTP
establece una
OT
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.
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,
G = (V, A)
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
61
OTP
ser modicada
G = (V, A),
V,
ste ser por s mismo una componente conexa, por tanto, podremos aadir dicho vrtice en cualquier lugar de la de dicho vrtice.
OTP
G = (V, A),
(u, v ),
podemos
OTP,
ya que
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.
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
OTP
vlida. Quedando
62
CAPTULO 6. GRAFOS
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
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
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,
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.
63
Tipo 1: (y ; z ) z ; x
Para modicar la
OTP
x.
Tipo 2: y ; z (z ; x)
Para modicar la
OTP
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
t1
del
t1 ; z z ; t2 t1 ; z (z ; t2 ) (t1 ; z ) z ; t2 (t1 ; z ) (z ; t2 )
OTP
te conexa en un lugar determinado de la regin afectada, La Figura 6.12 muestra la 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.
G = (V, A),
(u, v ),
podemos
64
CAPTULO 6. GRAFOS
OTP
ya que las componentes conexas seguirn agrupadas y todas las aristas entre las componentes conexas seguirn teniendo una orientacin vlida.
Los vrtices u y
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.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),
(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:
66
CAPTULO 6. GRAFOS
Las redes neuronales requieren conocer los pesos de las conexiones entre dos
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).
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
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
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
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
configure
y del
Makefile
puede
ser muy complicada y laboriosa. Para facilitar esta tarea, se han creado un
Autoconf Automake
69
70
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
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
Doxygen,
Doxygen
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:
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 (
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
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.
$> cd libgann-0.1
3. Conguramos la compilacin e instalacin de la biblioteca.
$> ./configure
4. Compilamos Libgann.
$> make
5. Instalamos la biblioteca.
Para ver las opciones disponibles podemos pasarle la opcin -h. Por defecto Libgann ser instalada en /usr/local.
73
74
$> ldconfig
7. Para desinstalar la biblioteca usaremos el comando:
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.
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
data_out ) ) ;
data_out ) ) ;
data_out ) ) ;
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 : "
0.85 ,
0.35 ,
unsigned ( 1 0 0 0 ) )
77
unsigned ( 1 0 0 0 ) )
"
catch ( L i b g a n n E x c e p t i o n
&e ) {
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
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
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,
init
de la clase
Libgann,
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_out ) ) ;
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.
sps,
iremos
insertndole patrones de entrenamiento supervisados, estos estn implementados a travs de la clase por
SupervisedPattern.
de dos datos, uno de entrada y uno de salida. Los datos estn implementados
Data
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
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
load.
48 49 50 51 52 53 54
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
unsigned,
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
Una vez creado el Multiperceptron, podremos obtener una representacin grca de ste, para ello usaremos su mtodo
draw,
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:
ti
vml
vmlz
vrml
vtx
wbmp
xlib
58 59 60
error
cometido
por
Multiperceptron
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
81
unsigned(1000)?, pues bien la train, cuyos prototipos unsigned, realiza el unsigned, mientras
le dice al
unsigned
y la otra un
double.
entrenamiento durante el nmero de ciclos que especica el que la versin que recibe el
double,
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
Al igual que pasaba con los conjuntos de patrones, el Multiperceptron provee los mtodos
save
load,
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
error
cometido
0.85 ,
unsigned ( 1 0 0 0 ) )
es :
"
mp,
mp2
multiperceptron.xml
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 ) {
Libgann provee una jerarqua de excepciones cuya clase base es esta clase dene un mtodo
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
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
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.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 . . . . . . . . . . . . . . . . . . . . . . .
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
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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
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
Captulo 4
libgann::PerformanceException
libgann::ConvergeError
msg
libgann::LibgannException
libgann::PerformanceException
libgann::ConvergeError
Mtodos pblicos
ConvergeError (const string &msg)
Constructor.
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
4.2.
libgann::PatternsException
libgann::DataError
msg
libgann::LibgannException
libgann::PatternsException
libgann::DataError
Mtodos pblicos
DataError (const string &msg)
Constructor.
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
10
4.3.
libgann::FunctionException
libgann::ForbiddenFunctionError
msg
libgann::LibgannException
libgann::FunctionException
libgann::ForbiddenFunctionError
Mtodos pblicos
ForbiddenFunctionError (const string &msg)
Constructor.
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
11
4.4.
libgann::FunctionException
libgann::ForbiddenFunctionError
msg
libgann::LibgannException
libgann::FunctionException
Mtodos pblicos
FunctionException (const string &msg)
Constructor.
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
12
4.5.
libgann::Hopfield
outputs inputs
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
13
void update ()
Propaga por la red los valores ya existentes en la entrada de sta.
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.
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
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.
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.
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.
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
15
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.
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 >.
La documentacin para esta clase fue generada a partir del siguiente chero: hopeld.hh
19
4.6.
libgann::Jordan
outputs inputs
libgann::NeuralNetwork< A >
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
void init (double a=-1, double b=1, double c=0, double d=0, double e=0)
Inicializa la red de Jordan.
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.
4.6.1.
Descripcin detallada
21
4.6.2.
4.6.2.1.
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.
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.
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
4.6.4.
4.6.4.1.
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.
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 >.
La documentacin para esta clase fue generada a partir del siguiente chero: jordan.hh
27
4.7.
libgann::LayersException
libgann::NumLayersError
libgann::NumNeuronsLayersError
ms g
libgann::LibgannException
libgann::LayersException
Mtodos pblicos
LayersException (const string &msg)
Constructor.
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
28
4.8.
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.
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
29
4.9.
libgann::LayersException
libgann::NumNeuronsLayersError
libgann::DataError
ms g
libgann::LibgannException
Mtodos pblicos
LibgannException (const string &msg)
Constructor.
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
La documentacin para esta estructura fue generada a partir del siguiente chero: exception.hh
31
4.10.
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.
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
double train (const SupervisedPatterns &patterns, double learn_factor, double momentum_factor, unsigned n) throw (PatternsError)
Entrena al Multiperceptron un nmero de iteraciones.
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.
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
33
4.10.3.
4.10.3.1.
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.
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]
34
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.
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.
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.
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 >.
La documentacin para esta clase fue generada a partir del siguiente chero: multiperceptron.hh
39
4.11.
de
la
Clase
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.
40 virtual void draw (const char path, const char format) const
Dibuja la red neuronal en la ubicacin dada, usando para ello GraphViz.
4.11.1.
Descripcin detallada
4.11.2.
4.11.2.1.
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.
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
44
4.12.
libgann::LayersException
libgann::NumLayersError
ms g
libgann::LibgannException
libgann::LayersException
libgann::NumLayersError
Mtodos pblicos
NumLayersError (const string &msg)
Constructor.
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
45
4.13.
Error del nmero de neuronas por capa. #include <exception.hh> Diagrama de herencias de libgann::NumNeuronsLayersError
libgann::LibgannException
libgann::LayersException
libgann::NumNeuronsLayersError
ms g
libgann::LibgannException
libgann::LayersException
libgann::NumNeuronsLayersError
Mtodos pblicos
NumNeuronsLayersError (const string &msg)
Constructor.
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
46
4.14.
libgann::PatternsException
libgann::NumPatternsError
msg
libgann::LibgannException
libgann::PatternsException
libgann::NumPatternsError
Mtodos pblicos
NumPatternsError (const string &msg)
Constructor.
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
47
4.15.
libgann::PatternsException
libgann::PatternError
msg
libgann::LibgannException
libgann::PatternsException
libgann::PatternError
Mtodos pblicos
PatternError (const string &msg)
Constructor.
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
48
4.16.
libgann::PatternsException
libgann::PatternsError
msg
libgann::LibgannException
libgann::PatternsException
libgann::PatternsError
Mtodos pblicos
PatternsError (const string &msg)
Constructor.
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
49
4.17.
libgann::PatternsError
msg
libgann::LibgannException
libgann::PatternsException
Mtodos pblicos
PatternsException (const string &msg)
Constructor.
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
50
4.18.
libgann::PerformanceException
libgann::ConvergeError
msg
libgann::LibgannException
libgann::PerformanceException
Mtodos pblicos
PerformanceException (const string &msg)
Constructor.
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
51
4.19.
libgann::RadialBasis
outputs inputs
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.
52
Constructor.
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.
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
53
4.19.2.
4.19.2.1.
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.
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.
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:
4.19.4.
4.19.4.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
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.
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 >.
La documentacin para esta clase fue generada a partir del siguiente chero: radial_basis.hh
59
4.20.
Mtodos pblicos
double operator() (double a, double b) const
4.20.1.
Descripcin detallada
4.20.2.
4.20.2.1.
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
60
4.21.
la
Clase
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.
61
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
4.21.2.
4.21.2.1.
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.
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
65
4.22.
input_ output_
libgann::SupervisedPattern
Mtodos pblicos
SupervisedPattern (const Data &input=Data(), const Data &output=Data())
Constructor.
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.
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
67
4.23.
Mtodos pblicos
SupervisedPatterns ()
Constructor predeterminado.
void random_shufe ()
Mtodo que baraja aleatoriamente los patrones dentro del conjunto.
const SupervisedPattern & operator[ ] (unsigned i) const void save (const char path) const
Guarda el conjunto de patrones en la ubicacin dada.
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.
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.
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.
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.
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
70
4.24.
la
Clase
libgann::UnsupervisedNeuralNetwork< A >
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.
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 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
4.24.2.
4.24.2.1.
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.
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
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
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
75
4.25.
Mtodos pblicos
UnsupervisedPatterns ()
Constructor predeterminado.
void random_shufe ()
Mtodo que baraja aleatoriamente los patrones dentro del conjunto.
const UnsupervisedPattern & operator[ ] (unsigned i) const void save (const char path) const
Guarda el conjunto de patrones en la ubicacin dada.
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.
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.
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.
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.
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
78
4.26.
libgann::XmlException
libgann::XmlValidationError
ms g
libgann::LibgannException
libgann::XmlException
Mtodos pblicos
XmlException (const string &msg)
Constructor.
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
79
4.27.
libgann::XmlException
libgann::XmlValidationError
msg
libgann::LibgannException
libgann::XmlException
libgann::XmlValidationError
Mtodos pblicos
XmlValidationError (const string &msg)
Constructor.
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
80
Captulo 5
Documentacin de archivos
5.1. Referencia del Archivo exception.hh
string
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
83
5.1.1.
Descripcin detallada
5.1.2.
5.1.2.1. Valor:
\ \ \ \
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.
84
Documentacin de archivos
5.2.
cmath
string
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
85
5.3.
#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
libgann.hh
Namespaces
namespace libgann
Clases
class libgann::Hopeld
Red de Hopeld.
5.3.1.
Descripcin detallada
86
Documentacin de archivos
5.4.
#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
libgann.hh
Namespaces
namespace libgann
Clases
class libgann::NeuronJordan class libgann::LinkJordan class libgann::Jordan
Red de Jordan.
5.4.1.
Descripcin detallada
87
5.5.
#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.
88
Documentacin de archivos
5.6.
#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
libgann.hh
Namespaces
namespace libgann
Clases
class libgann::NeuronMultiperceptron class libgann::LinkMultiperceptron class libgann::Multiperceptron
Multiperceptron.
5.6.1.
Descripcin detallada
89
5.7.
#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
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
90
Documentacin de archivos
5.8.
#include <algorithm> #include <vector> #include "exception.hh" Dependencia grca adjunta para pattern.hh:
pattern.hh
algorithm
vector
exception.hh
string
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.
91
5.8.1.
Descripcin detallada
Fichero de cabecera donde se declaran los patrones que usaremos en las redes neuronales.
92
Documentacin de archivos
5.9.
#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
libgann.hh
Namespaces
namespace libgann
Clases
class libgann::NeuronRadialBasis class libgann::RadialBasis
Red neuronal de base radial.
5.9.1.
Descripcin detallada
93
5.10.
cstdlib
libgann.hh
Namespaces
namespace libgann
Clases
class libgann::Rng
Generador de nmeros aleatorios.
5.10.1.
Descripcin detallada
94
Documentacin de archivos
5.11.
neural_network.hh
exception.hh
vector
neuron.hh
graph.hh
graph_draw.hh
string
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
95
5.12.
neural_network.hh
exception.hh
vector
neuron.hh
graph.hh
graph_draw.hh
string
hopfield.hh
libgann.hh
Namespaces
namespace libgann
Clases
class libgann::UnsupervisedNeuralNetwork< A >
Red Neuronal no Supervisada.
5.12.1.
Descripcin detallada
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
Apndice D
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.
194
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,
license if you copy, modify or distribute the work in a way requiring permission
Modied Version
Document or a portion of it, either copied verbatim, or with modications and/or translated into another language. A
Secondary 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
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
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
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
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
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
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
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
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.
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
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.
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.
Copyright
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).
[3]
[4]
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]
[7]
[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]
http://www.netfort.gr.jp/~dancer/column/libpkg-guide/
http://www.dwheeler.com/program-library/
[14]
http://www.zator.com/Cpp/index.htm
[15]
[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.
Requirements Specications.