Download framework para redes neuronales en java
Document related concepts
no text concepts found
Transcript
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMATICA PROYECTO FIN DE CARRERA FRAMEWORK PARA REDES NEURONALES EN JAVA AUTOR: MIGUEL LARA ENCABO MADRID, Junio 2006 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Autorizada la entrega del proyecto del alumno/a: MIGUEL LARA ENCABO .......................................................... EL DIRECTOR DEL PROYECTO JUAN CARLOS ESQUIVEL DÍAZ Fdo.: ........................ Fecha: ....../ ....../ ...... Vo Bo del Coordinador de Proyectos MIGUEL ÁNGEL SANZ BOBI Fdo.: ........................ Fecha: ....../ ....../ ...... Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 I Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ FRAMEWORK PARA REDES NEURONALES EN JAVA Autor: Lara Encabo, Miguel. Director: Esquivel Díaz, Juan Carlos. Entidad Colaboradora: ICAI – Universidad Pontificia Comillas RESUMEN DEL PROYECTO Se desea construir una solución completa que permita a desarrolladores de software crear, educar y utilizar Redes Neuronales Artificiales (RNA’s) en proyectos de reales de Java. Para lograrlo se propone el desarrollo de dos elementos: JCortex, framework para Redes Neuronales Artificiales en Java; y JCortexBuilder, entorno gráfico de desarrollo para JCortex. Desde el comienzo del diseño y estudio de este proyecto, se prestó gran atención a la combinación de framework y entorno de desarrollo; ya que es imprescindible para su futuro contar con un IDE (Entorno Integrado de Desarrollo) fácil de usar y potente que pueda complementar a JCortex. El objetivo principal en el desarrollo del framework ha sido lograr un sistema práctico, que pueda ser utilizado por la comunidad de programadores de Java para resolver exigencias reales de sus aplicaciones. Para ello el framework ha de permitir desarrollar sobre él soluciones basadas en RNA’s con distintos niveles de profundidad según el tipo de usuario, personalizar las redes y su funcionamiento, recurrir a los modelos más habituales de RNA’s ya implantados, poder añadir cómodamente nuevos modelos, etc. Además se debe permitir un entorno que enmascare las bases matemáticas a los usuarios que prefieran ignorarlas. El fin último es lograr que sobreviva el fin de carrera y se convierta en un proyecto de código abierto que continúe su crecimiento y evolución. Para ello se ha habilitado la dirección http://www.jcortex.com desde la que se puede acceder a las últimas versiones, manuales y tutoriales. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 II Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ El análisis de viabilidad del proyecto dio un resultado positivo. Estudiando el estado de la tecnología, se puede advertir que existe tanto la oportunidad como la necesidad de proporcionar un sistema de creación de RNA’s dirigida a desarrolladores de software. Estos usuarios exigen las mejores prestaciones de un framework desde el punto de vista de la ingeniería de software, pero en general desconocen – o no tienen interés en conocer – las bases y teoría detrás de las soluciones de RNA’s. Siempre manteniendo abierta la posibilidad de que haya un usuario que desee adentrarse. Este es un nicho de oportunidad que otras soluciones ya existentes como JOONE o Matlab no alcanzan a cubrir. Al ser éste un proyecto de investigación básica no tiene muchas tablas para defenderse ante un análisis de viabilidad económico. Sin embargo, considerando que se enmarca dentro del ámbito de un proyecto académico no remunerado, no es despreciable. Entrando en el diseño e implantación del framework JCortex, se parte de la idea de que la riqueza del mismo no radica en proporcionar un gran número de funcionalidades completas y soluciones cerradas. Lo realmente importante es ofrecer una estructura sólida sobre la que se puedan construir soluciones basadas en RNA’s. Para crear un framework de Java con las máximas garantías, se han marcado unas normas metodológicas que pasan por seguir estrictamente el Principio AbiertoCerrado (facilitado con el Principio de Inversión de Dependencias), el Principio de Segregación de Interfaces y la Ley de Demeter, en la medida en que ésta no afecte en exceso al rendimiento. La incorporación de Patrones de Diseño de Orientación a Objetos (Gang of Four, GoF) proporciona una seguridad adicional. En el framework se emplean entre otros Template Method, Observer, Singleton, Composite… A su vez se ha definido una metodología estricta para el trabajo con datos de configuración en XML, al ser este un entorno predispuesto a soluciones no demasiado correctas. Para lograr un sistema sólido, versátil y útil se recurrió a un modelo conceptual modular que evolucionó hasta el sistema definitivo en el que las funciones están repartidas en módulos (clases o interfaces) que tienen su contrato, responsabilidad, interfaz y funcionalidades claramente definidos. En el paquete com.jcortex se Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 III Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ recogen las interfaces y clases abstractas generales, así como las constantes y utilidades comunes. Se puede destacar como principales las clases abstractas: NeuralNetwork que recoge el funcionamiento y estructura interna de la red, Neuron para formar las estructuras de la red, Teacher para educar la red mediante algoritmos supervisados o no supervisados… También recoge el sistema de estadísticas de los entrenamientos, que gira en torno a la clase Statistics, y a los ProgressAnalyzer’s que se encargan de estudiar los valores registrados con el fin de detener un entrenamiento antes de que se alcance el sobreaprendizaje. A partir del paquete com.jcortex se van añadiendo el resto que forma la jerarquía del framework. En lo que se podría encontrar el núcleo del framework encontramos com.jcortex.activationFunctions, .distanceFunctions, .networkFunctions y .translators, que recogen las funciones matemáticas y los traductores de entrada y salida básicos distribuidos con JCortex. Las redes no están restringidas a su uso exclusivo, sino que se pueden crear nuevas funciones y traductores extendiendo las interfaces presentes en el paquete principal. JCortex soporta la internacionalización y localización a través de Resource Bundles. Entre los modelos de red distribuidos con el framework se encuentran los que se han considerado más dispares y más utilizados en el mundo real: las Redes de Hopfield, los Mapas de Kohonen y a partir de las redes Feed-Forward el modelo Perceptrón y el Perceptrón Multicapa con el mecanismo de retropropagación. Estas redes se incluyen en los paquetes de modelos com.jcortex.hopfield, .kohonen, .feedForward y .backPropagation. Un desarrollador puede crear sus propios modelos de red extendiendo, al menos, las clases NeuralNetwork y Teacher, y opcionalmente Neuron si fuera necesario. Todos estos modelos de red han sido completamente implantados, recurriendo a una metodología de pruebas continuas de eficacia y posteriormente de eficiencia realizando un profiling de la ejecución de sus entrenamientos. Con esta optimización se procuraba obtener el doble beneficio de afinar el núcleo framework al máximo, y distribuir modelos realmente útiles El entorno de desarrollo JCortexBuilder fue construido bajo la premisa de no lastrar en modo alguno el funcionamiento del framework. Se puede considerar este entorno como la prueba de fuego de JCortex. JCortexBuilder permite crear redes neuronales Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 IV Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ de los modelos ofrecidos, gestionar múltiples entrenamientos simultáneos, almacenar la red en formato XML, exportarla a su proyecto Java definitivo e incluso documentar de forma gráfica la red diseñada. Y lo más importante: es lo suficientemente dinámico y ofrece las funcionalidades necesarias para ser personalizado y absorber los nuevos modelos de red y módulos que cree el usuario. Todas las clases y paquetes del entorno cuelgan del paquete com.jcortex.builder. El sistema está completamente internacionalizado con localizaciones gestionadas mediante Resource Bundles. Desde el punto de vista puramente técnico se puede considerar que el proyecto ha sido un éxito, ya que cumple con los objetivos iniciales, a pesar de que algunos objetivos secundarios hayan tenido que ser relegados para versiones futuras en favor de una mejor consecución del primario. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 V Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ NEURAL NETWORKS FRAMEWORK FOR JAVA The aim to build a complete solution for that will allow software developers to create, educate and use Artificial Neural Networks (ANNs) in real-life Java projects. To achieve this goal two elements will be developed: JCortex, an Artificial Neural Network framework for Java; and JCortexBuilder, the graphic environment for developing solutions on JCortex. Right from the beginning of the design and study process, great attention was devoted to the combination of framework and developing environment; as it is essential for its future to have a IDE easy to use and powerful that can complete JCortex. The main objective on the development of the framework has been to achieve a useful system that can be used by the Java community of Java programmers to comply with their applications’ real demands. For this the framework must allow the to develop on top of it ANN-based solutions at different levels of depth, according to the kind of user, customize the networks and how they work, use the most common ANN models already provided, conveniently add new models, etc. Moreover, it must allow an environment that can hide the mathematic basis from the users who prefer to ignore them. The final objective is to create a project that can survive the End-ofDegree assignment in order to become an open-source project that can continue its growth and evolution. The online site http://www.jcortex.com has been created so it can become the headquarters from which the latest versions, manuals and tutorials can be obtained. The project’s Feasibility Analysis produced a positive result. Studying state-of-the-art technology available in these areas, it can be noticed that both the need and the opportunity exists for providing a ANN creation system aimed at software developers. These users demand the best performance from a framework from the point of view of software engineering, but in the general picture they have no idea – or have no interest in knowing – the basis the theory behind ANN solutions. Yet the possibility Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 VI Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ must remain open that there can be a user who really wants to get into it. This is an opportunity niche that other present solutions such as JOONE and Matlab do not really fulfil. As this is a basic-technology investigation project it has little strength to stand against an Economic Feasibility Analysis. Anyhow, considering it is framed inside a non-remunerated academic project, it is not despisable. Looking into the design and programming of the JCortex framework, we start from the idea that it richness does not stand in the possibility of offering a large number of complex and closed solutions. What is really important is to offer a strong structure on which ANN based solutions can be built upon. To create a Java framework with the highest guarantees some methodology rules have been set. These cover the strict use of the Open-Close Principle (helped by the Dependency Inversion Principle), the Interface Segregation Principle and Demeter’s Law to an extend in which it does not hurt too much performance. The inclusion of Object Oriented Design Patters (Gang of Four, GoF) offers an additional safety. In the framework can be found – among many others – Template Method, Observer, Singleton, Composite… At the same time, a strict methodology for working with XML configuration data has been defined, as this is an environment predispose to not-very-correct solutions. In order to obtain a solid, versatile and useful system a modular conceptual model was chosen. The modular paradigm evolved until it became the final architecture in which functions are divided into modules (classes and interfaces) that have clearly defined contracts, responsibilities, interface and functionalities. The package com.jcortex collects all common interfaces and abstract classes, as well as the constants and utilities used throughout the whole framework. The most important abstract classes can be pointed out: NeuralNetwork covers how the network works and its inner structure, Neuron to make up the network’s structure, Teacher to train the red with supervised or non-supervised algorithms… It also gathers the training statistics system that is centred on the class Statistics, and the ProgressAnalyzers in charge of studying the values recorded so they can stop the training before the network learns too much. Hung from the main package, com.jcortex, the rest of the framework’s hierarchy is grown. The framework’s kernel holds com.jcortex.activationFunctions, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 VII Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ .distanceFunctions, .networkFunctions and .translators, that collect the mathematical functions as well as the input and output translators distributed with JCortex. Networks are not tied to their exclusive use, but new functions and translators can be created to meet the user’s needs, by extending the interfaces from the main package. JCortex supports internationalization and localization through Resource Bundles. Among the network models distributed with the framework are the ones that have been considered the most different and the most widely used in the real world: the Hopfield Networks, Kohonen Maps and, granted by the Feed-Forward model, the Perceptron Network and the Multilayer Perceptron Network with the backpropagation mechanism. These networks are included in the models’ packages com.jcortex.hopfield, .kohonen, .feedForward and .backPropagation. A developer can create its own network models extending, at least, NeuralNetwork and Teacher classes, and optionally Neuron if it is required. All these network models have been fully programmed using a method of continuous effectiveness tests and later efficiency tests, making a profile of the training’s executions. Through this optimization process we expect to achieve the double benefit of tuning the framework’s kernel to the maximum, and distributing really useful network models. The JCortexBuilder developing environment has been built under the premise of not lumbering the framework’s work. This environment can be considered as the acid test of JCortex. JCortexBuilder simplifies the creation of neural networks for the given models, manages multiple simultaneous trainings, stores the network in XML files, exports the working result into the user’s Java project and it even helps graphically documenting the designed network. And, above all, it is dynamic enough to offer the required facilities for its customization and to absorb the new network models and any user-created module. All the environment’s classes and packages are hung from the main package com.jcortex.builder. The system is completely internationalized and localized using Resource Bundles. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 VIII Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ From the purely technical point of view, it can be considered that the project has been a success., as it accomplishes the initial objectives, although some of the secondary aims have had to be left behind for future versions, in favour of a better achievement of the primary objectives. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 IX Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Índice del documento 1. Descripción del proyecto ....................................................................................... 6 2. Objetivos............................................................................................................... 7 3. Motivaciones......................................................................................................... 8 4. Estudio de viabilidad ............................................................................................. 9 4.1. Análisis de necesidad y oportunidad ............................................................... 9 4.1.1 Alternativas ya existentes.......................................................................... 9 4.2. Análisis económico....................................................................................... 10 4.4. Planificación................................................................................................. 11 4.3. Conclusión de los análisis de viabilidad........................................................ 13 5. Desarrollo del framework JCortex ....................................................................... 14 5.1 Descripción del Framework JCortex .............................................................. 15 5.2. Metodología de desarrollo ............................................................................ 16 5.2.1. Uso de Patrones de Diseño O.O. ............................................................ 17 5.2.2. Optimización iterativa de los modelos de red ......................................... 18 5.2.3. Metodología de trabajo con XML .......................................................... 20 a) Métodos para el almacenamiento de la configuración (Store)................... 21 b) Métodos para la recuperación de la configuración (Load) ........................ 23 c) Formato básico de los documentos XML generados por JCortex.............. 24 5.3. Modelo Conceptual de Redes Neuronales ..................................................... 26 5.4. Modelo Lógico del framework...................................................................... 28 5.4. El sistema de paquetes com.jcortex.*. .................................................. 30 5.5. Paquetes del núcleo ...................................................................................... 31 5.5.1. Estructura esencial de la Red Neuronal .................................................. 35 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 1 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ a. Propagación en una Red Neuronal............................................................ 37 b. Exportar una Red Neuronal en XML........................................................ 38 5.5.2. Relación entre AxonSource, AxonReceiver, Sensor y Neuron. 40 a) Puntualizaciones sobre las neuronas (Neuron) ....................................... 42 b) Sensores y neuronas desde el punto de vista de NeuralNetwork ......... 42 5.5.3. Los Traductores ..................................................................................... 44 5.5.4. Las Funciones........................................................................................ 47 a) Funciones de Activación....................................................................... 48 b) Funciones de Activación para Back-Propagation ................................. 50 c) Funciones de Distancia ......................................................................... 51 d) Funciones de Red ................................................................................. 52 5.5.6. El Maestro (Teacher).......................................................................... 53 a) La clase abstracta Teacher.................................................................... 53 b) Método educateNetwork() Genérico............................................... 55 c) Método educateNetwork() Iterativo ................................................ 56 d) Reparto de los conjuntos de ejemplos ...................................................... 58 5.5.7. Recogida y análisis de Estadísticas......................................................... 62 a) El Modelo de Datos de las Estadísticas .................................................... 63 b) Recogida de datos estadísticos ................................................................. 65 c) Las Estadísticas y sus Analizadores ......................................................... 66 d) Estructura de los Analizadores de Estadísticas ......................................... 66 e) Analizador ValueDecreaseAnalyzer.............................................. 67 f) Analizador ValueVariationAnalyzer............................................ 69 g) Analizador ComposedProgressAnalyzer ...................................... 70 h) Información sobre la parada..................................................................... 71 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 2 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ h) El modelo de StatisticListener ................................................... 71 5.5.8. Internacionalización y localización ........................................................ 73 5.5.9. Utilidades en el paquete básico .............................................................. 74 a) Utilidades en ConsoleUtilities...................................................... 74 b) Utilidades en LoadAndStoreUtilities .......................................... 74 5.6. Paquetes de Modelos de red.......................................................................... 76 5.6.1. Indicaciones de construcción para modelos de Redes Neuronales artificiales en JCortex ...................................................................................... 78 5.6.2. Redes de Hopfield (com.jcortex.hopfield)............................... 79 a. Descripción de la Red .............................................................................. 79 b. Diseño del modelo ................................................................................... 79 c.- Propagación en la red de Hopfield .......................................................... 81 d. Entrenamiento de una Red de Hopfield.................................................... 85 e. Serialización en XML .............................................................................. 87 5.6.3. Mapas de Kohonen (com.jcortex.kohonen) ................................. 89 a. Descripción de la Red .............................................................................. 89 b. Diseño del modelo ................................................................................... 89 c. Propagación ............................................................................................. 98 d. Maestro DefaultKohonenTeacher ................................................ 100 e. Cálculo de los Vecindarios..................................................................... 102 f. Construcción de las Matrices de Conexión Directa ................................. 105 g. Serialización en XML ............................................................................ 114 5.6.4. Modelo Genérico Feed-Forward.......................................................... 116 a. Descripción de la red genérica................................................................ 116 b. Diseño del modelo de propagación - ToDoList ...................................... 116 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 3 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6.4. Modelo Perceptrón (com.jcortex.feedForward) ...................... 123 a. Descripción de la Red ............................................................................ 123 b. Diseño del modelo ................................................................................. 123 c. Propagación ........................................................................................... 123 d. Maestro DefaultPerceptronTeacher ......................................... 124 f. Serialización en XML............................................................................. 125 5.6.5. Modelo Preceptrón Multicapa (com.jcortex.backPropagation) ...................................................................................................................... 127 a. Descripción de la Red ............................................................................ 127 b. Diseño del modelo ................................................................................. 128 c. Propagación ........................................................................................... 130 d. Maestro DefaultMultilayerPerceptronTeacher .................. 130 e. Serialización en XML ............................................................................ 132 5.7. Estudio de Optimización............................................................................. 134 5.7.1. Entrenamiento de un Perceptrón Multicapa ......................................... 134 5.7.2. Entrenamiento de un Mapa de Kohonen.............................................. 135 5.7.3. Resultados de los análisis mostrados ............................................... 136 6. Desarrollo del IDE JCortexBuilder .................................................................... 138 6.1. El IDE JCortexBuilder................................................................................ 139 6.2. Diseño del Entorno de Desarrollo JCortexBuilder....................................... 140 6.1.1. Adaptación de un modelo de red a JCortexBuilder ............................... 144 6.1.2. Archivo de configuración..................................................................... 145 6.2. Formato de los archivos de Datos ............................................................... 147 6.2. Visita guiada a JCortexBuilder ................................................................... 148 6.2.1. Principales elementos de la interfaz...................................................... 148 6.2.2. Ejemplo de entrenamiento Perceptrón Multicapa ................................. 149 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 4 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 7. Planificación y Seguimiento .............................................................................. 158 8. Conclusiones del Proyecto................................................................................. 164 9. Bibliografía, materiales y aplicaciones............................................................... 165 Anexo A: Documentación de la API – JCortex...................................................... 166 Anexo B: Ejemplos de uso..................................................................................... 423 Modelo de Redes de Hopfield............................................................................ 423 Modelo de Mapas de Kohonen .......................................................................... 435 Modelo de Red Perceptrón ................................................................................ 472 Modelo de Redes Perceptrón Multicapa............................................................. 476 Archivo de ejemplos aFuncion2variables.txt...................................................... 480 Archivo de ejemplos aNumbers.txt.................................................................... 497 Archivo de ejemplos aPromoters.txt .................................................................. 498 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 5 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 1. Descripción del proyecto Se desea construir una solución completa que permita a desarrolladores de software crear, educar y utilizar Redes Neuronales Artificiales en proyectos reales de Java. Para lograrlo se propone el desarrollo de dos elementos: JCortex: framework para Redes JCortexBuilder: entorno gráfico Neuronales Artificiales en Java. de desarrollo para JCortex. En el documento del Anexo A, presentado en junio del 2005, se enunciaba la siguiente descripción del proyecto: “Diseño y construcción de un framework en Java que facilitara la creación, entrenamiento, etc. de sistemas basados en redes neuronales. Podría incluirse también un sistema basado en dicho framework con un interfaz gráfico para la creación de las redes, su entrenamiento, etc.” A partir de esta descripción, el Proyecto Fin de Carrera se fue perfilando durante los meses de julio y agosto. En este intervalo no sólo se analizó la tecnología disponible y las bases teóricas, sino que se fueron definiendo las prioridades. Se llegó a la conclusión de que si bien la importancia de este proyecto se encuentra en el framework que lo sustenta – que ha de ofrecer las máximas garantías y posibilidades de extensión – su éxito en el mundo real depende en gran medida de contar con un entorno de desarrollo sencillo, potente y, ante todo, útil. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 6 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 2. Objetivos El objetivo principal en el desarrollo del framework ha sido lograr un sistema práctico, que pueda ser utilizado por la comunidad de programadores de Java para resolver exigencias reales de sus aplicaciones. A continuación se enumeran los objetivos secundarios que han establecido las guías de desarrollo del framework JCortex. • El framework ha de permitir desarrollar sobre él soluciones basadas en Redes Neuronales Artificiales a distintos niveles de profundidad. Habrá usuarios que quieran acceder a soluciones inmediatas y sin complicaciones, mientras que otros desearán tener acceso, a fondo, a los parámetros y ajustes de las Redes Neuronales creadas. • Obtener un framework que pueda ser personalizado, tanto el modelado de las redes como su funcionamiento y entrenamiento. La riqueza de un framework no radica tanto en su funcionalidad implantada como en las facilidades y posibilidades que ofrece para su personalización. Con este objetivo en mente, además, se aseguran las posibilidades de evolución futura del sistema. • Implantar en el framework los modelos de Redes Neuronales Artificiales más utilizados. De tal forma que se permita su uso inmediato como solución de creación, entrenamiento y uso de Redes Neuronales Artificiales. • Cómoda extensión del framework para incluir nuevos modelos personalizados según las necesidades futuras del proyecto JCortex o los desarrollos propios de sus usuarios (programadores). • Obtener un entorno de desarrollo gráfico – JCortexBuilder – que facilite la creación, entrenamiento, uso y traslado de las redes creadas sobre el framework JCortex a los proyectos software en los que trabaja el usuario. El entorno de desarrollo ha de enmascarar la complejidad del framework JCortex para el usuario que no desee profundizar en esta tecnología. Ha de estar preparado para crecer y evolucionar de forma dinámica junto con el framework. En la lista anterior se han obviado los objetivos clásicos de cualquier proyecto de desarrollo de software: eficacia, eficiencia, potencia y versatilidad. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 7 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 3. Motivaciones A continuación se enumeran los tres factores que han motivado la propuesta, elección y realización de este proyecto. • Proporcionar una forma fácil y sencilla para que los programadores puedan implantar soluciones basadas en Redes Neuronales para sus proyectos en Java. • Aprovechar una de las pocas oportunidades disponibles para embarcarse en proyecto de investigación básica. Una de las grandes ventajas de este campo, es la posibilidad que abre a la investigación de nuevas vías de funcionamiento y nuevos métodos. • Realizar una aportación a la comunidad Java a través de un sistema con aspiraciones de convertirse en un proyecto Open Source. • Aprovechar el tirón de la inteligencia artificial y de las Redes Neuronales, en especial para dar respuesta a problemas complejos y sistemas no lineales. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 8 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 4. Estudio de viabilidad 4.1. Análisis de necesidad y oportunidad La tecnología de Redes Neuronales Artificiales es un campo de la Inteligencia Artificial que no parece que reciba todo el interés que se merece, ni se materializa todo el rendimiento del que es capaz. Analizando la situación actual, parece bastante claro que es necesario un sistema fácil y accesible orientado hacia los programadores, para conseguir generalizar de forma definitiva el uso de estas soluciones. Una gran cantidad de ingenieros de software – y todo tipo de especialistas involucrados en el desarrollo de aplicaciones –nunca han adquirido una base académica sobre Redes Neuronales Artificiales, o lo que pudieran saber ha quedado relegado al olvido con el paso del tiempo. En esta situación, es muy improbable que una red neuronal sea la solución propuesta y desarrollada para un problema complejo. Más si se mantiene la idea de que la creación, el entrenamiento y el afinado de una Red Neuronal Artificial es una tarea dura, larga y tediosa. Hay hueco en este entorno, por tanto, para conjunto de framework y entorno de desarrollo que permita crear soluciones basadas en Redes Neuronales Artificiales de la forma más sencilla posible. Este sistema ha de ser fiable y eficiente para ser tomado en cuenta a la hora de diseñar un proyecto software. Ha de enmascarar, siempre que el usuario (programador) lo considere necesario, las bases teóricas y matemáticas, funcionando como una caja negra. Ha de simplificar, facilitar y – en la medida de lo posible – hacer incluso agradable el proceso de creación, entrenamiento y puesta en producción de una red neuronal. 4.1.1 Alternativas ya existentes A continuación se describen las principales alternativas a JCortex – como sistema de creación, entrenamiento y uso de redes neuronales artificiales – mostrando las ventajas que propone JCortex frente a los mismos. Ya existe un framework para redes neuronales en JAVA llamado JOONE (Java Object-Oriented Neural Engine). La primera impresión que ofrece este entorno es de gran complejidad, e incluso se podría considerar menos accesible para su extensión y personalización. Otro factor a tener en cuenta es que JOONE no está pensado para almacenar y recuperar una red al completo, con todos sus parámetros y ajustes, algo esencial para su uso habitual en aplicaciones. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 9 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Matlab es una aplicación típica en el mundo de la ingeniería que dispone de un módulo para trabajar con Redes Neuronales Artificiales. Es posible exportar a JAVA código escrito en el lenguaje de programación matemática de Matlab. Frente a esta alternativa tan extendida, JCortex permite un sistema más rápido y simple, apoyado en un entorno de desarrollo gráfico. Además, como framework abierto, el usuario/programador tiene grandes facilidades para extender y personalizar el funcionamiento del sistema. 4.2. Análisis económico Al ser éste un proyecto de investigación básica nacido del mundo académico, no tiene muchas tablas para defenderse adecuadamente ante un análisis de viabilidad económico. En España, no ya a nivel empresarial sino incluso académico, se valoran más los resultados económicos inmediatos de los proyectos que el avance que su investigación pueda aportar. De ahí que la mayor parte de los proyectos de investigación sean de aplicaciones para su uso concreto y a corto o medio plazo, más que la investigación en nuevas tecnologías y campos más básicos. Sin embargo, son al final estos campos los que mejores réditos proporcionan al entorno socioeconómico. El tiempo dedicado a su diseño, desarrollo y documentación sobrepasa ampliamente las 300 horas, a la vez que no se espera del mismo un retorno de la inversión económico. Sin embargo el rendimiento inmaterial que se puede obtener (y se ha obtenido del mismo) compensa ampliamente el tiempo y recursos dedicados. A la hora de diseñar la Planificación Definitiva, que se presenta en el capítulo 7. Planificación y Seguimiento, se realizó también una acercamiento a la presupuestación del proyecto. Se puede considerar que el único coste representativo es la mano de obra. Las aplicaciones informáticas empleadas son de distribución gratuita o ya estaban disponibles antes de comenzar este proyecto, y la literatura a la que se ha recurrido es perfectamente genérica (ver 9. Bibliografía, materiales y aplicaciones) o bien está disponible a través de Internet. JAVA es un lenguaje tremendamente agradecido en este aspecto ya que posee una comunidad de desarrolladores muy activa que mantiene en forma este lenguaje extremadamente abierto. El único recurso empleado en las tareas de la planificación es el autor. Su consumo se mide por el tiempo dedicado a las actividades del proyecto, con independencia de la naturaleza de las mismas. Teniendo en cuenta un coste de 20! por hora (programador junior) se ha calculado un presupuesto aproximado de 8.625,00!, revisado a 8.676,61! a mitad de proyecto. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 10 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Sí que se puede decir en su defensa que, ignorando el coste de la mano de obra dedicada, éste es trata de un proyecto barato en comparación con los resultados que se espera obtener. Es preciso tener en cuenta el amplio espectro de problemas que podrán ser resueltos de forma efectiva e innovadora con un framework hecho a medida para programadores. 4.4. Planificación La primera planificación de las actividades del proyecto se realizó en el mes de agosto. A la vista de las modificaciones e imprevistos que han surgido durante la realización del proyecto, se puede entender claramente la falta de conciencia de la dimensión real del trabajo a realizar. Además el trabajo académico del último curso, especialmente en la primera mitad del año académico, relegó cualquier intento de avanzar con el proyecto. Tabla 1: Fases de desarrollo previstas en la planificación inicial descartada Inicio Finalización 1 Agosto 2005 23 Diciembre 2005 Framework 5 Septiembre 2005 27 Noviembre 2005 IDE 2 Diciembre 2005 7 Enero 2006 Ejemplos 8 Enero 2006 27 Enero 2006 Framework 1 Marzo 2006 7 Mayo 2006 IDE 5 Marzo 2006 23 Abril 2006 Ejemplos 14 Mayo 2006 2 Junio 2006 7 Mayo 2006 ... Fase Formación y Análisis ALFA01 ALFA02 Cierre y Documentación Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 11 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ September2005 WBS Activity Name 1 Formación 1.1 Aprendizaje básico sobre RNA por cuenta propia 1.2 Teoría sobre RNA en clase 1.3 Teoría de Back Propagation 1.4 Ejercicos en Clase Start Date Finish Date 1/9/05 22/10/05 24/10/05 29/12/05 31/10/05 6/11/05 28/11/05 29/12/05 2 Anexo B 2.1 Realización del Anexo B 22/10/05 27/10/05 2.2 27/10/05 1/11/05 Aceptación Anexo B 2.3 Entrega del Anexo B 2.4 Realización diapositivas Anexo B 2.5 Presentación del Anexo B 3 Framework 3.1 Modelo de propagación genérico 3.2 Modelo Perceptrón 5/9/05 19/9/05 7/10/05 4.2 Prototipado Enlace entre Framework y Prototipo 5 Ejemplos Básicos (pruebas del IDE y framework ALFA) 6 Presentación de Febrero 7 Framework BETA 7.1 Añadir modelos adicionales 7.1.1 Mapas de Kohonen 7.1.2 Otras redes competitivas 7.1.3 Radial Basis Network 7.2 Optimizar algoritmos y mejorar su elegancia 7.3 Tantear soluciones JNI 8 IDE BETA 8.1 Mejora del IDE con los nuevos modelos 9 Documentación Detallada 10 Ejemplos Avanzados (pruebas del IDE y framework BETA) 11 Preparar Proyecto para su Presentación March2006 April2006 May2006 June2006 18/9/05 27/11/05 4.3 February2006 2/10/05 19/11/05 Modelo de Aprendizaje General con Alg. Genéricos January2006 1/11/05 3/10/05 Aprendizaje por Back-Propagation Replantear la estructura del Framework. Nuevo análisis y corrección. 4 IDE 4.1 Análisis sobre la resolución de Problemas December2005 2/11/05 Modelo Perceptrón Multicapa Clases básicas Perceptrón Multicapa 3.4 November2005 2/11/05 27/10/05 3.3 3.3.1 3.3.2 3.5 October2005 T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F S S M T W T F 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 8/10/05 30/10/05 5/11/05 18/11/05 2/12/05 18/12/05 19/12/05 2/1/06 1/1/06 8/1/06 9/1/06 27/1/06 20/2/06 28/2/06 1/3/06 13/3/06 20/3/06 27/3/06 12/3/06 19/3/06 26/3/06 8/4/06 24/4/06 7/5/06 5/3/06 23/4/06 7/5/06 1/6/06 14/5/06 2/6/06 5/6/06 1/7/06 Convocatoria de Exámenes de Febrero 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Ilustración 1: Diagrama de Gantt de la planificación inidial descartada La planificación inicial con la que se realizó el estudio de viabilidad comenzó a mostrarse inviable durante los primeros dos meses de desarrollo. No ya por problemas con los objetivos propuestos, sino por el escaso tiempo y lo impredecible de los condicionantes académicos y profesionales. En su lugar se construyó una nueva planificación mucho más realista, adaptable a las circunstancias y concreta, que se muestra en detalle en el capítulo 7. Planificación y Seguimiento. Los cambios que sufrió la planificación inicial son los siguientes: • Reducción del tiempo en el primer cuatrimestre del año académico (de octubre a enero). • Uso intenso del periodo de exámenes de febrero que se había dejado libre. • Se simplificó los modelos de red a implantar con el fin de otorgar una mayor importancia al objetivo de obtener un núcleo de framework sólido, fiable y eficiente. Se consideró que el objetivo del proyecto radica más en una buena base que en una gran variedad de modelos. • Se adelantó la implantación del entorno de desarrollo con el fin de poder realizar de forma más eficaz las pruebas del framework y los modelos implantados. • Se incluyeron las pruebas de rendimiento con profilers, no recogidas en la planificación inicial. • Se simplificó el sistema de versiones, optando por un desarrollo más continuado. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 12 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 4.3. Conclusión de los análisis de viabilidad A la vista de los análisis anteriores, se puede concluir que el proyecto es viable. La tecnología, las necesidades y la oportunidad son claramente favorable a este respecto. El único punto oscuro podría ser el análisis puramente económico. Sin embargo, si se lo considera dentro del ámbito de un Proyecto Fin de Carrera no remunerado, es plenamente satisfactorio. Esta decisión no estaría tan clara en caso de enmarcarse en un análisis puramente empresarial. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 13 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5. Desarrollo del framework JCortex Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 14 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.1 Descripción del Framework JCortex El framework desarrollado para este Proyecto Fin de Carrera, proporciona la estructura básica sobre la que construir soluciones basadas en Redes Neuronales Artificiales. El paquete básico a partir del cual se organiza el framework es com.jcortex. Esta estructura es única ya que “jcortex.com” es un dominio registrado para este proyecto. JCortex es un framework, por lo que la riqueza del mismo no radica en proporcionar un gran número de funcionalidades completas y soluciones cerradas. Lo realmente importante es su estructura: ofrecer una estructura sólida sobre la que un programador de JAVA pueda desarrollar sus soluciones basadas en redes neuronales. Ha de proporcionar la seguridad de que los desarrollos realizados sobre él – y siguiendo las indicaciones y precauciones facilitadas – son sólidos y fiables. De este modo el framework proporciona los siguientes servicios: • El contrato de los elementos básicos de una Red Neuronal Artificial. • La descripción del comportamiento básico de cada elemento. • La funcionalidad básica, común – o accesible – para cualquier modelo de Red Neuronal Artificial. • Herramientas genéricas para el almacenamiento y recuperación (Load&Store en XML) de las redes creadas, escritura en consola… • Una implantación completa de los modelos de Redes Neuronales Artificiales más comunes en los proyectos informáticos. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 15 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.2. Metodología de desarrollo Una correcta metodología de desarrollo es siempre una garantía para un producto software fiable. Un framework ha de ser tratado como un elemento crítico, dada su importancia en las aplicaciones como substrato tecnológico. Por lo general se entiende que un framework útil (o utilizable) no sólo ha de tener un diseño correcto sino que además ha de ser eficiente, fácil de comprender, ampliar y personalizar. La metodología utilizada en el desarrollo ha de garantizar que las clases creadas y el sistema completo formen un conjunto que cumpla los requisitos indicados anteriormente: formar una base sólida, probada, pura e independiente de sus usos concretos para soluciones basadas en Redes Neuronales Artificiales. Es importante reforzar a lo largo de todo el proceso de diseño y desarrollo la necesidad de crear un núcleo genérico, independiente de los modelos de red concretos. Es este núcleo el que realmente aportará las bondades del framework y sobre el que se ha de volcar todo el esfuerzo posible. Por lo ya expuesto anteriormente es imprescindible tener en cuenta las siguientes normas básicas para el correcto diseño de éste y, en principio, de cualquier otro framework orientado a objetos: • Seguir estrictamente el Principio Abierto-Cerrado (Open-Close Principle - OCP). Aplicándolo, los módulos tendrán que diseñarse de forma que su comportamiento pueda extenderse sin requerir ser modificados. • El principio de Inversión de Dependencias se utiliza principalmente para facilitar el Principio Abierto-Cerrado. • En la medida de lo posible hay que asegurar el Principio de Segregación de Interfaces (Interface Segregation Principle – ISP), con el fin de proporcionar la mayor flexibilidad a la extensión y posteriores desarrollos sobre la base del framework. Aplicándolo, los clientes no deben ser forzados a depender de interfaces que no utilizan. Un ejemplo de este principio se puede hallar en la segregación de las responsabilidades de los entes pensantes de una Red Neuronal en AxonSource y AxonReceiver (ver: 5.5.2. Relación entre AxonSource, AxonReceiver, Sensor y Neuron). • La Ley de Demeter se aplicará en la medida en la que merezca la pena renunciar a cierto rendimiento, con el fin de disminuir el grado de acoplamiento. Con el fin de dar mayores libertades para la optimización, no se utilizará la Ley de Demeter cuando las cadenas de objetos referenciados son interfaces o clases abstractas pertenecientes al núcleo del Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 16 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ framework y, por tanto, es seguro que su contrato no varíe en el futuro; o cuando el rendimiento se vea seriamente afectado por esta restricción. • En el fondo, el Sentido Común es el principio más útil a la hora de diseñar e implantar un framework. Una oportunidad que surge en el panorama del hardware es la cada vez mayor accesibilidad de sistemas multiprocesador, ya sea por compartir varios núcleos en el mismo chip, distintos procesadores trabajando juntos en el mismo entorno o incluso en máquinas distintas. Es imprescindible tener en mente, a la hora de diseñar y desarrollar el framework, futuros desarrollos por la vía del paralelismo. Esta preocupación ha de verse reflejada en el manejo y elección de estructuras de datos, así como en la concurrencia en los datos, cálculos y métodos. 5.2.1. Uso de Patrones de Diseño O.O. El uso intensivo de Patrones de Diseño Orientado a Objetos garantiza el correcto diseño de cualquier proyecto. Más importante resulta, si cabe, en el caso del desarrollo de un framework concebido para ser utilizado en una gran diversidad de aplicaciones. La utilidad de los patrones de diseño es doble: por un lado se diseñan soluciones orientadas a objetos ampliamente probadas, y por otro la presencia de un patrón de diseño suele ser autoexplicativo. Cualquier programador de un lenguaje orientado a objetos con nociones de patrones entenderá la finalidad y el funcionamiento del diseño. Patrones de Gang of Four utilizados en el desarrollo del framework y del entorno desarrollo. Para más información ver el Anexo C con la documentación de la API: • Template Method • Observer • Composite • Singleton & Factory Method • Adapter Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 17 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.2.2. Optimización iterativa de los modelos de red Se ha partido de la siguiente premisa: optimizar los modelos de red implica optimizar al máximo el framework al completo. No es posible llegar a realizar pruebas directamente sobre un framework que sólo proporciona las estructuras y funcionalidad esenciales para poder construir sobre el mismo. Siguiendo esta idea, se planteó la integración de una serie de modelos de red dentro del paquete básico. Si bien estos modelos no llegan a formar parte del núcleo del framework, ofrecen una funcionalidad completa – aunque básica con visos de ser extendida y personalizada – así como la oportunidad de probar a fondo el sistema subyacente. Se ha procurado seleccionar los modelos de Red Neuronal Artificial más utilizados, y a la vez más distintos entre si, con el fin de poder realizar una optimización global de las clases del framework. Diagrama de Actividad 1 El proceso de desarrollo, mejora y pruebas se ejecutará según se muestra en el Diagrama de Actividad 1. Las pruebas consisten en realizar una serie de ejecuciones del modelo sobre una herramienta de profiling que no sólo mide el tiempo de ejecución, sino que además permite hacer un análisis del tiempo y el número de Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 18 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ iteraciones a nivel de método, líneas de código e incluso instrucciones de bajo nivel. Un proceso se considera optimizado si su tiempo de ejecución viene determinado exclusivamente por los cálculos matemáticos e iteraciones ineludibles, propios del sistema de propagación y de aprendizaje. Lo más importante en todo caso es que las tareas de gestión de estructuras de datos, de control de flujo o de tratamiento de estadísticas no representen tiempos de ejecución representativos. Para más información sobre las pruebas consultar el apartado: 5.7. Estudio de Optimización. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 19 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.2.3. Metodología de trabajo con XML XML (eXtensible Markup Language, lenguaje de marcado ampliable o extensible) es un lenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Es un meta-lenguaje que permite definir otros lenguajes de marcado adecuados para usos determinados – en este caso el almacenamiento de instancias de Redes Neuronales artificiales –, mediante una sintaxis personalizada, y basado en archivos de texto plano. El interés de asegurar mediante XML la perdurabilidad de las instancias creadas y entrenadas utilizando las herramientas que proporciona el framework JCortex viene dado por los siguientes motivos: • Es un formato de almacenamiento de información universal, de forma que el mismo archivo de información puede ser compartido entre distintas plataformas e incluso inspeccionado por aplicaciones creadas con lenguajes de programación distintos. • Está enormemente extendido en el entorno de la programación orientada a objetos, y con gran fuerza en JAVA. • Permite al ser humano realizar una lectura fácil y comprensible, incluso cuando se inspecciona el archivo manualmente con un editor de texto. El volcado y recuperación de las Redes Neuronales (y sus componentes) modeladas con este framework, es uno de sus aspectos más oscuros. En especial, la creación de una instancia de Red Neuronal a partir del archivo XML en el que se ha almacenado su configuración, suele ser un proceso complejo en el que son necesarias varias pasadas con construcciones parciales para finalmente recuperar el sistema almacenado. Por tanto, es interesante establecer una metodología clara para la serialización y deserialización de los elementos que forman una red en XML. Ambos procesos se apoyan insistentemente en el patrón de diseño Template-Method (GoF). A continuación se describen los métodos establecidos en la metodología de trabajo con XML. Estos métodos son de implantación obligatoria en todos los elementos susceptibles de contener datos de configuración que tengan que ser preservados. Las interfaces y clases abstractas del núcleo de la aplicación son las encargadas de asegurar que se implanten en los objetos. Hay que señalar que esta metodología es de aplicación general en todo el framework, no se está describiendo la implantación concreta para un elemento o modelo de red. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 20 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Para la creación e inspección de los documentos XML se va a emplear el entorno DOM creado por el W3C para Java. Este framework se distribuye con la versión estándar J2SE, y tiene su raíz en el paquete: org.w3c.dom. a) Métodos para el almacenamiento de la configuración (Store) A continuación se describen los métodos genéricos empleados en el almacenamiento de la configuración de un elemento del framework JCortex. • + final export2XMLDocument() :Document – Método implantado por todos los elementos que pueden ser almacenados como un documento. De hecho, el resultado de este método ha de ser una instancia de documento XML, con el árbol de nodos que recogen la configuración. El método es final ya que es imprescindible que todos los documentos almacenados tengan la misma estructura básica en sus primeros nodos. • + final [clase]2XML(padre :Node, :Document) – Éste método ha de estar implantado en la superclase abstracta, que defina la categoría, de los elementos que pueden ser almacenados. Todos los elementos que van a ser almacenados en XML pertenecen a clases que heredan de una clase abstracta. Se desea que todos los nodos generados por los hijos de una misma superclase compartan una serie de elementos básicos comunes e iguales. Al menos el nombre del nodo XML generado para contener su configuración. Por ejemplo, la clase NeuralNetwork implanta el método neuralNetwork2XML(…), pero no así sus subclases como puede ser KohonenNeuralNetwork. Este método recibe como parámetros el nodo raíz del que tendrá que colgar el nodo creado para contener la información de este elemento. A continuación se describen las acciones que lleva a cabo este método y que se ilustran en el Diagrama de Actividad 2. o Crea el nodo que contendrá la configuración del elemento almacenado. o Añade como atributos o hijos del nodo XML creado, los atributos recogidos que son conocidos desde la superclase. o Es posible que deba incluir un atributo especial llamado “class”, en el que se indique la clase concreta a la que pertenece la instancia cuya información se está almacenando. (Este método se mueve exclusivamente en el ámbito de la clase abstracta que define la categoría.) o Llama al Template Method specific2XML(…) para que complete el nodo con la información propia, sólo conocida por la clase particular. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 21 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ • + abstract specific[Clase]2XML(raiz :Node, :Document) – Método encargado de volcar en el nodo creado la información específica de la subclase concreta sobre la que ha sido invocado. Este método tendrá que ser único y encontrarse en la última subclase, o al menos recoger toda la información desde la última subclase. Cabe llamar la atención a cerca de una diferencia sutil entre los dos últimos métodos. A pesar de recibir ambos como parámetro argumento de llamada una instancia de la clase Node, este nodo tiene distinto significado. En el primer método, [clase]2XML(…), éste es el nodo raíz de nivel superior al que se ha de añadir como hijo el nuevo nodo XML con la información de instancia sobre la que se está invocando. En el segundo caso, specific[Clase]2XML(…), el nodo para la instancia a almacenar ya ha sido creado, y sólo hay que añadir los atributos y los objetos específicos de la subclase concreta. Diagrama de Actividad 2: Almacenamiento de un elemento en XML Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 22 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ b) Métodos para la recuperación de la configuración (Load) A continuación se describen los métodos genéricos empleados para la recuperación de la información almacenada dentro de un documento XML. La carga de datos desde un archivo XML siempre se lleva a cabo con el objetivo de reconstruir la Red Neuronal Artificial creada previamente por el usuario, con todos sus elementos. Normalmente no se recuperará tan solo la instancia propia de la red neuronal (NeuralNetwork), sino que será necesario recuperar – al menos – la configuración de sus neuronas y maestro. Los métodos mas importantes en este proceso son los constructores de las clases a recuperar. Su funcionamiento en el lenguaje Java va a marcar con fuerza el mecanismo de carga y construcción. Este proceso se complica, en la medida en la que en múltiples ocasiones la dependencia entre objetos conocidos y atributos obligará a realizar varias pasadas sobre el documento XML, llevando a cabo construcciones parciales hasta llegar a la definitiva. • La primera acción de un constructor es invocar al constructor de la superclase a la que extiende. De esta forma la secuencia de creación bajará desde las superclases hasta las clases concretas. • Un constructor sólo puede finalizar su ejecución devolviendo la instancia que ha creado, o saltando por una excepción. • Las interfaces no tienen constructores al poder poseer únicamente atributos estáticos y definiciones de métodos. A continuación se describen los métodos que participan de la carga de los datos de una Red Neuronal desde un documento XML. • + ConstructorSuperclase(:Node) – El constructor de la superclase es el primer método en ser completado. Es imprescindible que todas las superclases susceptibles de ser almacenadas implanten, aunque sea en vacío “{}”, un constructor cuyo atributo sea una instancia de Node. Cada superclase ha de recoger y almacenar en la instancia creada los atributos e hijos que ella se encargó de volcar en el nodo. Es posible que en la creación de una instancia, sea necesario atravesar más de una superclase con su respectivo constructor. • + ConstructorClaseConcreta(:Node) – El constructor de la clase concreta es el último en ejecutarse, y por lo tanto el que ha de volcar toda la información que falta en la instancia, extrayéndola del nodo. Pudiera darse la situación en la que este constructor no pudiera tener acceso a todos los datos necesarios para la creación completa de la Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 23 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ instancia. Por ejemplo, puede desconocer la dirección de la instancia de un elemento al que está relacionado pero que todavía no ha sido creado. Es probable que durante la ejecución de los constructores, sea necesaria la creación de nuevas instancias a partir de hijos del nodo procesado. Hay que tener en cuenta que, a pesar de que el proceso parece pesado y costoso, la carga de una Red Neuronal Artificial es una acción que se lleva a cabo no muy a menudo y para la que el usuario está dispuesto a aguardar un corto espacio de tiempo. Es por esto que se ha decidido mantener una estructura que puede llegar a pecar de recargada. c) Formato básico de los documentos XML generados por JCortex En la Tabla 2 se describen los nodos básicos que forman los archivos XML de configuración de Redes Neuronales Artificiales en JCortex. La Tabla 3 presenta una serie de normas de estilo a utilizar en los nombre de los atributos aplicables a cualquier nodo de cualquier elemento en cualquier modelo. Tabla 2: Anidamiento de los nodos en los archivos de configuración <com.jcortex …/> ! <neuralNetwork …/> Nodo raíz de los documentos generados por el framework JCortex. Configuración de una red neuronal. ! <neuron …/> Configuración de una neurona. ! <teacher …/> Configuración de un maestro. Ejemplo de la estructura de un archivo de configuración generado por el framework JCortex para almacenar una Red Neuronal entrenada: <?xml version="1.0" encoding="UTF-8"?> <com.jcortex> <neuralNetwork ... > <!-- Nodos propios de la configuración de la red que no necesitan hacer referencia a las neuronas. --> ... Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 24 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ <!-- Listado de las neuronas. --> <neuron ... > <!-- Configuración de las neuronas. --> </neuron> <!-- Nodos propios de la configutación de la red que necesitan la definición previa de las neuronas. --> ... <!-- Configuración del maestro --> <teacher ... /> </neuralNetwork> </com.jcortex> Tabla 3: Atributos comunes en los nodos XML de configuración class = “” Atributo que indica la clase concreta con la que se implanta un elemento. id = “” Atributo que indica la identificación numérica o alfanumérica de un elemento. Este atributo se utilizará tanto en la descripción de la información del elemento, como en las referencias que se hagan al elemento concreto desde cualquier otro nodo. ix = “” Atributo que indica una posición en una tabla o estructura. Ha de ser un valor numérico. size = “” Atributo que indica el tamaño de una estructura de datos o el número de elementos recogidos como hijos de un nodo. value = “” Atributo que recoge un valor numérico de cualquier tipo. weight = “” Atributo que recoge un valor numérico que ejerce como peso en la configuración de una Red Neuronal o un elemento de la Red. Los atributos de los nodos anteriores, así como el resto de nodos necesarios para la construcción de cada modelo concreto de Red Neuronal Artificial, se describirán en futuros apartados. Es importante advertir que, en última instancia, el nombre de los nodos y de sus atributos está determinado por las entidades a las que hacen referencia en el diseño lógico y físico de la aplicación. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 25 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.3. Modelo Conceptual de Redes Neuronales El reto de desarrollar un framework de Redes Neuronales radica en conseguir una estructura que cumpla los siguientes requisitos: • Solidez para afianzar la fiabilidad de las Redes Neuronales basadas en ella. • Versatilidad para poder adaptarse a cualquier modelo de Red Neuronal. • Que sea útil, esto es, fácil de aplicar para resolver los problemas reales a los que se enfrenta un programador de JAVA en sus proyectos de desarrollo. Para cumplir estas exigencias, se ha optado por un modelo modular (ver Ilustración 2) que segmenta una Red Neuronal genérica en unidades – módulos – que tienen perfectamente definidas su funcionalidad, su interfaz, su accesibilidad y su interconexión. Este modelo de red es aplicable tanto a las redes de propagación hacia delante (feed-forward), las de retropropagación (back-propagation), redes recursivas, redes competitivas… Este modelo lo que fija son los elementos de los que dispone la red para alojar su funcionalidad, y los elementos necesarios para que la red pueda ser utilizada en una aplicación real. Ilustración 2: Diseño conceptual de la Red Neuronal Artifical • Red Neuronal: contiene el resto de módulos estableciendo la estructura de cada modelo de red concreto, el conocimiento de todos los elementos que la componen, y sus mecanismos de pensamiento (entrada de información, propagación y salida). Es, por tanto, el elemento que aporta el funcionamiento diferencial de cada modelo de red y cohesiona el resto de unidades de acuerdo con las necesidades del mismo. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 26 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ • Traductor de Entrada: realiza la traducción entre los objetos utilizados como entradas para la Red Neuronal y el vector de números reales con los que trabaja el modelo matemático. Los Traductores de Entrada no son específicos para un modelo de red concreto, sino que dependen del problema abordado. Si el problema versa sobre “coches”, la Red Neuronal recibirá como entrada una instancia de la clase “Coche” que tendrá que ser traducida a sus factores numéricos representativos, como puede ser: la potencia del motor, velocidad máxima, tiempo de aceleración… • Sensores: estos elementos actúan como un buffer, almacenando durante el proceso de pensamiento los datos numéricos de entrada para que puedan ser accedidos por el resto de elementos internos de la Red Neuronal. Se alimentan a partir de los valores numéricos generados por el Traductor de Entrada. • Neuronas: son los elementos pensantes en el más amplio sentido de la palabra. Con esta unidad se pueden identificar multitud de elementos que participan en el manejo de la información dentro de la Red Neuronal. Pueden ser neuronas de McCullock-Pitts, neuronas Adaline, retardadores, etc. Puede que incluso no sea necesario contar con estos elementos para redes simples. • Traductor de Salida: realiza la traducción de los valores numéricos reales producidos por el modelo matemático, y los objetos que son la salida de la Red Neuronal. Los Traductores de Salida, al igual que los de Entrada, no son específicos para un modelo de red concreto, sino que dependen del problema abordado. • Maestro: contiene los mecanismos para educar un modelo concreto de Red Neuronal. Una red puede admitir más de un Maestro, aunque difícilmente un mismo Maestro sea capaz de tratar distintos modelos de red. El Maestro trabaja con la Red Neuronal para realizar el aprendizaje, modificando los pesos y otros parámetros de cálculo en los elementos de la red. o Analizadores: En general, un Maestro necesitará hacer uso de unos Analizadores que trabajarán sobre una serie de Estadísticas que serán rellenadas a medida que avance el entrenamiento. Estos Analizadores modelan la evolución de la Red Neuronal, indicando cuándo el Maestro ha de detener el entrenamiento. o Estadísticas: Para alimentar a los analizadores de progreso del maestro, será necesario recoger estadísticas que reflejen la evolución de parámetros muy diversos de la red. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 27 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.4. Modelo Lógico del framework El modelo lógico fue construido siguiendo las pautas marcadas por el modelo conceptual: un sistema modular en el que los módulos indicados anteriormente han evolucionado hasta convertirse en clases con sus atributos, relaciones, métodos y responsabilidades: Tabla 4: Traducción del modelo conceptual Elemento Conceptual Clase OO Indicaciones Red Neuronal NeuralNetwork Clase Abstracta Traductor de Entrada InputTranslator Interfaz Sensores Sensor Clase Completa AxonSource Interfaz AxonReceiver Interfaz Traductor de Salida OutputTranslator Interfaz Maestro Teacher Clase Abstracta Neuronas En la figura Diagrama de Clases 1 se muestra la relación entre las clases que forman el modelo lógico de este framework. Se observa como las instancias de NeuralNetwork son las que concentran los módulos que forman cada red. En los siguientes apartados se describe y discute, en detalle, el diseño de cada uno de los módulos. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 28 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Clases 1: Visión simple de los módulos de NeuralNetwork Aunque aparentemente no haya conexión entre las clases abstractas Teacher y ProgressAnalyzer, la primera puede hacer uso de la segunda. Si un Teacher conoce una o más instancias de ProgressAnalyzer , no lo hará a nivel de atributo, sino dentro de su método pureThink(…). Lo habitual es que en el proceso de aprendizaje se maneje un único ProgressAnalyzer, que puede ser de tipo compuesto. Sin embargo, nada impide que un programador decida implantar un sistema con varios analizadores independientes. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 29 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.4. El sistema de paquetes com.jcortex.*. El framework se distribuye con una estructura de paquetes que se ramifican a partir de com.jcortex.*. Es en estos paquetes dónde se recoge exclusivamente las clases estándar que forman parte del framework. El usuario/programador puede en cualquier momento extender el funcionamiento del framework (de hecho debe hacerlo para que se adapte a su problema concreto), pero sus clases propias tendrán que estar fuera de la estructura com.jcortex.*. Esta norma típica busca mantener la integridad y estabilidad de las distribuciones de este framework (tratado como librería). El paquete principal, com.jcortex, está acompañado por una serie de paquetes que se pueden resumir en dos categorías que se describen en los apartados siguientes: los Paquetes del Núcleo y los Paquetes de Modelos de Red. En el Diagrama de Clases 2 se muestran los paquetes de cada uno de los grupos, así como la relación entre los mismos. Diagrama de Clases 2: Paquetes del framework y su interrelación Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 30 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5. Paquetes del núcleo Los paquetes del núcleo son los que forman la estructura básica del framework, proporcionando servicios para cualquier modelo de Red Neuronal Artificial o solución que se desee construir sobre él. Ilustración 3: Paquetes del Núcleo En la Ilustración 3 se han representado las dependencias entre los paquetes mediante flechas. Todas ella apuntan a com.jcortex ya que el resto de paquetes son meras colecciones de clases que implementan o extienden las interfaces y clases abstractas en él definidas. Las funciones y traductores recogidos en estas colecciones son las más habituales en los modelos de Redes Neuronales Artificiales. Ninguna de ellas es de uso exclusivo, sino que el usuario puede crear las suyas propias, tomando las herencias pertinentes. En la tabla siguiente se muestra el contenido de cada paquete, junto con una descripción de su función en el framework. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 31 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ com.jcortex Contiene la estructura básica del framework: interfaces, clases abstractas... • Definición del contrato de los elementos básicos: Productores y receptores de valores, Traductores, Funciones, Maestros… • Elementos invariables: Sensor, Excepciones. • Herramientas estadísticas y analizadores de progreso. • Utilidades genéricas. ActivationFunction Clase abstracta que establece el contrato para las Funciones de Activación. AxonReceiver Interfaz que establece el contrato para la función de receptor de valores, de los elementos interconectados para formar la Red Neuronal Artificial. AxonSource Interfaz que establece el contrato para la función de generador de valores, de los elementos interconectados para formar la Red Neuronal Artificial. AxonSourceEntry Clase que asocia una instancia AxonSource en un AxonReceiver, con un peso numérico. BackPropagationActivation Function Clase abstracta que establece el contrato para las Funciones de Activación utilizadas en la redes de Retropropagación. ComposedProgressAnalyzer Analizador encargado de recoger el resultado de una serie de analizadores, y ofrecer el resultado de su análisis conjunto. ConsoleUtilities Colección de herramientas para mostrar información en forma de texto. El medio principal será una interfaz por línea de comandos. DistanceFunction Clase abstracta que establece el contrato para las funciones de cálculo de distancias. InputTranslator Interfaz que establece el contrato para los traductores de entrada a la red. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 32 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ JCortexConstants Colección de constantes cuyo ámbito de uso es la totalidad de las clases desarrolladas. LoadAndStoreUtilities Colección de herramientas para almacenar y recuperar valores almacenados en forma de archivos. Messages Clase encargada de recabar los mensajes localizados en los Resource Bundles. NetworkFunction Clase abstracta que establece el contrato para las Funciones de Red. NeuralNetwork Clase abstracta que establece el contrato y la funcionalidad común para las instancias de Redes Neuronales Artificiales. Neuron Clase abstracta que establece el contrato y la funcionalidad común para las neuronas (recoge la funcionalidad de AxonSource y AxonReceiver). OutputTranslator Interfaz que establece el contrato para los traductores de salida de la red. ProgressAnalyzer Interfaz que establece el contrato para los analizadores del progreso del entrenamiento de una red. ReadingException Excepción lanzada cuando ha habido problemas cargando la configuración de un elemento de la red, desde un archivo XML. Sensor Clase que modela el comportamiento de sensor: un buffer unitario de entrada a la red. Statistics Clase encargada de la recogida de estadísticas durante el entrenamiento de una red. StatisticsEvent Evento lanzado a los métodos de StatisticsListeners. StatisticsListener Interfaz que establece el contrato de un elemento que es alertado ante cambios de estado de las estadísticas. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 33 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ StatsMeasure Clase que modela una dimensión o medida en la recogida de estadísticas StatsRegister Clase que modela cada registro de estadísticas recogido durante el proceso de aprendizaje. Incluye el valor medido y la iteración en la que se realizó la muestra. Teacher Clase abstracta que establece el contrato y la funcionalidad común para los maestros de una red neuronal. ValueDecreaseAnalyzer Analizador encargado de determinar si un valor diferencial proporcionado, decrece de forma correcta. ValueVariationAnalyzer Analizador encargado de determinar si un valor proporcionado varía lo suficiente. com.jcortex.activationFunctions Contiene las Funciones de Activación más habituales en los modelos de redes. Todas las clases implementan la interfaz ActivationFunction y algunas de ellas BackPropagationActivationFunction. GaussianFunction Implantación de la Función de Gauss. HyperbolicTangentFunction Implantación de la Función Tangente Hiperbólica (preparada para retropropagación). IdentityFunction Implantación de la Función Identidad (preparada para retropropagación). SigmoidalFunction Implantación de la Función Sigmoidal (preparada para retropropagación). SignFunction Implantación de la Función Signo. StepFunction Implantación de la Función Umbral. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 34 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ com.jcortex.distanceFunctions Contiene las Funciones de Distancia más habituales en los modelos de redes. Todas las clases implementan la interfaz DistanceFunction. EuclideanDistanceFunction Implantación de la distancia Euclídea. com.jcortex.networkFunctions Contiene las Funciones de Red más habituales en los modelos de redes. Todas las clases implementan la interfaz NetworkFunction. LinearBasisFunction Implantación de la Linear Basis Function. RadialBasisFunction Implantación de la Radial Basis Function. com.jcortex.translators Contiene los traductores más habituales. Todas las clases implementan o bien la interfaz InputTranslator o bien OutputTranslator. SingleBooleanOutputTranslator TransparentInputTranslator TransparentOutputTranslator 5.5.1. Estructura esencial de la Red Neuronal En el Diagrama de Clases 3 se desarrolla una visión de cómo se han implantado los módulos definidos para una Red Neuronal Artificial genérica en modelo conceptual y su posterior refinamiento en el modelo lógico. El elemento de mayor importancia es la clase NeuralNetwork que concentra el resto de los elementos del modelo y aporta su estructura interna y capacidad de pensamiento. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 35 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Clases 3: Descomposición de NeuralNetwork Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 36 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ a. Propagación en una Red Neuronal La propagación de un estímulo a través de una red neuronal, se modela en la clase NeuralNetwork. El método + think(inputData : Object) : Object, que recoge esta funcionalidad, está definido al nivel de la clase abstracta por lo que es común a todos los modelos de Redes Neuronales Artificiales. En realidad este método se responsabiliza únicamente de realizar la traducción de los datos de entrada y de los obtenidos como resultado de la propagación en la red. La responsabilidad de ejercer la función de propagación (" “pensamiento”) recae sobre el Template Method (GoF) + pureThink(inputData : float[]) : float. Este último método es el que es realmente capaz de realizar la propagación, partiendo de términos matemáticos propios de las Redes Neuronales Artificiales. La definición de este método forma parte del contrato de NeuralNetwork, obligando su implantación para cada modelo de red. El recorrido completo de este método se puede ver con más detalle en el Diagrama de Secuencia 1. Para más información a cerca del proceso de los traductores ver el apartado 5.5.3. Los Traductores. Diagrama de Secuencia 1: Propagación en una Red Neuronal genérica Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 37 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ b. Exportar una Red Neuronal en XML El proceso de exportar una red neuronal sigue las indicaciones metodológicas marcadas en el apartado a) Métodos para el almacenamiento de la configuración (Store). En el Diagrama de Secuencia 2 se puede ver como se produce la secuencia de mensajes entre los distintos elementos que han de volcar su información de configuración en el árbol XML de la Red Neuronal. Es obvio que una red no se puede almacenar como un único elemento por si mismo, sino que habrá que almacenar uno a uno los módulos a los que esta tiene acceso. Se incluyen de este modo las neuronas y el maestro. Diagrama de Secuencia 2: Proceso de exportación a XML genérico Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 38 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ El método + export2XMLDocument() : Document es implementado por la clase NeuralNetwork, de forma que una instancia de red neuronal puede automáticamente ser serializada en un documento XML. Lo habitual será recurrir a este método cada vez que se desee asegurar la permanencia de una red neuronal en forma de archivo. El nodo XML creado para esta instancia de la red, se descarga en el nodo raíz del documento creado, utilizando el método + neuralNetwork2(docRoot :Node, doc :Document). Como se describe en la metodología, este método almacena los datos de configuración accesibles desde el ámbito de la clase abstracta NeuralNetwork, e invoca al método + specificNeuralNetwork2(nnRoot :Node, doc :Document) de la clase concreta para volcar la información propia del modelo de red específico. Se está utilizando el patrón de diseño Template Method (GoF). Ejemplo de la estructura de un archivo de configuración generado por el framework JCortex para almacenar una Red Neuronal entrenada: <?xml version="1.0" encoding="UTF-8"?> <com.jcortex> <neuralNetwork ... > <!-- Nodos propios de la configuración de la red que no necesitan hacer referencia a las neuronas. --> ... <!-- Listado de las neuronas. --> <neuron ... > <!-- Configuración de las neuronas. --> </neuron> <!-- Nodos propios de la configutación de la red que necesitan la definición previa de las neuronas. --> ... <!-- Configuración del maestro --> <teacher ... /> </neuralNetwork> </com.jcortex> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 39 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5.2. Relación entre Sensor y Neuron AxonSource, AxonReceiver, Mediante estos tres elementos, se pretende modelar la funcionalidad de lo que se ha denominado anteriormente “elementos pensantes de la red neuronal”. Es importante señalar que no todos los módulos que participan en el proceso de propagación de un estímulo dentro de una red han de ser neuronas (en el sentido de instancias de la clase Neuron). Según los modelos de red y sus necesidades pueden aparecer otra serie de elementos como retardadores, bufferes… Para reforzar el Principio de Segregación de Interfaces, se ha dividido en dos interfaces la funcionalidad de estos elementos de red. Como metáfora de su actividad se ha recurrido al símil biológico del Axón (prolongación filiforme de la célula nerviosa, a través de la cual viaja el impulso nervioso de forma unidireccional, y que establece contacto con otra neurona). • AxonReceiver. Interfaz que cubre la funcionalidad de recibir un valor desde uno o más AxonSource’s. • AxonSource. Interfaz que cubre la funcionalidad de producir un valor destinado a ser recogido por uno o más AxonReceiver’s. Habrá clases, como la abstracta Neuron, que implemente ambas interfaces, mientras que otras como Sensor sólo necesitan un repertorio de funcionalidades en su contrato. A continuación se describen estas dos, que forman parte de las clases del núcleo: • Neuron. Clase abstracta que implementa tanto la interfaz AxonReceiver, porque recibe los estímulos de otros elementos (neuronas, sensores…), y la interfaz AxonSource ya que a su vez es fuente de valores. Además esta clase implanta un método + produceAxonValue() :float que genera los valores ofertados por la neurona a partir de los estímulos recibidos. En su contrato obliga y recoge la funcionalidad necesaria (a nivel de clase abstracta) para volcar su configuración a un nodo XML. • Sensor. Clase concreta, que hace las veces de buffer para el estímulo de entrada a la red. Implementa la interfaz AxonSource de cara al resto de elementos de la red neuronal. Este estímulo se realizará mediante un vector numérico, y cada instancia de Sensor se hará cargo de una de las posiciones de este vector. Se ha implantado como una clase completa dentro del núcleo de la aplicación ya que esta labor es común para todas Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 40 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ los modelos de Redes Neuronales Artificiales, y es improbable que tenga que sufrir alguna alteración para adaptarse a las mismas. Para permitir la máxima versatilidad del framework de cara a los distintos modelos de red que se puedan implantar, se hace referencia en la medida de lo posible a los elementos según la funcionalidad a la que estén obligados. Los sensores por ser invariantes siempre serán de clase Sensor; según se necesite una u otro repertorio de funciones se utilizará las interfaces AxonReceiver o AxonSource, y en el caso de que ambas sean necesarias de forma conjunta se recurrirá a la clase abstracta Neuron. La relación entre las cuatro clases anteriormente descritas se puede ver con claridad en el Diagrama de Clases 4. Cada modelo de red es libre de extender las clases que considere necesarias y utilizarlas en su proceso interno. Diagrama de Clases 4: Relación entre Neuron, Sensor y sus interfaces Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 41 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ a) Puntualizaciones sobre las neuronas (Neuron) La clase abstracta Neuron se encuentra disponible en el núcleo del framework JCortex para permitir su implantación, siempre que sea necesario, en los modelos de red concretos. Modela las entidades que, además de tener obligada la funcionalidad del contrato de las interfaces AxonReceiver y AxonProducer, han de reaccionar ante los estímulos del entorno. El entorno de una neurona son todas aquellas fuentes de valores a las que tenga acceso como AxonReceiver que es. En el caso concreto de las neuronas Feed-Forward (ver 5.6.4. Modelo Genérico Feed-Forward) la reacción ante los estímulos se produce invocando el método + synapse() :Collection. Las funciones de este método son: • Calcular el nuevo estado de la neurona. En principio se apoyará sobre el método + produceAxonValue() :float obligado por el contrato de la interfaz AxonSource. • Devolverá el conjunto de neuronas que son afectadas por esta neurona. Esto es, que están conectadas a esta neurona corriente abajo. Si la neurona no cambia de estado ante el nuevo cálculo realizado, ninguna neurona se verá afectada, de forma que la colección estará vacía (o será null para no tener que crear una instancia vacía). Se ha comprobado que el uso de un método que es invocado cuando se considere necesario logra un rendimiento mucho mayor que el uso de un patrón Observer (GoF) en el que la Neurona fuera reaccionando ante los estímulos de sus fuentes AxonProducer. Si bien este último caso se asemeja mucho más al original biológico, provoca una explosión exponencial de llamadas. Este hecho se puede apreciar con mayor calidad en el caso de las redes Feed-Forward (ver: 5.6.4. Modelo Genérico Feed-Forward ). b) Sensores y neuronas desde el punto de vista de NeuralNetwork Cada red neuronal tiene la obligación de conocer todos los elementos que la conforman, esto incluye el almacenamiento de sus neuronas (Neuron) y sensores (Sensor). La primera distinción que se realiza entre los elementos de ambos tipos es su almacenamiento con estructuras de datos diferentes dentro de las instancias de la clase NeuralNetwork. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 42 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ • Las neuronas (instancias de alguna subclase de Neuron) se almacenan en una estructura java.util.ArrayList, accesible como java.util.List. Esta es la mejor opción ya que se prima la facilidad de añadir nuevos elementos de forma rápida, recurriendo en muy pocas ocasiones a un acceso directo por índice. Para asegurar su correcto entrenamiento en entornos de concurrencia, se ha optado por recurrir a una envoltura de sincronización creando la lista con el código this.neurons = Collections.synchronizedList(new ArrayList(neuronCount));. • Los sensores (instancias de la clase Sensor) se almacenan en un array de tipo Sensor[]. Es la estructura más simple y que ofrece la accesibilidad más rápida a través de un índice. No es necesario permitir el crecimiento de esta estructura ya que una vez se ha definido el número de entradas en la creación de la red, no tiene sentido que varíe. Ambos elementos exigen la asignación de un identificador numérico que pueda ser accedido a través del método + getId() : int definido tanto en el contrato de AxonSource como en el de AxonReceiver. Otra distinción entre sensores y neuronas es el rango de estos identificadores: • Las neuronas (instancias de alguna subclase de Neuron), reciben identificadores numéricos enteros en el rango [0, +inf], en orden creciente. No ha de haber huecos vacíos en la asignación de identificadores. Su identificador puede ser utilizado para acceder directamente a ellas utilizándolo como índice para contra la estructura de datos List. • Los sensores (instancias de la clase Sensor), reciben identificadores numéricos enteros en el rango [-inf, 0), en orden decreciente. No ha de haber huecos vacíos en la asignación de identificadores. Si el identificador no puede ser utilizado de forma directa como índice para acceder a la matriz de sensores descrita previamente, es necesario realizar la siguiente transformación: índice = "identificador "1 Ídentificador -1 -2 -3 … -n ! Índice 0 1 2 … n-1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 43 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5.3. Los Traductores Los traductores son los encargados de conectar el algoritmo matemático que forma la Red Neuronal Artificial, con el mundo real de la aplicación desarrollada por el programador. Los traductores son el único módulo de todo el framework que depende únicamente de la naturaleza del problema y el tipo de objetos que entren en juego en él. En ningún caso variarán según el modelo de red elegido para afrontar el problema. Hay dos tipos de traductores, para cada uno de los cuales se ha definido una interfaz, como se muestra en el Diagrama de Clases 5. Diagrama de Clases 5: Traductores A continuación se describen los dos tipos de traductores en detalle: • Los traductores de entrada implementan la clase InputTranslator. El único método de su contrato es el responsable de traducir una instancia de la clase Object en un vector de números enteros, que es con lo que puede trabajar un algoritmo matemático como son las Redes Neuronales Artificiales. La instancia de Object recibida puede ser un objeto o conjunto de objetos de una clase que tiene sentido dentro del ámbito del problema a resolver. (Si la aplicación versa sobre coches, será necesario traducir los atributos de un coche determinado en un vector de números reales). La traducción lleva implícita un proceso de normalización de los valores numéricos recibidos. Los pasos a seguir son los siguientes: i) Realizar un downcasting sobre la instancia de Object recibida para poder tratarlo según el ámbito del problema. ii) Descomponer la instancia o instancias concretas en los atributos representativos para el problema. Es importante tener en cuenta que cuantos más atributos se utilicen más compleja y pesada será la Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 44 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ red y más tiempo requerirán los procesos de pensamiento y entrenamiento. iii) Traducir y/o normalizar los atributos recogidos en valores numéricos reales. Se recomienda que los de valores finales estén dentro del rango [0,1] ó [-1,1] dependiendo del modelo de red. iv) Repartir los atributos traducidos en un vector de números reales que será el que finalmente reciba la Red Neuronal. • Los traductores de entrada implementan la clase OutputTranslator. Estos traductores incluyen dos métodos en su contrato que se encargan de realizar cada uno la transformación complementaria al otro. El método +getOutputTranslation(:float) : Object construye una instancia de la clase que deseamos como salida, a partir del vector de números reales obtenidos. Así como en la traducción de entrada es conveniente prescindir de todos los atributos que no sean relevantes, aquí es necesario contar con toda la información necesaria para construir completamente la instancia. Puede que parte de los atributos de la nueva clase puedan ser calculados, deducidos o solicitados al usuario, pero lo habitual es que la información numérica recibida sea suficiente para llevar a cabo la traducción. El método + getOutputBackTranslation(:Object) : float[] es requerido por los maestros, abordan el entrenamiento como un aprendizaje supervisado. Aunque no es necesario con otros tipos de maestro, siempre es recomendable desarrollarlo con vistas a su utilización con otros modelos de Red Neuronal Artificial. La labor de este método es similar a la del InputTranslator, pero con la restricción añadida de que ha de casar con los resultados obtenidos con la traducción de salida. Es imprescindible que este método realice la operación inversa del anterior de la forma más precisa posible y lo más ajustado que pueda, ya que de esta traducción dependerá la labor del maestro que entrene la red. Lo ideal sería que: " = getOutputBackTranslation(getOutputTranslation(" )) . !Se ha decidido separar como entidades diferenciadas ambos traductores ya que, por norma general, las entidades que entran a una red neuronal son de distinto tipo que los resultados esperados. En el caso de que la entrada coincidiera con la salida, se recomienda construir una clase conjunta Traductor que implemente ambas interfaces y aproveche código en la medida de lo posible. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 45 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Traductores de entrada incluidos (implementan InputTranslator): TransparentInputTranslator Recoge un array de números enteros (float[]) como instancia de Object, y simplemente realiza un casting a float[]. Éste es el traductor de entrada por defecto para el framework. Traductores de salida incluidos (implementan OutputTranslator): SingleBooleanOutputTranslator Inspecciona el primer número (índice 0) del array de reales recibido (float[]); el resultado será una instancia de Boolean que arropa el valor true si el número es mayor que 0, false en caso contrario. Realiza la traducción inversa con los valores 1 y -1. TransparentOutputTranslator Realiza un upcasting sobre el array de números enteros recibidos (float[]) para tratarlo como una instancia de Object. También realiza la conversión inversa. Éste es el traductor de salida por defecto para el framework. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 46 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5.4. Las Funciones Existe multitud de posibles funciones dentro del modelo matemático de las Redes Neuronales Artificiales. Las instancias de las clases de tipo función no almacenan datos, como se podría suponer de sus parámetros, entradas o resultados. Estas clases son puramente funcionales y no son susceptibles de cambiar de estado. La idea detrás de esta decisión es que se pueda compartir una misma instancia entre varios elementos sin incurrir en problemas de concurrencia, aunque hilos de ejecución paralelos invoquen el método para obtener la solución al mismo tiempo. Las interfaces que definen el contrato de los distintos tipos de función, se localizan en el paquete central com.jcortex, y son las mostradas en la figura Diagrama de Clases 6. Cada realización concreta – incluida en el framework – de estas clases se almacenan, según su tipo, en los paquetes del núcleo descritos. Diagrama de Clases 6: Interfaces de función Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 47 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ a) Funciones de Activación Las funciones de activación son las encargadas, en ciertos modelos de red, de decidir el estado de una neurona de forma matemática. Las funciones de este tipo han de heredar de com.jcortex.ActivationFunction que define dos métodos: la interfaz • + getDefaultParameterSet () : float[] – Obtiene el conjunto de parámetros por defecto para la Función de Activación. De forma general se pueden considerar como genéricos aquellos que no modifican el valor final producido por la red. • + getNumberOfActivationParameters() : int – Obtiene el número de parámetros con los que trabaja la función. No se ha representado de forma estática ya que se invoca conociendo una instancia de esta función y no la clase de la que proviene. • + getSolution(networkResult : float, activationParams : float[]) :_float – Método principal que obtiene el resultado de la función de activación para un valor de red y un conjunto de parámetros. Las funciones han de exigir que el vector de parámetros tenga al menos en número de elementos obtenidos desde el método anterior. Sin embargo han admitir que la lista de parámetros tenga un tamaño superior al valor numérico requerido (aunque sea ignorando los que no sean necesarios). Funciones incluidas en el framework y recogidas en el paquete com.jcortex.activationFunctions: Función Gaussiana GaussianFunction ( ) f a,b (x) = a " e # xb 2 ! Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 48 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Función Identidad IdentityFunction f a (x) = a "x f a (x) = a #1 ! Función Sigmoidal SigmoidalFunction f a (x) = 1 1+ e"a# x ! Función Signo SignFunction $x > 0 " 1 & f (x) = % x = 0 " 0 & x < 0 " #1 ' ! Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 49 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Función Tangente Hiperbólica HyperbolicTangentFunction 1" e"x f (x) = 1+ e"x ! Función Umbral StepFunction $x " a # 1 f a (x) = % &x < a # 0 ! b) Funciones de Activación para Back-Propagation Las funciones de activación para Back-Propagation son, como su propio nombre indica, una especialización de las Funciones de Activación descritas en el apartado anterior. Estas funciones poseen los mecanismos para determinar, en ciertos modelos de red, el estado de una neurona de forma matemática. Sobre esta base, se añaden funcionalidades adicionales necesarias en el proceso de aprendizaje por BackPropagation. Las funciones de Activación para Back-Propagation han de heredar de la interfaz com.jcortex.BackPropagationActivationFunction. Además de los métodos propios de las Funciones de Activación descritos anteriormente, se define un método nuevo: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 50 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ • + getDerivateSolution(neuron : com.jcortex.backPropagation.BackPropagationNeuron ) : float – Obtiene el resultado de sustituir el valor final, dentro de la derivada de la función representada por la clase. Al ser posible simplificar estos cálculos con productos ya almacenados en la neurona, ésta se utiliza como parámetro de entrada de la función. Al ser también funciones de activación comunes, las funciones de Activación para Back-Propagation incluidas en el framework están recogidas también en el paquete com.jcortex.activationFunctions: Función Sigmoidal f 'a (y i,n ) = a " y i,n " (1# y i,n ) SigmoidalFunction Función Tangente Hiperbólica ! HyperbolicTangentFunction f 'a (x) = 2 " f a (x) " [1# f a (x)] ! c) Funciones de Distancia Las funciones de distancia cuantifican a través de distintas métricas – dependiendo de cada implantación concreta – la diferencia entre dos vectores de números reales. Las funciones de este tipo han de heredar com.jcortex.DistanceFunction que define el método: • de la interfaz + getDistance(entries : AxonSource[], weights : float[]) : float – Método principal que cuantifica la diferencia (“distancia”) entre dos vectores de números reales. Este método lanzará una excepción cuando tenga que comparar vectores de distinto tamaño. Funciones incluidas en el framework y recogidas en el paquete com.jcortex.distanceFunctions: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 51 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Distancia Euclídea EuclideanDistanceFunction D(a,b) = # (a " b) 2 ! d) Funciones de Red Las funciones de red recogen el valor de cada una de las entradas de un elemento pensante (neurona) y las pondera para obtener un valor que represente el conjunto de todas las entradas. Las funciones de este tipo han de heredar com.jcortex.NetworkFunction que define el método: • de la interfaz + getSolution(axonSourceEntries : Collection) : float – Método principal que obtiene la valoración conjunta de las entradas. Las entradas se suministran como una colección de instancias de la clase AxonSourceEntry (una para cada entrada). Funciones incluidas en el framework y recogidas en el paquete com.jcortex.networkFunctions: Linear Basis Function LinearBasisFunction Radial Basis Function ! LinearBasisFunction t n = # (y i " w ij ) tn = #[ ( y i " wij ) 2 ] ! Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 52 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5.6. El Maestro (Teacher) a) La clase abstracta Teacher Las instancias de la clase Teacher, son las encargadas llevar a cabo el entrenamiento de las redes neuronales artificiales construidas con el framework JCortex. Cada modelo de red ha de tener al menos una implantación de la clase Teacher capaz de entrenarlo. La clase abstracta Teacher implanta los métodos genéricos necesarios para todos los tipos de Maestro, a la vez que define el contrato de obligatorio cumplimiento para todas ellas. Para cada algoritmo de aprendizaje se creará una clase distinta que extienda Teacher que ha de implantar los siguientes métodos: • + educateNetwork(nn :NeuralNetwork, exampleIObjects :Object[], exampleDObjects :Object[])!: Statistics . Método encargado de llevar a cabo el entrenamiento de la red neuronal. Aunque en principio, por su contrato, acepte cualquier instancia de NeuralNetwork, típicamente sólo podrá ser aplicado a un modelo de red concreto. En caso de error ha de lanzar una excepción del tipo IllegalArgumentException. • + createStatsSchema() :Statistics . Crea la instancia de Statistics a ser utilizada por este maestro. En este método se definen las medidas estadísticas que van a ser recogidas durante el proceso de entrenamiento. Actúa como Template Method (GoF) para el método getStats() de esta clase abstracta. Típicamente, su implantación tendrá el siguiente aspecto, en el cual se proporciona un array de cadenas de texto con los nombres de las medidas estadísticas y el número máximo de iteraciones a previstas (no tiene que ser necesariamente el exacto): public Statistics createStatsSchema() { return new Statistics(new String[]{“Medida1”, …}, maxIteraciones); } • # specificTeacher2xml(teacherRoot :Element, document :Document) . Este método actúa como Template Method (GoF) en el proceso de exportar la configuración de la instancia de Teacher a un documento XML. (Ver: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 53 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.2.3. Metodología de trabajo con XML) • + stopTraining() . Método invocado cuando se desea detener el proceso de entrenamiento de una Red Neuronal Artificial. Siempre y cuando esto sea posible por la naturaleza del algoritmo de aprendizaje, dejando el sistema en situación estable. En los métodos iterativos es habitual incluir una variable booleana que actúe como flag en el bloque condicional del bucle. De esta manera detener el entrenamiento es tan simple como cambiar el valor de este flag. Este método está pensado para entornos de multiproceso (o multiproceso por hilos). • + toHTMLString() :String . Este método ha de mostrar la configuración de la instancia de Teacher, en forma de texto con tags de HTML para definir su estilo. • + getAnalyzer() :ProgressAnalyzer . Método a través del cual se obtendrá el analizador de mayor nivel utilizado para el entrenamiento. Para más información ver 5.5.7. Recogida y análisis de Estadísticas. La clase abstracta Teacher implanta a su vez una serie de métodos comunes para cualquiera de sus subclases. • + synchronized getStats() : Statistics. Método encargado de proporcionar al instancia de la clase Statistics en la que se almacenan las estadísticas de un entrenamiento. Esta instancia será creada en el caso de que no exista con anterioridad1. Este método que actúa de una forma similar al patrón de diseño Singleton (GoF), si bien sólo de cara a una instancia concreta de la clase Teacher. Utiliza a modo de Template Method (GoF) el método createStatsSchema() de implantación obligatoria en cada uno de los maestros concretos. • + static translateAndClassifyExamples(…). Este método estático se explica en detalle en este apartado, en el subapartado d) Reparto de los conjuntos de ejemplos. 1 El funcionamiento del método getStats() es una de las escasas concesiones que se ha proporcionado en el framework JCortex para su uso en el entorno de desarrollo JCortexBuilder. En él es necesario disponer de las estadísticas a ser utilizadas antes de que se inicie el proceso de entrenamiento. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 54 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Se recomienda que todas las instancias de la clase Teacher se comporten como beans (métodos getter y setter obligatorios) con todos sus parámetros de aprendizaje. De esta forma se muestra con claridad cuáles son los atributos que han de ser establecidos por el usuario y cuáles son auxiliares para el algoritmo de aprendizaje. b) Método educateNetwork() Genérico En el Diagrama de Actividad 3: Método educateNetwork() genérico se muestran los pasos a dar antes y después de lanzar el algoritmo de entrenamiento matemático. Se señalan también los objetos principales que participan en un proceso de entrenamiento genérico, y su relación con las actividades detalladas. Diagrama de Actividad 3: Método educateNetwork() genérico Cabe destacar el papel que toman las estadísticas (Statistics) y sus analizadores (ProgressAnalyzer) en el proceso de entrenamiento. En primer Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 55 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ lugar, estos elementos tendrán que ser creados e inicializados para que después el algoritmo matemático actualice en su progreso las estadísticas. Las estadísticas son analizadas con el fin de determinar en qué momento ha de detenerse el proceso de entrenamiento. La relación entre el objeto de la clase Statistics y el de la clase ProgressAnalyzer no se ha representado en el diagrama anterior. c) Método educateNetwork() Iterativo La mayor parte de los algoritmos de aprendizaje para Redes Neuronales Artificiales se basan en la realización de sucesivas iteraciones sobre un conjunto de ejemplos de entrenamiento. Es en el transcurso de estas iteraciones cuando la red evoluciona y su bondad se representa mediante los estadísticos indicados en el apartado anterior. En el Diagrama de Actividad 4: Método educateNetwork() iterativo, se muestran los pasos que ha de recorrer cualquier método de aprendizaje que funcione a base de iteraciones. Ésta figura parte del Diagrama de Actividad 3: Método educateNetwork() genérico, mostrando en detalle el desarrollo de la actividad con el estereotipo “<<algoritmo particular>>”. En primer lugar se pueden distinguir el bucle para las iteraciones, que cubre gran parte del diagrama. Dentro de este se puede aislar dos fases: • La primera fase, la de entrenamiento, incluye el aprendizaje propiamente dicho. En ella se recorren todos los ejemplos recogidos dentro del conjunto de entrenamiento. Estos ejemplos son utilizados por cada algoritmo particular para variar los pesos por la red, una vez que se ha propagado el estímulo a través de la misma. • La segunda fase, la de validación, no es necesario que se ejecute para cada una de las iteraciones de entrenamiento. Por motivos de rendimiento es recomendable saltarse dos o más iteraciones de entrenamiento entre dos pruebas de validación consecutivas. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 56 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Actividad 4: Método educateNetwork() iterativo Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 57 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ d) Reparto de los conjuntos de ejemplos En la gran mayoría de los entrenamientos, es conveniente que el conjunto total de ejemplos se divida en dos partes: • El conjunto de ejemplos de entrenamiento (training), utilizados para alimentar a la red durante el proceso de aprendizaje y de los cuales extraerá el conocimiento. • El conjunto de ejemplo de validación (validation), utilizados para comprobar que la red evoluciona de forma correcta, generalizando el conocimiento adquirido y no incurriendo en el problema clásico del sobreaprendizaje2. El reparto entre un conjunto y otro es una tarea común para un gran número de Maestros. Esta acción se proporciona a través de un método estático implantado en la clase Teacher, + static translateAndClassifyExamples(…) :void. Sus parámetros se describen a continuación en orden: • exampleIObjects :Object[] – Array con la lista de objetos que representan las entradas de los ejemplos suministrados para el aprendizaje. Estos objetos tendrán que ser traducidos a una representación numérica con el InputTranslator de la red neuronal. Cada una de estas entradas ha de tener su salida correspondiente, en su misma posición, en la lista exampleDObjects. • exampleDObjects :Object[] – Array con la lista de objetos que representan las salidas deseadas de los ejemplos suministrados para el aprendizaje. Estos objetos tendrán que ser traducidos a una representación numérica con el OutputTranslator de la red neuronal. Cada una de estas salidas ha de tener su entrada correspondiente, en su misma posición, en la lista exampleIObjects. • inputTranslator :InputTranslator – Las entradas de los ejemplos proporcionados para el aprendizaje tienen la forma de objetos con sentido para el ámbito del problema. Estos objetos han de ser traducidos, mediante un InputTranslator, a un formato numérico 2 El sobreaprendizaje se produce cuando la red ha aprendido bien los ejemplos del conjunto de entrenamiento pero es incapaz de generalizar o responder adecuadamente a los ejemplos que no pertenezcan al conjunto empleado para entrenarla. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 58 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ que pueda ser tratado por los algoritmos matemáticos de las redes neuronales artificiales. • outputTranslator :OutputTranslator – Las salidas de los ejemplos proporcionados para el aprendizaje tienen la forma de objetos con sentido para el ámbito del problema. Estos objetos han de ser traducidos, mediante un OutputTranslator, a un formato numérico que pueda ser tratado por los algoritmos matemáticos de las redes neuronales artificiales. • trainingI :float[][] – Array en el que se devolverá la lista con las entradas del conjunto de ejemplos, para el entrenamiento de la red. Cada float[i] representa un array de números reales con los valores de la entrada de un ejemplo. • trainingD :float[][] – Array en el que se devolverá la lista con las salidas deseadas del conjunto de ejemplos, para el entrenamiento de la red. Cada float[i] representa un array de números reales con los valores de la salida deseada para un ejemplo. • validationI :float[][] – Array en el que se devolverá la lista con las entradas del conjunto de ejemplos, para la validación del entrenamiento de la red. Cada float[i] representa un array de números reales con los valores de la entrada de un ejemplo. • validationD :float[][] – Array en el que se devolverá la lista con las salidas deseadas del conjunto de ejemplos, para la validación del entrenamiento de la red. Cada float[i] representa un array de números reales con los valores de la salida deseada para un ejemplo. • validationPercent :float – Valor real entre [0,1] que indica la proporción de elementos que formará cada uno de los conjuntos. También se emplea como indicador de la probabilidad en el reparto aleatorio de los ejemplos entre ambos conjuntos. En el caso del número de elemento de cada conjunto, el cálculo se realiza de acuerdo con la fórmula siguiente: ejemplosValidación = #totalEjemplos " validationPercent$ ejemplosEntrenamiento = totalEjemplos % ejemplosValidación ! Antes de realizar la invocación del método descrito, se recomienda el uso del código descrito a continuación para crear los arrays que contendrán los conjuntos de ejemplos: // Obtains the number of examples devoted to each list int validationCount = (int) (exampleIObjects.length * validationPercent); Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 59 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ int trainingCount = exampleIObjects.length - validationCount; // The example and validation arrays float[][] trainingI = new float[trainingCount][];// Training inputs float[][] trainingD = new float[trainingCount][];// Training desired outputs float[][] validationI = new float[validationCount][]; // Validation inputs! float[][] validationD = new float[validationCount][]; // Validation outputs // Translates and classifies the examples between training and validation Teacher.translateAndClassifyExamples(exampleIObjects, exampleDObjects,! inputTranslator, outputTranslator, trainingI, trainingD, validationI, validationD, validationPercent); En el Diagrama de Actividad 5: Algoritmo de reparto pseudo-aleatorio de los ejemplos, se muestra como se lleva a cabo el proceso de separación de los ejemplos proporcionados en los dos conjuntos descritos anteriormente. Es enormemente arriesgado presuponer que los ejemplos proporcionados estén de por si repartidos de manera uniforme. Lo normal es que los conjuntos de ejemplo sean proporcionados de acuerdo con una ordenación previa. Para evitar esto, todo el proceso de reparto se realiza ejemplo a ejemplo, de forma aleatoria. Ha de respetarse la correspondencia entre la entrada y salida del mismo ejemplo. El reparto, en primera instancia, distribuye los elementos en ambos conjuntos de acuerdo con la proporción indicada a través del validationPercent. Si un ejemplo es asignado a una lista llena, se decidirá de forma aleatoria si el nuevo ejemplo se añade directamente al otro conjunto, o sustituye a un ejemplo ya presente, trasfiriéndolo a la otra lista. De esta manera se procura asegurar la mayor dispersión posible de todos los ejemplos del conjunto proporcionado, con independencia de que se encuentren estos al principio o al final. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 60 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Actividad 5: Algoritmo de reparto pseudo-aleatorio de los ejemplos Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 61 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5.7. Recogida y análisis de Estadísticas El análisis de las estadísticas de progreso recogidas a lo largo del entrenamiento es imprescindible para el sistema de decisión que detenga el aprendizaje de una red antes de incurrir en un sobreaprendizaje. Éste es uno de los apartados más complejos del framework, por lo que se ha recurrido al uso de Patrones de Diseño OO – en concreto a Composite y Observer. El Diagrama de Clases 7 ofrece una visión general de todas las clases que forman este sistema, así como de su interrelación. Diagrama de Clases 7: Sistema de Estadísticas Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 62 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ a) El Modelo de Datos de las Estadísticas Las estadísticas han de cumplir los requisitos de modularidad exigido para que pueda ser aplicado a cualquier maestro de cualquier modelo de Red Neuronal Artificial. El modelo de datos de las estadísticas se ha diseñado con tres tipos de datos principales cuya composición se muestra en el Diagrama de Datos 1. • Statistics. Elemento central de almacenamiento. La recomendación es crear una instancia para cada uno de los entrenamientos, si bien no hay limitaciones técnicas que restrinjan el uso de más de una colección de estadísticas para un entrenamiento. • StatsMeasure. Modela las medidas o dimensiones para las cuales se recopilan los datos estadísticos. Cada medida se identifica con un String que sirve a la vez de breve descripción. Este nombre ha de ser único para cada instancia de esta clase dentro de la instancia de StatsMeasure. Cada instancia de esta clase mantiene sus propias estadísticas sobre los registros que almacenan. Se incluye el valor máximo almacenado, el valor mínimo y el valor medio. El cálculo de estos valores es inmediato ya que se va realizando a medida que se van añadiendo las instancias de StatsRegister. • StatsRegister. Modela los registros concretos que contienen cada valor estadístico. Cada vez que se desee almacenar un valor en la colección de estadísticas se creará una instancia de StatsRegister que refleja tanto el valor medido como la iteración en la que se ha registrado. Lo normal es contar con una única instancia de la clase Statistics, tantas intancias de la clase StatsMeasure como medidas de progreso se desee estudiar, y una instancia de StatsRegister – en principio – para cada una de las muestras registradas. A continuación se describen las estructuras utilizadas en cada nivel de agrupación: • La colección de instancias StatsMeasure que posee una instancia de Statistics se modela mediante un HashMap y es accedido a través de su la interfaz Map, ambos recogidos en el paquete java.util. Un mapa parece la estructura más lógica, teniendo en cuenta que cada dimensión (instancia de StatsMeasure) se identifica por un String descriptivo. Esta estructura de datos está preparada para trabajar en entornos de concurrencia ya que se crea como measures = Collections.synchronizedMap(new HashMap(…)); Si bien esta medida puede suponer una ralentización del acceso, será esencial para preservar la correcta organización de los accesos. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 63 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ • Los registros recogidos en forma de instancias de StatsRegister se almacenan en la instancia de StatsMeasure para la que han sido muestreados dentro de una estructura LinkedList, que es ofrecida a través de su interfaz List. Esta clase, recogida en el paquete java.util. Se eligió esta realización de la interfaz List en concreto para aprovechar las propiedades de una lista doblemente enlazada: que pueda crecer fácilmente y sin estar condicionada por un espacio. No se ha considerado necesario convertir esta estructura en thread-safe, ya que sólo será accedida para lectura por un único hilo cada vez. Multitud de hilos con operaciones de lectura pueden concurrir de forma simultánea sin problemas. Al tratarse de datos estadísticos, no hay inconvenientes en que las lecturas sean “sucias”, en el caso en que coincidiera una lectura con una escritura concurrente. Es más, interesa que el proceso sea lo más rápido posible, y asegurar la concurrencia es una tara muy costosa. El acceso a esta lista se suele llevar a cabo de forma secuencial y no directamente a un valor determinado. Es necesario puntualizar que StatsMeasure se encarga de mantener la referencia al último registro que ha recibido. Diagrama de Datos 1: Relación entre los tipos de objetos estadísticos Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 64 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ b) Recogida de datos estadísticos El proceso de recogida de datos estadísticos dependerá de la naturaleza del modelo de red neuronal y el funcionamiento de cada algoritmo de aprendizaje en concreto. Una muestra de los puntos de recogida de datos estadísticos puede verse en el Diagrama de Actividad 4: Método educateNetwork() iterativo. Como se ha descrito anteriormente, es necesario definir para cada proceso de entrenamiento una serie de Medidas o Dimensiones que se materializarán como instancias de StatsMeasure recogidas en una instancia de Statistics. Estas medidas se han de definir a través del método obligado por el contrato de la clase Teacher para sus subclases: createStatsSchema() (ver: 5.5.6. El Maestro (Teacher) > a) La clase abstracta Teacher). Por lógica, los valores estadísticos se recogerán al finalizar una iteración o un análisis completo, como ocurre en el caso de las pruebas de validación. Si bien las instancias de StatsMeasure dependen en exclusiva de la naturaleza de la red y el funcionamiento del algoritmo de aprendizaje, se puede señalar las más habituales: • Variación de los pesos de los elementos de la red. • Error de Entrenamiento (Cuadrático Medio). • Error de Validación (Cuadrático Medio). El almacenamiento de las muestras dentro del repositorio de estadísticas, se ha encapsulado a nivel de instancia de la clase Statistics. De esta forma el Maestro sólo tendrá que tratar un único objeto. En la interfaz de esta instancia se recoge el método addRegister(measure :String, iteration :long, value :float) que se encarga de todo el proceso de crear la instancia de StatsRegister de la muestra con valor value tomada en la iteración iteration; y almacenarla en la dimensión estadística measure. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 65 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ c) Las Estadísticas y sus Analizadores Ya se ha indicado que cada proceso de entrenamiento mantendrá su propio sistema de estadísticas, materializado en una instancia de la clase Statistics. Sin embargo, es imprescindible resaltar que estos valores estadísticos recogidos tienen de por si una utilidad clara: detener el entrenamiento cuando la red haya aprendido lo suficiente y sin haber incurrido aún en un sobreaprendizaje que degrade su capacidad de generalización. Los valores en bruto, recogidos para las distintas dimensiones estadísticas, no proporcionan ninguna pista a cerca del avance del entrenamiento. Es necesario realizar un análisis sobre los registros recogidos para dar pie a una decisión. En conclusión: a cada instancia de StatsMeasure que se desee observar se asociará al menos un Analizador de Progreso. Será a estos analizadores a los que se les pedirá un veredicto a cerca de la calidad del entrenamiento, y si este debe o no continuar. d) Estructura de los Analizadores de Estadísticas El sistema de analizadores se ha articulado en torno al patrón de diseño Composite (GoF). De esta forma es posible crear una estructura arbórea tan compleja como se desee con el fin de organizar y agrupar los distintos analizadores particulares. La superclase principal es ProgressAnalyzer, que define el contrato que ha de cumplir cada uno de los analizadores. El método más importante en un analizador es + isProgressGoodEnough() :boolean, con el que se solicita el veredicto al analizador. En el Diagrama de Clases 8: Analizadores de Progreso, se puede observar la estructura que garantiza esta funcionalidad. Diagrama de Clases 8: Analizadores de Progreso Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 66 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Se recomienda aprovechar la capacidad de agrupamiento de los analizadores para que el Maestro sólo tenga que manejar una única instancia de analizador. En la mayor parte de los casos más de un parámetro tendrá que ser estudiado, por lo que será un ComposedProgressAnalyzer el analizador al que el Maestro pida su veredicto. Se ha considerado que proporcionar esta versatilidad en la organización de los analizadores será imprescindible para futuros desarrollos de Maestros. Pudiera darse el caso de que un Maestro realizara varios entrenamientos en paralelo, cuyos resultados se cruzaran periódicamente. En el modelo no sólo sería importante conocer el veredicto conjunto del analizador, sino además el veredicto compuesto para cada uno de los aprendizajes. Con una estructura arbórea es muy sencillo analizar el progreso a distinto nivel y con distinta granularidad. e) Analizador ValueDecreaseAnalyzer Analiza si un valor estadístico decrece de forma adecuada. Actualmente su implantación dista mucho de ser la más inteligente, en el sentido de ser la que mejor calidad de veredicto ofrece. Se podría incluso indicar que peca de prudente, deteniendo el entrenamiento a la más mínima indicación de crecida del valor de los errores. En el primer análisis que se llevó a cabo de este problema, se planteó el muestreo de tres puntos, dentro de una franja dimensionada según el parámetro studyWindowSize (atributo de esta clase). El punto n se toma en la última instancia registrada, o en el extremo contrario de la ventana, y m el punto medio entre ambos. Estudiando los posibles valores de estos tres puntos y su proyección sobre los datos de evolución, se dibujaron las gráficas siguientes. En este análisis se favorecen las evoluciones de pendiente descendiente. Sólo se permiten repechos de subida, como paso anterior a otra bajada. En ellas se presenta la evolución de un valor de error en línea gris continua, discontinua cuando es un valor futuro que aún no ha tenido lugar, y los puntos descritos anteriormente con sus proyecciones sobre las curvas. Sobre estas gráficas se decidió en qué casos se debía recomendar finalizar el entrenamiento, y en qué casos este debía continuar. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 67 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Utilizando los valores descritos por las gráficas, se diseñó el siguiente conjuto de pruebas matemáticas para determinar si un entrenamiento evoluciona de forma correcta (good). El parámetro ! (en el código OVERFLOW_GIFT_GRACE), proporciona un cierto margen de regalo para que sea más fácil cumplir con las exigencias del analizador: om " {ao # ( am $ % )} nm " {am > ( an $ % )} on " {ao # ( an $ % )} ( ) ( ) good = nm & om ' on & om ' (on & nm) Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 ! 68 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ En análisis posteriores se demostró como la eficacia del sistema anterior no era demasiado grande. Gracias a la tabla de verdad mostrada a continuación se puede ver claramente como las pruebas mostradas anteriormente equivalen a comprobar si la proyección de m es mayor o menor que n. (Para ello se considera como caso afirmativo el suceso imposible marcado con *). a[o] < a[m] a[o] >= a[m] a[m] < a[n] a[m] >= a[n] a[m] < a[n] a[m] >= a[n] a[o] < a[n] a[o] >= a[n] Imposible * Imposible Una propuesta para futuras versiones consiste en lograr un conjunto de datos de entrenamiento y de ejemplos suficientemente grande como para poder entrenar una red neuronal Perceptrón Multicapa. Esta red podría rápidamente muestrear los registros estadísticos recogidos, para ofrecer una medida de confianza sobre el progreso de la red. El usuario podría calibrar esta certeza sobre la evolución de la red de acuerdo con sus necesidades o según el rendimiento de los aprendizajes. f) Analizador ValueVariationAnalyzer El ValueVariationAnalyzer ofrece su veredicto a cerca de la variación de los valores de una medida estadística. Esta medida es, por regla general, la diferencia entre el valor de un parámetro entrenado y el mismo en una iteración anterior. En este análisis se priman los valores altos, considerándose que si las variaciones de valores de los parámetros se mantiene baja durante demasiadas iteraciones es que la red ha alcanzado un estado estable. Para el funcionamiento de este analizador se definen dos parámetros: • constantVariation: número real que indica el valor de la variación por debajo del cual se considera que los parámetros de una red no están Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 69 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ cambiando. Gracias a este parámetro, no es necesario esperar a que una red alcance la variación 0 para considerar que no está evolucionando. • constantWindow: número entero que indica el tamaño de la meseta (plateau) que se ha de mantener antes de que se considere que la red definitivamente no evoluciona lo suficiente. El progreso se considerará adecuado siempre que el valor de variación registrado para la última iteración esté por encima del límite inferior marcado por constantVariation; y si está por debajo, que lleve en esta situación un número de iteraciones menor a las indicadas por constantWindow. El entrenamiento se detendrá cuando el valor de variación registrado se halle por debajo del límite inferior durante un periodo de iteraciones (plateau) menor que constantWindow. g) Analizador ComposedProgressAnalyzer El analizador ComposedProgressAnalyzer recoge el resultado de otros analizadores y proporciona una decisión de compromiso entre todos ellos. El sistema de decisión se basa en que, cada vez que se requiere la opinión de este analizador con el método + isProgressGoodEnough() :boolean, éste pedirá la opinión a los analizadores que lo componen invocando este mismo método Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 70 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ sobre ellos. Si alguno de los analizadores proporciona una respuesta negativa, el ComposedProgressAnalyzer recomendará que se detenga el entrenamiento. h) Información sobre la parada Todos los analizadores han de ser a su vez capaces de informar al usuario de la razón por la que han votado para detener el entrenamiento (o porqué no la han tomado). De esta forma al finalizar un proceso de entrenamiento se puede obtener un mensaje como el que se muestra a continuación (localizado en Español). Con esta información se puede valorar el proceso de aprendizaje a fondo. Este informe sobre la actividad se obtiene a través del método + getReasonToStop() :String, obligado por el contrato de la interfaz ProgressAnalyzer. Razones de parada de los analizadores aglutinados: { ....Error de Entrenamiento (Cuadrático Medio) no ha encontrado razones hasta ahora para detener el entrenamiento. ....Detenido porque Error de Validación (Cuadrático Medio) no decrecía suficientemente bien. a[o] = 0.5487105; a[m] = 0.5487105; a[n] = 0.6852519 ....Variación de Pesos (Media Abs.) no ha encontrado razones hasta ahora para detener el entrenamiento. } Este ejemplo proviene del entrenamiento de una red Perceptrón Multicapa, en la que concurren cuatro analizadores. Tres de los analizadores actúan con el papel de hojas del patrón Composite (GoF) – dos ValueDecreaseAnalyzer’s y un ValueVariationAnalyzer. Finalmente, los analizadores anteriores están recogidos en un cuarto, un ComposedProgressAnalyzer, que ofrece la conclusión final al Maestro. Es a esta última instancia a la cual se ha invocado el método getReasonToStop(), que ha sido el encargado de recavar la información de sus analizadores mediante la misma invocación. h) El modelo de StatisticListener Implantación del patrón de diseño Observer (GoF). El modelo de StatisticLister’s permite que elementos ajenos a la red neuronal y al maestro sean informados del progreso de un entrenamiento. Para ello, el elemento que quiera recibir las notificaciones ante los eventos ha de implantar la interfaz Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 71 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ StatisticsListener y suscribirse en la instancia Statistics que desee observar3. que incluye los dos métodos siguientes: • + statsUpdate(statisticsEvent :StatisticsEvent). Método invocado por la instancia de Statistics observada, cada cierto número de actualizaciones de sus registros estadísticos. No todas las actualizaciones son notificadas ya que, al actuar de forma síncrona con las invocaciones, la carga administrativa sería demasiado fuerte para el proceso de entrenamiento. En concreto, se notifica una de cada Statistics.NOTIFICATION_GAP actualizaciones. • + statsClosed(statisticsEvent :StatisticsEvent). Método invocado por la instancia de Statistics observada una vez que se ha finalizado el proceso de entrenamiento. Las instancias de la clase StatisticsEvent viajan como parámetros del método de notificación invocado. El único contenido de las instancias de esta clase es el Source u origen del evento. De esta manera, un elemento que pudiera estar suscrito a diferentes estadísticas de entrenamiento puede llegar a distinguir de cuál de ellas proviene la notificación. 3 Es a causa de esta suscripción, para permitir el acceso a las estadísticas antes de que comience el entrenamiento, por lo que se ha independizado la creación de las instancias de Statistics del método de aprendizaje educateNetwork(). Para más referencias ver: 5.5.6. El Maestro (Teacher) > a) La clase abstracta Teacher. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 72 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5.8. Internacionalización y localización Toda la carga de internacionalización y localización recae en la clase Messages que se encarga del acceso a los Resource Bundles proporcionados con el framework. Esta clase accederá a la localización del archivo de Resource Bundle messages.properties, de la localización indicada por la configuración de la máquina virtual. La localización proporcionada por defecto es la inglesa (EN). Para acceder a la localización de Español – Castellano – se accederá al archivo messages_es.properties. El framework incluye un único Resource Bundle, situado en el paquete com.jcortex, para almacenar los textos localizados. Este será el único archivo para localización dentro de la distribución estándar de JCortex. Extensiones desarrolladas y proyectos que utilicen JCortex tendrán que establecer sus propios archivos de localización. Se recomienda en estos casos, que se duplique la clase Messages para tener acceso a todas las funcionalidades que ofrece. Dentro de la clase Messages se proporciona una serie de métodos estáticos que facilitan la obtención de los textos localizados: • + getString(key :String) :String. Método por defecto que adquiere el texto localizado indexado por la clave key. • + getString(key :String, arg1 :Object,…):String. Método que adquiere el texto localizado indexado por la clave key. Además sustituye en el mismo los placeholder (marcas) para los que se ofrecen argumentos de tipo Object de forma explícita. Las marcas se encuentran en el texto localizado y se indican con la cadena “{i}” para el argumento i (" i # 0). Esta clase proporciona métodos que utilizan de 1 a 4 argumentos a ser sustituidos. Es importante señalar que estos argumentos han de ser objetos sobre los que se puede invocar el método toString(). • + getString(key :String, args :Object[]):String. Método que adquiere el texto localizado indexado por la clave key. Además sustituye en el mismo los placeholder (marcas) para los que se ofrecen argumentos de tipo Object a través del array. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 73 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.5.9. Utilidades en el paquete básico Como apoyo al framework se incluyen dos clases con utilidades. En ellas se recogen tareas que son necesarias en distintos puntos del framework, pero sin llegar a formar parte de su actividad principal o a desempeñar un papel realmente significativo. Ninguna de las acciones recogidas dentro de las utilidades son determinantes en el rendimiento, bien sea por su uso poco frecuente o por su simplicidad. Estas actividades no tienen cabida dentro de una de las clases antes descritas en el paquete del núcleo, en la mayoría de los casos porque pueden ser utilizadas en diversos puntos del framework, sin corresponder exclusivamente a ninguno. a) Utilidades en ConsoleUtilities Esta clase recoge las utilidades de apoyo al framework relacionadas con la generación de mensajes de texto para su presentación por la interfaz de línea de comando. • + static arrayToString(:float[]) :String. Representa un vector de números reales en forma de texto. • + static arrayToString(:float[][]) :String. Representa una matriz de números reales en forma de texto. • + static arrayToString(:boolean[]) :String. Representa un vector de valores booleanos en forma de matriz. • + static arrayToString(:boolean[][]) :String. Representa una matriz de valores booleanos en forma de texto. b) Utilidades en LoadAndStoreUtilities Esta clase recoge las utilidades de apoyo al framework relacionadas con el almacenamiento y recuperación de la configuración de los elementos del framework en archivos XML. • + static writeXMLFile(filepath :String, xmlDoc :Document) :File. Almacena un documento XML en el archivo indicado por su dirección lógica en el sistema de archivos. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 74 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ • + static writeXMLFile(file :File, xmlDoc :Document) :File. Almacena un documento XML en el archivo indicado por la instancia de la clase File. • + static readXMLNeuralNetwork(filePath :String) :NeuralNetwork. Carga desde un archivo XML una instancia de NeuralNetwork. El archivo con la configuración es pasado en forma de dirección lógica en el sistema de archivos. • + static static readXMLNeuralNetwork(file :File) :NeuralNetwork. Carga desde un archivo XML una instancia de NeuralNetwork. El archivo con la configuración es pasado en forma de instancia de la clase File. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 75 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6. Paquetes de Modelos de red Los modelos de red no forman parte realmente del núcleo del framework, si bien su participación es imprescindible para desarrollar la estructura y el diseño del núcleo, mostrar la potencia del framework, servir de ejemplo para otros desarrollos, proporcionar una utilidad inmediata sin necesidad de programar nada de Redes Neuronales Artificiales… Se ha procurado implantar modelos diferentes entre si para probar la versatilidad del framework, a la vez que se ha buscado que estos sean los modelos más utilizados en proyectos reales. Los modelos proporcionados han de verse más desde el punto de vista de una plantilla de desarrollo que un desarrollo completo. Funcionan al completo, si bien caben mejoras en cuanto a la calidad de sus resultados y prestaciones. Los distintos modelos de red del framework se agrupan en paquetes, dentro de la estructura del framework com.jcortex. En la Ilustración 4: Paquetes de Modelos de Red se muestran los paquetes incluidos actualmente en el framework JCortex. En los apartados siguientes se describen los aspectos más relevantes de la implantación de cada uno de los modelos de red incluidos en el framework. Para poder acceder a una explicación detallada, ver Anexo A: Documentación de la API – JCortex (en Inglés). Ilustración 4: Paquetes de Modelos de Red Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 76 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ com.jcortex.backPropagation BackPropagationNeuron DefaultMultilayerPerceptronTeacher MultilayerPerceptronNeuralNetwork Contiene clases genéricas para los modelos de red basados en el mecanismo de Retropropagación, así como el modelo Perceptrón Multicapa completo. Se basa en el Feed-Forward. com.jcortex.feedForward DefaultPerceptronTeacher FeedForwardNeuralNetwork FeedForwardNeuron NeuronInTheList PerceptronNeuralNetwork ToDoList Contiene clases genéricas para los modelos de red basados en el mecanismo de propagación hacia delante, Feed-Forward. Incluye una implantación versátil del modelo Perceptrón. com.jcortex.hopfield DefaultHopfieldTeacher HopfieldNeuralNetwork Contiene clases necesarias para la implantación de las redes de Hopfield. com.jcortex.kohonen CylinderHexKMap CylinderSquareKMap CylinderStarKMap Contiene clases necesarias para la implantación del modelo de red de Mapas de Kohonen. Default2DKMap DefaultKohonenTeacher KohonenMap KohonenNeuralNetwork KohonenNeuron SheetHexKMap SheetSquareKMap SheetStarKMap ToroidHexKMap ToroidSquareKMap ToroidStarKMap Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 77 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6.1. Indicaciones de construcción para modelos de Redes Neuronales artificiales en JCortex Los modelos propuestos en el framework no son los únicos posibles. Es más, JCortex está pensado para que un usuario pueda implantar sus propios algoritmos, modelos y funcionalidades. Se recomienda que todas las clases que participan en un mismo modelo de red se encuentren juntas, en un único paquete. Este paquete no ha de estar obligatoriamente dentro de la jerarquía com.jcortex – esta está reservada exclusivamente para los modelos de red distribuidos con el framework – sino que puede situarse donde el usuario la necesite. Es recomendable que varios modelos de red no compartan el mismo paquete. Los modelos de red se pueden implantar de dos formas distintas. Una implantación pura, partiendo de las interfaces y clases abstractas del paquete com.jcortex. O bien extendiendo un modelo de red ya implantado dentro del framework o fuera de él. El contenido habitual del paquete de un modelo de red es el siguiente: • Ha de haber una clase que extienda a NeuralNetwork, directamente o a través de otras clases intermedias. En esta clase se ha de modelar tanto la estructura interna como el funcionamiento del modelo de red neuronal. El nombre de esta clase tendrá la forma *NeuralNetwork. • Opcionalmente puede haber una o más clases que hereden de Neuron, según la naturaleza del modelo. Las instancias de estas clases serán las que constituyan la estructura de la red. El nombre de estas clases tendrá la forma *Neuron. • Es imprescindible la presencia de al menos una clase que extienda a Teacher. En ella residirá la funcionalidad de entrenar las redes generadas con el modelo de red. El nombre de estas clases tendrá la forma *Teacher. • …Pueden ser necesarias otras clases propias del funcionamiento o naturaleza de la red que también tendrán que ser recogidas dentro del paquete del modelo. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 78 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6.2. Redes de Hopfield (com.jcortex.hopfield) a. Descripción de la Red Las redes de Hopfield son redes de adaptación probabilística, recurrentes, funcionalmente entrarían en la categoría de las memorias autoasociativas, es decir, que aprenden a reconstruir los patrones de entrada que memorizaron durante el entrenamiento. Son arquitecturas de una capa con interconexión total, funciones de activación booleana de umbral (cada unidad puede tomar dos estados, 0 o 1, dependiendo de si la estimulación total recibida supera determinado umbral), adaptación probabilística de la activación de las unidades, conexiones recurrentes y simétricas, y regla de aprendizaje no supervisado. Las Redes de Hopfield han sido seleccionadas para ser implantadas en JCortex por su naturaleza distintiva respecto a otros modelos de red estructurados alrededor de unidades “pensantes”. b. Diseño del modelo El enfoque tomado para la implantación de este modelo es completamente distinto al resto de los recogidos en el framework. En lugar de disponer de una estructura interna constituida por neuronas, toda la información de la red neuronal se recoge en una matriz numérica. La Matriz de Pesos es una matriz cuadrada que contiene la información aprendida por la red. Su tamaño está determinado por el número de entradas o atributos de los patrones a ser aprendidos. Esta matriz cuadrada está representada como un array de arrays de números reales. Es de reseñar que la recomendación realizada por Hopfield es que el número máximo de patrones no correlacionados que se puede almacenar en una red es el 15% del número de sus neuronas, el decir, del número de atributos registrados. La implantación de este modelo ha sido extremadamente simple, como se muestra en el Diagrama de Clases 9: Modelo de Red de Hopfield, gracias a su carencia de estructura interna. La clase HopfieldNeuralNetwork es autocontenida – no requiere de otros elementos para llevar a cabo el procesado de los datos de entrada –, por lo que únicamente necesita poseer una clase de tipo Teacher – HopfielTeacher – que sepa entrenarla. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 79 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Clases 9: Modelo de Red de Hopfield Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 80 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ c.- Propagación en la red de Hopfield La propagación de un estímulo a través de una Red de Hopfield es un proceso recursivo. El patrón de entrada para cada iteración se obtiene, bien del estímulo recibido por la red, bien de la salida de la iteración anterior. En origen, el patrón de entrada es el estímulo inicial que recibe la red que, supuestamente, es uno de los patrones almacenados que puede estar afectado por un cierto ruido o desfase. En cada una de las iteraciones, el patrón de entrada (X) sufre una serie de transformaciones que deberían aproximarle cada vez más a un estado estable de la red de Hopfield. Este estado será, idealmente, el patrón sin ruido almacenado en la red, al cual está relacionada la entrada. El procesado del patrón de entrada se ha modelado mediante una operación entre vectores y matrices, siguiendo las ecuaciones: Y '= X " Weights # Bias Y = FunciónSignoHopfield(Y ') Vistos en detalle los elementos que forman las estructuras matemáticas: ! ! # w1,1 % w1,2 L xi ) " % % M % $ w j,1 ( y'1 y'2 L y'i ) = ( x1 ( y1 y 2 L y i ) = FuncionSignoHopfield( y'1 x2 Símbolo Descripción X Patrón de entrada de la iteración. Y y'2 L y'i ) Elemento Variable xi float[] iterationInput wi,j float[][] weights Vector de Bias. bi float[] bias Patrón de salida de la iteración. yi float[] iterationOutput Weights Matriz con los pesos con la configuración de la red de Hopfield. Bias L w1,i & ( L w1,i ( ) (b1 b2 L bi ) O M ( ( L w j,i ' w1,2 w 2,2 M w j,2 La Función Signo definida por Hopfield, se implanta utilizando el método estático + static hopfieldSignFunction(iterationsInput :float[], functionsInput :float[]) : float[] de la clase HopfieldNeuralNetwork. A continuación se muestra la definición de la función: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 81 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ FuncionSignoHopfield( y'1 ! y'2 $ y'i > 0 "1 & L y'i ) = % y'i = 0 " x i & y' < 0 " #1 ' i Para controlar el proceso iterativo, se ha empleado la definición de la Energía de Hopfield (eH). Hopfield demostró que en cada iteración el patrón de salida evoluciona hacia una energía menor o igual que la de su patrón de entrada. Para que se cumpla este comportamiento descrito por Hopfield, la construcción de la matriz ha de asegurar una serie de condiciones: • La matriz ha de ser simétrica (wa,b = wb,a). Es decir, la conexión entre la supuesta neurona i y la supuesta neurona j ha de tener el mismo peso que la conexión entre la j y la i. • La matriz ha de tener toda su diagonal a 0 (wa,a = 0 ). De forma figurada, esto se traduciría en que una neurona de Hopfield no ha de estar conectada a si misma. La Ecuación de la Energía del Hopfield se encapsula dentro del método + static hopfieldEnergy(pattern :float[], weights :float[][], bias :float[]) :float de la clase HopfieldNeuralNetwork. La energía se calcula siguiendo la función: EnergíaHopfield( X,Weights,Bias) = " ! 1 $ $ w j,i # x i # x j + $ x i # bi 2 i j%i i Aprovechando la característica imprescindible de simetría, se puede reducir considerablemente el número de operaciones. Sólo es necesario calcular el producto de los binomios que forman los elementos de la diagonal superior, omitiendo la división entre 2. De esta manera se logra el código compacto: float energy = 0; int attributeCount = pattern.length;!int i,j; for(i = 0; i < attributeCount; i++){ for(j = i+1; j < attributeCount; j++){ energy -= weights[i][j] * pattern[i] * pattern[j]; }! energy += pattern[i] * bias[i]; } Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 82 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ A lo largo de la iteración de propagación, se mantiene almacenada en una variable la energía del patrón de entrada. Al finalizar la iteración, ésta se compara con la energía del patrón de salida obtenido. Pueden darse tres opciones: • eH del patrón de Entrada > eH del patrón de Salida: el caso más habitual. En él la red ha evolucionado hacia un patrón más estable, es decir, de menor energía. • eH del patrón de Entrada < eH del patrón de Salida: en este caso, la red evoluciona hacia una situación inestable, de mayor energía. El entrenamiento se detiene antes de que empeore aún más, devolviendo como patrón reconocido, el patrón de entrada de esta última iteración. Es de suponer que este patrón sea el que posea la energía mínima. El entrenamiento ha finalizado en una situación inestable. • eH del patrón de Entrada = eH del patrón de Salida: será preciso considerar dos escenarios: o El patrón de Entrada es igual que el de Salida: el entrenamiento habrá finalizado en una situación estable. El patrón habrá sido reconocido, y por tanto podrá ser devuelto como respuesta al estímulo introducido en la red. o El patrón de Entrada es distinto que el de Salida: el entrenamiento ha de continuar ya que puede ser el paso previo a otro descenso de energía en una iteración futura. El patrón no ha sido reconocido. Es importante señalar que no se está evitando un posible bucle en la evolución, entre patrones de igual eH. Tampoco se está controlando si se está convergiendo en un mínimo local, en lugar de en el patrón almacenado que se buscaba. En los casos anteriores, se ha de suponer que el usuario (programador) ha dispuesto el vector de bias correcto para evitar situaciones anómalas. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 83 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Actividad 6: Propagación en la Red de Hopfield Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 84 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ d. Entrenamiento de una Red de Hopfield El maestro por defecto proporcionado con el framework, no tiene un comportamiento recursivo, por lo que no tiene sentido llevar a cabo un seguimiento de sus estadísticas. El proceso, tal y como ha sido modelado, responde a un algoritmo matemático con el cual los patrones de referencia se almacenan dentro de la matriz de pesos de la red. Como ya se ha visto en apartados anteriores, esta matriz ha de ser simétrica respecto a su diagonal principal que, a su vez, ha de ser 0. El método matemático propuesto por Hopfield observa la siguiente ecuación, conocido como Aprendizaje de Hebb: Weights = p ) 1& P " P' $ p % I (# k + k N ' k=1 * Vistos en detalle los elementos que forman las estructuras matemáticas: ! " w1,1 $ $ w1,2 $ M $ # w j,1 w1,2 w 2,2 M w j,2 +L + L w1,i % ' L w1,i ' 1 1 = (x O M ' N 1 ' L w j,i & 1 p ( x1 N x 2p x12 " x11 % $ 1' x 1 1 L x i ) ( $ 2 ' + ( x12 $M' N $ 1' # xi & " x1p % "1 $ p' $ x 2 ' p $0 p $ L xi ) ( ) * $ M ' N $M $ p' $ #0 # xi & Símbolo Descripción ! x 22 " x12 % $ 2' x 2 L xi ) ( $ 2 ' + $M' $ 2' # xi & 0 L 0% ' 1 L 0' M O M' ' 0 L 1& Elemento Variable N El número de atributos de cada patrón. N attributeCount Pk Vector de atributos de un patrón. xk i float[][] weights i=1…N k=1…p p El número de patrones que van a ser almacenados en la red. p - I Matriz identidad. - - Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 85 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Aprovechando la simetría de la matriz y las estructuras de datos propias implantadas, se puede llegar a simplificar en gran medida el aparato matemático mostrado: • Sólo es necesario calcular el valor de los elementos de un lado de la diagonal. El otro lado puede ser copiado por simetría una vez los primeros hayan sido completamente calculados. • Es posible extraer el cociente 1/N como factor común del producto vectorial de cada patrón. De esta forma sólo es necesario realizar una única división por cada atributo. • La finalidad del último término con la Matriz Identidad (I) es asegurar que la diagonal de la matriz resultante sea 0. Esta operación se puede resolver con una simple asignación (1 por cada atributo). Prescindiendo así de un recorrido completo por la matriz. A continuación se describe en pseudocódigo el proceso de construcción de la matriz numérica, en el que se han aplicado las optimizaciones expuestas anteriormente. 1. Inicializar la matriz de pesos float[][] weights. 1.1. Inicializar uno a uno los arrays float[] que cuelgan de weights[]. 2. Cálculo de los elemenos de la diagonal superior de la matriz. for(k = 0; k < patterns.length; k++){ // k->pattern for(i = 0; i < attributeCount; i++){ // i->lines for(j = i+1; j < attributeCount; j++){ //j->columns weights[i][j] += patterns[k][i] * patterns[k][j]; } } } 3. Recorre la diagonal y los elementos sobre la diagonal de la matriz, realizando diversas operaciones: se asegura de que los elementos en la diagonal tienen valor 0, divide el resto de los elementos de la diagonal superior entre N, y copia su valor en la posición simétrica. for(i = 0; i < attributeCount; i++){ // i->lines for(j = i+1; j < attributeCount; j++){ //j->columns if(i != j){ weights[i][j] = weights[i][j]/attributeCount; weights[j][i] = weights[i][j]; // Copies under the diagonal } else{ weights[i][i] = 0; // 0 on the diagonal} } } El maestro por defecto no calcula el vector de bias adecuado para la red neuronal, aunque su uso sí que está recogido dentro del funcionamiento descrito para la Red de Hopfield. Por defecto, el maestro construirá un vector de bias con todos los atributos a 0. Esta configuración implica que el bias no modifica en principio los Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 86 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ valores generados con el cálculo matricial. Será responsabilidad del usuario (programador) establecer un bias personalizado, utilizando el método de la clase HopfieldNeuralNetwork, + setBias(:float[]). e. Serialización en XML La mayor carga del almacenamiento en formato XML de la configuración de una red de Hopfield reside en la serialización de la matriz de pesos. <neuralNetwork class="com.jcortex.hopfield.HopfieldNeuralNetwork" neuronCount="0" sensorCount="0" inputTranslator="com.jcortex.translators.TransparentInputTranslator" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" attributeCount="24"> <weights> <weight row="0" col="0" value="0.0"/> <weight row="0" col="1" value="-0.083333336"/> <weight row="0" col="2" value="-0.25"/> <weight row="0" col="3" value="0.41666666"/> <weight row="0" col="4" value="-0.16666667"/> <weight row="0" col="5" value="0.083333336"/> <weight row="0" col="6" value="0.083333336"/> <weight row="0" col="7" value="-0.083333336"/> <weight row="0" col="8" value="0.0"/> <weight row="0" col="9" value="0.16666667"/> <weight row="0" col="10" value="-0.083333336"/> <weight row="0" col="11" value="0.083333336"/> <weight row="0" col="12" value="-0.083333336"/> <weight row="0" col="13" value="0.083333336"/> <weight row="0" col="14" value="-0.083333336"/> <weight row="0" col="15" value="-0.083333336"/> <weight row="0" col="16" value="0.0"/> <weight row="0" col="17" value="0.16666667"/> <weight row="0" col="18" value="0.083333336"/> <weight row="0" col="19" value="-0.083333336"/> <weight row="0" col="20" value="0.16666667"/> <weight row="0" col="21" value="-0.16666667"/> <weight row="0" col="22" value="-0.25"/> <weight row="0" col="23" value="0.083333336"/> <weight row="1" col="0" value="-0.083333336"/> ! Se ha omitido el resto de parámetros de las filas 1 a la 23. <weight row="23" col="23" value="0.0"/> </weights> <biasVector> <bias ix="0" value="0.0"/> <bias ix="1" value="0.0"/> <bias ix="2" value="0.0"/> <bias ix="3" value="0.0"/> <bias ix="4" value="0.0"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 87 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ <bias ix="5" value="0.0"/> <bias ix="6" value="0.0"/> <bias ix="7" value="0.0"/> <bias ix="8" value="0.0"/> <bias ix="9" value="0.0"/> <bias ix="10" value="0.0"/> <bias ix="11" value="0.0"/> <bias ix="12" value="0.0"/> <bias ix="13" value="0.0"/> <bias ix="14" value="0.0"/> <bias ix="15" value="0.0"/> <bias ix="16" value="0.0"/> <bias ix="17" value="0.0"/> <bias ix="18" value="0.0"/> <bias ix="19" value="0.0"/> <bias ix="20" value="0.0"/> <bias ix="21" value="0.0"/> <bias ix="22" value="0.0"/> <bias ix="23" value="0.0"/> </biasVector> <teacher class="com.jcortex.hopfield.DefaultHopfieldTeacher"/> </neuralNetwork> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 88 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6.3. Mapas de Kohonen (com.jcortex.kohonen) a. Descripción de la Red Son redes autoorganizadas capaces de codificar y luego reconocer modelos de rasgos característicos de un entorno. Una vez entrenada, la red puede ser utilizada para la clasificación de patrones de entrada similares en un espacio n-dimensional. Una clase o grupo de patrones similares tiende a controlar una neurona específica, que representará el centro de una esfera n-dimensiona. Esa neurona será la más activa frente a patrones similares a su vector de pesos. Después del aprendizaje, la clasificación consiste en presentar una entrada y seleccionar la unidad más activa, la ganadora, aplicando la función de Distancia. La neurona ganadora será la más cercana al patrón de entrada. b. Diseño del modelo La clase principal del modelo es KohonenNeuralNetwork que hereda de la clase abstracta NeuralNetwork. El principal problema de este tipo de red es la gran diversidad de mapas de neuronas que es capaz de admitir. El diseño de un framework ampliable y abierto exige que este modelo de red sea capaz de trabajar sobre cualquier configuración de mapa interno. Para permitir este paso, se ha recurrido a la creación de una nueva interfaz: KohonenMap. En el diseño de este modelo de red se ha aislado la configuración, de la estructura interna de la clase KohonenNeuralNetwork. Esta última clase es la que tradicionalmente tendría que poseer la estructura, al heredar de NeuralNetwork. En su lugar, la red almacena una instancia de KohonenMap. Son las realizaciones de esta clase abstracta las que contienen la funcionalidad y la información asociada a la estructura de la red. Este hecho es transparente para el usuario externo ya que la clase KohonenNeuralNetwork proporciona un interfaz único de acceso a la información y los métodos obligados de la instancia de KohonenMap asociada, cumpliendo con el contrato de NeuralNetwork. La estrecha relación entre un mapa y la red a la que se encuentra asociado obliga a llevar a cabo un proceso de integración entre ambos, recogido en el método + integrateWithNeuralNetwork(KohonenNeuralNetwork knn) de KohonenMap. En este proceso se incluyen todas las neuronas del mapa dentro de la Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 89 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ colección mantenida por la red; y se trasladan las referencias a las instancias de Sensor de la red al mapa, conectando red y mapa en la propagación. A la hora de describir la estructura de un Mapa de Kohonen es preciso identificar dos atributos imprescindibles: • La Forma de la Neurona o del Vecindario. Dentro del símil geométrico, la forma de las neuronas que forman el mapa, determina la vecindad de éstas con las neuronas adyacentes. No sólo variará el número de células vecinas, sino incluso la distribución de esta vecindad. En el conjunto de mapas propuesto se recogen las siguientes formas: o Cuadrada. Las neuronas poseen 4 vecinas, que se distribuyen de acuerdo con las aristas de una neurona de geometría cuadrada. o Hexagonal. Las neuronas poseen 6 vecinas, que se distribuyen de acuerdo con las aristas de una neurona de geometría hexagonal. o Estrellada. Las neuronas poseen 8 vecinas, que se distribuyen de acuerdo con los vértices y las aristas de una neurona de geometría cuadrada. Ilustración 5: Formas de Vecindad4 4 En la figura, los números de las neuronas de los mapas representan el radio de vecindad más bajo en el que la neurona entra en contacto con la central. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 90 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ • La Forma del Mapa. Si bien este parámetro posee una traslación bastante ilustrativa al mundo geométrico, en realidad hace referencia al wrapping o envoltura que realiza un mapa sobre si mismo. Se está definiendo de esta manera el comportamiento de las neuronas del borde del mapa. En el conjunto de mapas propuesto se recogen las siguientes formas: o Fila. Este es un término ficticio, que realmente hace referencia a un mapa de forma plana compuesto por una única hilera de neuronas. o Plana (Sheet). Las neuronas de los bordes del mapa no adquieren ningún comportamiento especial. Sus únicas vecinas serán aquellas que se encuentren contiguas a ellas mismas en el borde o hacia el interior del mapa. o Cilíndrica. Las neuronas de los bordes verticales mantienen la misma independencia que en la forma plana, mientras que las neuronas de los extremos horizontales interpretan como vecinas aquellas que se encuentran en el borde opuesto al suyo propio. o Toroide. No sólo las neuronas de los bordes horizontales interpretan como vecinas la neuronas que se encuentran en el extremo opuesto del mapa (como es el caso de la forma cilíndrica), sino que además las neuronas verticales cumplen con el mismo comportamiento añadido. Tabla 5: Conjugación de las Formas de Neurona y Mapa Forma de Mapa Cilíndrica Toroide Hexagonal Cuadrada Plano (Sheet) Estrellada Forma de Neurona Fila Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 91 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ La disposición de las neuronas de forma geométrica cuadrada (neuronas cuadradas y estrelladas), sigue una matriz de n filas por m columnas. En la Ilustración 6: Distribución de neuronas Cuadradas y Estrelladas se muestra el ejemplo de distribución y localización de estas neuronas en una red de 6x5. C.1 C.2 C.3 C.4 C.5 C.6 Fila 1 0 5 10 15 20 25 Fila 2 1 6 11 16 21 26 Fila 3 2 7 12 17 22 27 Fila 4 3 8 13 18 23 28 Fila 5 4 9 14 19 24 29 Ilustración 6: Distribución de neuronas Cuadradas y Estrelladas La disposición de las neuronas de forma hexagonal sigue la orientación de las aristas para encajar como un panal de abejas. Al no poseer ángulos rectos, las filas se organizan de acuerdo con una secuencia de zig-zag en un ángulo de 120º, tal y como se muestra en la Ilustración 7: Distribución de neuronas Hexagonales. Las columnas mantienen su disposición habitual. Ilustración 7: Distribución de neuronas Hexagonales Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 92 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Para el sistema de wrapping o envoltura de los bordes de la red, se suponen las vecindades mostradas en la Ilustración 8: Wrapping de neuronas Cuadradas y la Ilustración 9: Wrapping de neuronas Hexagonales, ambas sobre una red de ejemplo de 6x5 neuronas. 29 4 9 14 19 24 29 4 25 0 5 10 15 20 25 0 26 1 6 11 16 21 26 1 27 2 7 12 17 22 27 2 28 3 8 13 18 23 28 3 29 4 9 14 19 24 29 4 25 0 5 10 15 20 25 0 Ilustración 8: Wrapping de neuronas Cuadradas Ilustración 9: Wrapping de neuronas Hexagonales Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 93 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Tomando como base la Ilustración 9: Wrapping de neuronas Hexagonales se puede comprender fácilmente el porqué de la orientación particular de la envoltura cilíndrica. Lo habitual hubiera sido optar por una envoltura en horizontal, dejando los bordes verticales libres. Sin embargo, dada la naturaleza geométrica de estas neuronas, el número de columnas del mapa tendría que haber sido par. Con el fin de imponer el mínimo número de restricciones, se ha reservado la envoltura horizontal para la forma de mapa toroide. Todas los modelos de mapas proporcionados con el framework JCortex comparten gran número de características, más allá de las generalizadas al nivel de abstracción de KohonenMap. Es por ello que se ha creado un nivel de abstracción intermedio que resuelve, en la clase Default2DKMap, el almacenamiento de las neuronas en una lista de elementos, sobre la que se aplican dos dimensiones: filas y columnas. Proporciona a su vez la interfaz para la gestión del conjunto de neuronas. En el Diagrama de Clases 10: KohonenMap y Default2DKMap se muestra el reparto de responsabilidades entre ambas clases abstractas. Diagrama de Clases 10: KohonenMap y Default2DKMap Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 94 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ La Tabla 6: Subclases de KohonenMap, muestra en qué clases se ha traducido cada una de las posibles combinaciones de la Forma de la Neurona y la Envoltura del Mapa. Cabe describir la nomenclatura recomendada para las distintas subclases de KohonenMap: Forma-del-Mapa + Forma-de-la-Neurona + “KMap” (Se recomienda dar los nombres de las características en inglés.) Hexagonal Estrellada Forma de la Neurona Cuadrada Tabla 6: Subclases de KohonenMap Envoltura Mapa Subclase de KohonenMap Fila SheetSquareKMap Plana (Sheet) SheetSquareKMap Cilíndrica CylinderSquareKMap Toroidal ToroidSquareKMap Fila SheetHexKMap Sheet SheetHexKMap Cilíndrica CylinderHexKMap Toroidal ToroidHexKMap Fila SheetStarKMap Plana (Sheet) SheetStarKMap Cilíndrica CylinderStarKMap Toroidal ToroidStarKMap Ilustación Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 95 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ En el Diagrama de Clases 11: Modelo de Mapas de Kohonen se ha representado el contenido completo del paquete com.jcortex.kohonen, distribuido con el framework. Se han incluido las interfaces y clases abstractas básicas del paquete principal que definen el contrato de los elementos de la red neuronal en JCortex. Diagrama de Clases 11: Modelo de Mapas de Kohonen Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 96 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Las neuronas de los mapas de Kohonen se representan a través de la clase KohonenNeuron. Las instancias de esta clase cumplen las siguientes funciones: • Almacenar la configuración propia de la neurona. Esto es, un vector de pesos en el que se codifica un patrón que identifica a un grupo de ejemplos. Los valores de los pesos se almacenan en el atributo de la instancia - float[] weights. Este array posee tantas posiciones como atributos tenga la entrada a la red (que equivale al número de sensores de la misma). Se ha elegido esta estructura ya que el tamaño de entrada a una red es fijo, exigiéndose además un rápido acceso directo a los valores almacenados, con un coste de almacenamiento mínimo. • La sinapsis de la neurona se realiza directamente sobre el método + produceAxonValue() :float, ya que en las redes de Kohonen no hay neuronas hijas conectadas. Este método utiliza la instancia de DistanceFunction almacenada en la neurona para obtener su valor de similitud. Será este valor el que determine si esta neurona es la ganadora en la propagación. • Gestionar la elección de la clase a la que pertenece la neurona, a partir de los resultados de excitarla con un conjunto de ejemplos de entrenamiento. Para este proceso es necesario almacenar las clases de los ejemplos para los cuales esta neurona ha resultado ser la ganadora, y el número de ejemplos de cada clase que han caído en la neurona. Est no es una acción que se lleve a cabo a menudo, sólo como último paso del proceso de entrenamiento, o en los sondeos estadísticos sobre la calidad del mismo. El almacenamiento de una clase se lleva a cabo a utilizando del método + registerLastExampleClass(lastExampleClass:Object). El resultado de la gestión se puede averiguar utilizando los métodos: o + getDominantClass() :Object. Para obtener la clase dominante en la neurona. o + getClusterSuccesses() :int. Para obtener el número de ejemplos para los cuales esta neurona ha sido la ganadora, y cuya clase coincide con la clase dominante en la neurona. o + getClusterErrors() :int. Para obtener el número de ejemplos para los cuales esta neurona ha sido la ganadora, y cuya clase no coincide con la clase dominante en la neurona. La dificultad que exige crear todos los mecanismos de gestión de las clases recogidas en una neurona es que la neurona no puede conocer a priori el número de clases posibles recogidas en el conjunto de entrenamiento. Será necesario ir Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 97 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ recogiendo de forma dinámica en la neurona ganadora la clase y el número de ejemplos que la avalan. Esta es la única manera de poder decidir al finalizar el entrenamiento qué clase representa cada neurona. Para la gestión de las clases recogidas en una neurona se ha utilizado la estructura de datos java.util.Hashtable. Cada una de las clases (atención: son instancias de Object) de los ejemplos recogidos en la neurona, se almacenará en la tabla Hash como la clave. El contenido direccionado con esta clave será una instancia de Integer que envuelve el número de ejemplos de esta clase para los cuales esta neurona ha sido la vencedora. c. Propagación Los Mapas de Kohonen son redes competitivas en las que las neuronas pugnan por ser seleccionadas como “ganadora”, es decir, aquella cuyo vector de pesos guarde mayor similitud con el estímulo recibido. La red neuronal extiende el método Template Method + pureThink(input :float) :float[], al que está obligada por ser una instancia de NeuralNetwork. Sin embargo, este método no se utiliza desde este nivel, ya que se ha sobrecargado el método + think(inputData :Object) :Object de NeuralNetwork a nivel de KohonenNeuralNetwork. Es necesario reconstruir este método ya que la salida obtenida de excitar la red no es un vector de valores numéricos que ha de pasar por un traductor, sino que será la clase dominante de la neurona vencedora. Esta clase se trata directamente como una instancia de Object. El proceso de propagación consiste en, una vez se han almacenado los valores de la entrada dentro de los sensores de la red (instancias de Sensor), recorrer todas las neuronas del mapa induciéndolas a aplicar la función de distancia entre el vector recibido y el vector de pesos característico de la propia neurona. La función de distancia utilizada es la almacenada en la neurona de Kohonen como una instancia de DistanceFunction. Si bien no tiene sentido que haya distintas funciones de distancia en un mismo mapa, el modelo actual permite su coexistencia. El valor de la distancia calculada por la neurona es almacenado como su axon value. Para el recorrido de las neuronas del mapa se utiliza el Iterator que ha de generarse desde todas los modelos de mapa concretos, tal y como exige el contrato de KohonenMap. A medida que se lleva a cabo la sinapsis en las neuronas, se mantiene el registro de cuál ha sido la mejor hasta el momento, esto es, aquella cuya distancia entre vector de entrada y vector de pesos sea menor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 98 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ El código básico es el siguiente: // Inicialización KohonenNeuron kNeuron = null; KohonenNeuron bestNeuron = null; // Generates an iterator an starts using it to go though all the neurons Iterator it = map.iterator(); // The first one is taken as the best straight away if(it.hasNext()){ bestNeuron = (KohonenNeuron) it.next(); bestNeuron.produceAxonValue(); } // The whole lot further from the first one while(it.hasNext()){ // Makes the neuron work out its distance kNeuron = (KohonenNeuron) it.next(); kNeuron.produceAxonValue(); // Keeps the best distance if(kNeuron.getAxonValue() < bestNeuron.getAxonValue()){ bestNeuron = kn; } } Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 99 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ d. Maestro DefaultKohonenTeacher El maestro propuesto por defecto para el entrenamiento de los Mapas de Kohonen es una interpretación simple, aunque rápida, del propuesto en el modelo teórico. A grandes rasgos, el algoritmo recorre los siguiente pasos: 1. Obtener la instancia de KohonenNeuralNetwork a entrenar y los atributos necesarios de la misma. 2. Obtener las estadísticas y generar los analizadores. 3. Traducir el conjunto de ejemplos de entrenamiento. 4. Generar los vecindarios para su uso posterior. 5. Iterar sobre el conjunto de ejemplos de aprendizaje hasta que los analizadores indiquen que se debe detener el entrenamiento. Para cada iteración sobre el conjunto de ejemplos: 5.1. Inicializar los contadores estadísticos. 5.2. Procesar el ejemplo: 5.2.1. Propagar el ejemplo a través del mapa de Kohonen. 5.2.2. Registrar la neurona ganadora. 5.2.3. Obtener el vecindario de la neurona ganadora. 5.2.4. Entrenar las neuronas del vecindario. 5.3. Registrar los resultados estadísticos. 5.4. Consultar a los analizadores de progreso. 6. Finalizar cerrando las estadísticas. Sólo las neuronas que se encuentran dentro del radio de vecindad de la neurona ganadora son las que obtienen como premio aprender del ejemplo. De esta manera, a medida que fluyan las iteraciones, se irán perfilando zonas que agrupen neuronas con la misma clase dominante. La ley de aprendizaje aplicada, se muestra en la siguiente fórmula: W i (N + 1) = W i (N) + " # [ Input i $ W i (N)] En esta expresión # representa el Factor de Aprendizaje. Su función es ajustar la variación que sufren los pesos de la neurona para permitir que aprenda de forma más ! suave, sin saltos. El valor del Factor de Aprendizaje no es el mismo para todas las neuronas a entrenar. Sólo en la neurona ganadora # será el Factor de Aprendizaje completo definido como parámetro de aprendizaje. Para el resto de las neuronas que pertenecen al vecindario de la ganadora se aplica un modificador que reduce # para reducir el efecto del aprendizaje sobre las mismas. En forma matemática: % Ganadora # FactorAprendizaje " =& ' NoGanadora # FactorAprendizaje $ µ Siendo 0$%$1, definida en la clase DefaultKohonenTeacher como la variable estática DefaultKohonenTeacher.I_AM_NOT_THE_WINNER. ! Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 100 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Tabla 7: Parámetros de aprendizaje de DefaultKohonenTeacher Parámetro Tipo Valor por Defecto Descripción analysisWindow int Tamaño de la ventana utilizada por los analizadores para tomar decisiones sobre el progreso del entrenamiento. 10 constantVariation float Margen bajo el cual una variación se considera constante. 0.0001f learningRate float Factor de Aprendizaje propio de los 0.6f algoritmos basados en aprendizaje supervisado a partir de errores. maxIterations long Número de iteraciones máximo. 1000 maxMisplacedPercent float Nivel de error máximo aceptable para 0.05f detener el entrenamiento. neighbourhoodRadius int Radio de Vecindad de la neurona. 1 Tabla 8: Analizadores no compuestos de DefaultKohonenTeacher Analizador (DefaultKohonenTeacher.) Tipo Descripción Porcentaje de errores de clasificación. Esto es, el número de ejemplos que tuvieron como neurona ganadora una en la cual la clase dominante no es la suya. MISPLACED_EXAMPLES ValueDecreaseAnalyzer WEIGHT_VARIATION ValueVariationAnalyzer Variación absoluta de los pesos de las neuronas del mapa. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 101 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ e. Cálculo de los Vecindarios Una pieza clave en el aprendizaje de los Mapas de Kohonen es determinar los vecindarios de las neuronas ya que mal manejado se hubiera podido convertir en una de las tareas más costosas en tiempo y recursos. En la descripción del proceso de aprendizaje se ha visto como es necesario consultar por el vecindario de una neurona (la ganadora) por cada uno de los ejemplos del conjunto de entrenamiento, para cada una de las iteraciones. Es muy probable que la consulta se realice repetidas veces sobre la misma neurona. La única forma de minimizar el tiempo de consulta de este gran número de peticiones seguramente repetitivas es precalcular los conjuntos de vecindad. Esta operación se lleva a cabo utilizando el método + prepareNeighbourhoods(neighbourhoodRadius :int) implantado en la clase abstracta KohonenMap. El sistema de cálculo de conjuntos de vecindad se basa en cálculos lógicos básicos entre un vector y una matriz booleana. La Matriz de Conexión Directa del Mapa es una matriz booleana que posee una fila y una columna por cada una de las neuronas que forman el Mapa de Kohonen. El cruce entre una neurona y otra se marca como true, si ambas neuronas están conectadas entre si en un vecindario de radio 1. En caso contrario se marcará con false. Se obtiene de esta manera una matriz simétrica respecto a su diagonal principal, cuyos elementos siempre estarán a true: una neurona por lógica ha de ser vecina de si misma. El Vector Vecindario de una Neurona es un vector que posee un valor booleano por cada uno de las neuronas que forman el Mapa de Kohonen. Este vector tendrá siempre asociado un Radio de Vecindad. Un valor true para una posición representará que la neurona asociada a la posición se encuentra en el vecindario de la neurona a la que pertenece el vector; false en caso contrario. De esta forma el Vector de Vecindad de radio 0 sólo tendrá señalada a true la posición de la propia neurona.5 La operación matrixANDvector (Operador $) aplica cálculos lógicos sobre el Vector Vecindario de radio r de una neurona con la Matriz de Conexión Directa del 5 Las posiciones de una neurona en el vector y la matriz se corresponden con su identificador numérico, obtenido por getId(), tomado como índice. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 102 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ mapa, para obtener el Vector de Vecindario de radio r+1 de la neurona. En forma matemática: vectorr +1 (n) = vectorr (n) " matriz Visto en detalle: ! "v1n,r +1 % " v1n,r % " m1,1 m1,2 L m1, j L m1,N % $ n,r +1 ' $ n,r ' $ ' $v 2 ' $ v 2 ' $ m2,1 m2,2 L m2, j L m2,N ' $ M ' $ M ' $ M M O M M ' $ n,r +1 ' = $ n,r ' ( $ '= $v j ' $ v j ' $ mi,1 mi,2 L mi, j= j,i L mi,N ' $ M ' $ M ' $ M M M O M ' $ n,r +1 ' $ n,r ' $ ' # mN ,1 mN ,2 L mN , j L mN ,N & #v N & # v N & " v n,r +1 = (v n,r ) m ) * (v n,r ) m ) *L* (v n,r ) m ) *L* (v n,r ) m ) % 1 1 1,1 1 2,1 1 i,1 1 N ,1 $ n,r ' +1 n,r n,r n,r n,r $ v 2 = (v 2 ) m1,2 ) * (v1 ) m2,2 ) *L* (v1 ) mi,2 ) *L* (v 2 ) mN ,2 ) ' $ ' M ' = $ n,r +1 n,r n,r n,r n,r $ v j = (v j ) mi, j ) * (v j ) mi, j ) *L* (v j ) mi, j ) *L* (v j ) mN , j ) ' $ ' M $$ n,r +1 '' n,r n,r n,r n,r v = v ) m * v ) m *L* v ) m *L* v ) m ( ) ( ) ( ) ( ) N N i,N N i,N N i,N N N ,N # & ! Símbolo Descripción matriz Variable vjn,r cVector El número de atributos de cada patrón. N - Matriz de Conexiones Directas del mapa. mi,j cMatrix vectorr(n) Vector de Vecindad de la neurona n para el radio de vecindad r. N Elemento De forma textual, cada vez que se aplique el operador $ entre un Vector de Vecindad y la Matriz de Conexiones Directas lo que se está haciendo es marcar como vecinas (true en el vector) las neuronas que se encuentran en la vecindad directa de aquellas que ya estén marcadas en el vector. En el framework, se define en el método estático de la clase KohonenMap - static matrixANDvector(matrix :boolean[][], vector :boolean[]) :boolean[]. El código de la operación es el siguiente: private static boolean[] matrixANDvector(boolean[][]matrix,boolean[]vector) { Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 103 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ int i,j; boolean op; boolean[] result = new boolean[vector.length]; // Goes through all the neurons in the vector. for(i = 0; i < vector.length; i++){ op = false; for(j = 0; !op && j < vector.length; j++){ op = matrix[i][j] && vector[j]; // Basic operation } result[i] = op; } return result; } La aplicación sucesiva de esta operación sobre el vector resultante, permiten escalar el vecindario hasta cualquier Radio de Vecindad, a partir del radio más simple e inmediato de obtener: el radio 0, en el que sólo está a true la propia neurona. El único inconveniente que se plantea es la creación de la Matriz de Conexión Directa para el mapa. La conexión directa entre neuronas depende por completo de la estructura de cada mapa. Es por ello que se genera a nivel de estancia concreta de KohonenMap, utilizando el método Template Method (GoF) exigido por el contrato de esta clase abstracta + createConnectionMatrix(neuronCount :int) :boolean[][]. Los mecanismos seguidos en cada uno de los modelos se describen en el apartado siguiente. Se optó por una aproximación matricial al cálculo de los vecindarios, en lugar de emplear el algoritmo recursivo que resultaría evidente, por su mejor rendimiento. Un enfoque recursivo hubiera disparado tiempos de ejecución y consumo de recursos. Cada una de las llamadas a la función podría desencadenar en 4, 6 o hasta 8 llamadas recursivas en los modelos de red incluidos con el sistema (neuronas cuadradas, hexagonales o estrelladas respectivamente). La complejidad de este proceso tendría un crecimiento cercano al exponencial con el aumento del número de neuronas en el mapa, máxime si se introducen opciones de envoltura. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 104 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ f. Construcción de las Matrices de Conexión Directa A continuación se muestran las matrices y las pruebas que se llevaron a cabo para determinar el proceso concreto de su creación en cada uno de los tipos de mapa. En cada caso se propone un ejemplo con 30 neuronas, repartidas en 5 filas y 6 columnas. Los esquemas de los mapas se corresponden con los diseños mostrados en Ilustración 8: Wrapping de neuronas Cuadradas y Ilustración 9: Wrapping de neuronas Hexagonales, según sea la forma de la neurona. En estas matrices las casillas a 1 (verde) representan aquellas en las que una neurona se encuentra en la vecindad de otra. Las casillas con 0 o vacías (blanco) representan neuronas que no se encuentran en vecindad mutua. Bajo cada una de las tablas se representa el proceso de propagación del vecindario de una neurona desde su Vector de Vecindad de radio 0, hasta el 5. Hexagonal - Sheet (sin wrapping) 0 1 2 3 4 5 6 7 8 9 0 1 1 1 1 1 1 1 1 1 2 1 1 1 3 1 1 1 4 0 1 1 0 1 1 1 1 10 11 12 13 14 1 1 0 5 1 1 6 1 1 7 1 1 0 1 1 1 1 1 1 1 1 0 1 1 8 9 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 2 1 1 1 1 0 1 1 1 1 1 1 1 1 1 4 1 5 1 1 0 0 1 1 1 1 15 16 17 18 19 1 3 1 1 1 1 1 0 1 1 1 1 20 21 22 23 24 1 1 0 1 1 1 6 1 1 1 7 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 8 1 9 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 2 1 1 1 1 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 2 3 1 1 0 1 1 1 0 2 2 1 1 1 1 1 2 4 2 5 1 1 0 0 1 1 1 1 25 26 27 28 29 IN 1 2 3 4 5 2 0 1 1 1 1 1 0 1 1 1 1 1 1 2 6 1 1 2 7 1 1 0 1 1 1 1 0 1 1 1 1 1 1 2 8 2 9 1 1 1 1 1 1 1 1 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 105 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Hexagonal - Cylinder 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 2 1 1 1 1 1 1 3 1 1 1 4 5 1 1 1 1 1 0 1 1 1 1 1 10 11 12 13 14 1 1 0 6 7 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 1 1 1 1 1 1 1 1 1 1 1 1 15 16 17 18 19 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 2 2 3 2 4 2 5 1 1 0 2 6 2 7 2 8 2 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 20 21 22 23 24 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 26 27 28 29 IN 1 2 3 4 5 2 0 1 1 1 1 1 1 1 1 9 1 1 1 0 1 1 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 2 3 4 5 6 7 8 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 106 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Hexagonal - Toroid 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 2 1 1 1 1 1 1 3 1 1 1 4 5 1 1 1 1 1 0 1 1 1 1 1 10 11 12 13 14 1 1 0 6 7 1 1 1 1 1 1 1 1 0 1 1 1 2 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 16 17 18 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 IN 1 2 3 4 5 1 1 1 1 1 1 1 1 0 1 1 1 1 1 20 21 22 23 24 25 26 27 28 29 1 4 1 1 0 1 1 1 1 5 1 6 1 7 1 8 1 9 2 0 1 1 1 1 0 2 2 2 3 2 4 2 5 0 1 1 2 6 1 1 2 7 1 1 2 8 2 9 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 9 1 1 1 0 1 1 8 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 1 1 2 9 1 1 1 1 1 1 107 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Square - Sheet (no wrapping) 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 10 11 12 13 14 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 15 16 17 18 19 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 20 21 22 23 24 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 25 26 27 28 29 IN 1 2 3 4 5 2 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 0 0 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 108 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Square - Cylinder 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 2 1 1 1 1 3 4 5 1 1 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 10 11 12 13 14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 15 16 17 18 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 20 21 22 23 24 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 25 26 27 28 29 IN 1 2 3 4 5 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 0 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 0 0 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 109 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Square - Toroid 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 2 1 1 1 1 3 4 5 1 1 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 1 1 1 2 6 0 1 0 1 1 1 1 1 1 1 1 2 9 1 1 1 1 2 8 1 1 1 1 2 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 15 16 17 18 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 20 21 22 23 24 IN 1 2 3 4 5 1 6 1 10 11 12 13 14 25 26 27 28 29 1 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 0 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 0 0 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 110 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Star - Sheet (no wrapping) 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 1 2 1 1 1 0 1 1 1 3 1 1 1 4 5 6 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 10 11 12 13 14 1 1 0 7 1 1 1 0 1 1 1 1 1 1 1 1 9 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 8 1 1 1 1 1 0 1 1 1 1 1 1 15 16 17 18 19 1 1 0 1 1 1 1 1 1 1 1 2 1 1 1 0 1 1 1 1 1 1 1 1 1 4 1 5 1 1 1 1 1 0 0 1 1 1 0 1 1 1 3 1 1 1 1 1 0 1 1 1 1 1 1 20 21 22 23 24 1 1 0 1 1 1 6 1 1 1 1 7 1 1 1 0 1 1 1 1 1 1 1 1 1 9 2 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 8 1 1 1 0 1 1 1 1 1 1 25 26 27 28 29 IN 1 2 3 4 5 1 1 1 1 0 0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 0 1 1 1 1 1 1 1 1 2 4 2 5 1 1 1 1 1 0 0 1 1 1 0 1 1 2 3 1 1 1 1 1 0 1 1 1 1 1 2 6 1 1 1 2 7 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 2 8 2 9 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 111 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Star - Cylinder 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 1 2 1 1 1 1 1 1 1 3 1 1 1 4 5 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 11 12 13 14 1 1 0 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 1 1 1 1 1 1 1 1 1 1 1 1 15 16 17 18 19 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 20 21 22 23 24 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 26 27 28 29 IN 1 2 3 4 5 1 9 1 1 1 1 1 1 1 8 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 2 4 2 5 2 6 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 2 8 2 9 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 112 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Star - Toroid 0 1 0 1 2 3 4 1 1 1 1 1 5 6 7 8 9 1 1 2 1 1 1 1 1 1 1 3 1 1 1 4 5 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 11 12 13 14 1 1 0 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 1 0 1 1 1 2 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 15 16 17 18 19 IN 1 2 3 4 5 1 5 1 6 1 7 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 3 2 4 2 5 2 6 1 1 1 1 1 2 7 2 8 2 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 2 0 0 1 1 1 1 1 9 1 1 1 1 1 1 1 1 8 0 20 21 22 23 24 25 26 27 28 29 1 4 1 1 1 1 1 1 1 8 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 2 4 2 5 2 6 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 2 8 2 9 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 113 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ g. Serialización en XML La mayor carga de trabajo en la serialización de las Mapas de Kohonen es el almacenamiento de los pesos de cada una de las neuronas. Es en el fondo en estos pesos donde se está almacenando la información de la red. También se guardan los datos de configuración necesarios para poder reconstruirla, siguiendo la metodología de trabajo con XML anteriormente documentada. <neuralNetwork class="com.jcortex.kohonen.KohonenNeuralNetwork" neuronCount="24" sensorCount="57" inputTranslator="com.jcortex.translators.TransparentInputTranslator" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" neighbourhoodShape="1"> <kmap class="com.jcortex.kohonen.CylinderHexKMap" rows="4" columns="6"/> <neuron class="com.jcortex.kohonen.KohonenNeuron" id="0" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFuncti on" neuronCl’ass="0.0"> <entries> <entry entry="-1" weight="0.44997883"/> <entry entry="-2" weight="0.6483059"/> <entry entry="-3" weight="0.26400942"/> <entry entry="-4" weight="0.70277363"/> <entry entry="-5" weight="0.6560223"/> <entry entry="-6" weight="0.5321597"/> <entry entry="-7" weight="0.7569439"/> <entry entry="-8" weight="0.54573894"/> <entry entry="-9" weight="0.27227366"/> <entry entry="-10" weight="0.0851264"/> <entry entry="-11" weight="0.32600105"/> <entry entry="-12" weight="0.43089312"/> <entry entry="-13" weight="0.22756328"/> <entry entry="-14" weight="0.63259524"/> <entry entry="-15" weight="0.19224365"/> <entry entry="-16" weight="0.5933614"/> <entry entry="-17" weight="0.633659"/> <entry entry="-18" weight="0.114406504"/> <entry entry="-19" weight="0.22308083"/> <entry entry="-20" weight="0.46485943"/> <entry entry="-21" weight="0.21386817"/> <entry entry="-22" weight="0.5893505"/> <entry entry="-23" weight="0.26973826"/> <entry entry="-24" weight="0.32525367"/> <entry entry="-25" weight="0.16904715"/> <entry entry="-26" weight="0.59232694"/> <entry entry="-27" weight="0.14317566"/> <entry entry="-28" weight="0.9005484"/> <entry entry="-29" weight="0.7701142"/> <entry entry="-30" weight="0.36541304"/> <entry entry="-31" weight="0.45704892"/> <entry entry="-32" weight="0.24202602"/> <entry entry="-33" weight="0.63768333"/> <entry entry="-34" weight="0.62507075"/> <entry entry="-35" weight="0.5721791"/> <entry entry="-36" weight="0.5307817"/> <entry entry="-37" weight="0.42867833"/> <entry entry="-38" weight="0.69789916"/> <entry entry="-39" weight="0.744212"/> <entry entry="-40" weight="0.65122235"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 114 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ <entry entry="-41" weight="0.3038286"/> <entry entry="-42" weight="0.88952297"/> <entry entry="-43" weight="0.40145975"/> <entry entry="-44" weight="0.7137737"/> <entry entry="-45" weight="0.3893802"/> <entry entry="-46" weight="0.34767807"/> <entry entry="-47" weight="0.49127114"/> <entry entry="-48" weight="0.90430146"/> <entry entry="-49" weight="0.63695836"/> <entry entry="-50" weight="0.39226708"/> <entry entry="-51" weight="0.21518014"/> <entry entry="-52" weight="0.30000395"/> <entry entry="-53" weight="0.60939234"/> <entry entry="-54" weight="0.25245282"/> <entry entry="-55" weight="0.775401"/> <entry entry="-56" weight="0.8400013"/> <entry entry="-57" weight="0.5092916"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> <examplesClassCount class="0.0" count="3"/> </examplesInClasses> </neuron> ! Los datos de las neuronas 1 a 23 han sido omitidos. <teacher class="com.jcortex.kohonen.DefaultKohonenTeacher" learningRate="0.4" neighbourhoodRadius="1" maxIterations="500" avgDistanceAccepted="0.05" constantVariation="1.0E-4" analysisWindow="100"/> </neuralNetwork> La red serializada presenta el siguiente aspecto, tal y como lo representa el entorno de desarrollo JCortexBuilder. Ilustración 10: Ejemplo de Mapa de Kohonen Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 115 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6.4. Modelo Genérico Feed-Forward a. Descripción de la red genérica Modelo genérico que sirve como base para cualquier modelo de Red Neuronal Artificial en el que el proceso de propagación se lleve a cabo por el avance de los estímulos desde las neuronas más cercanas a los sensores (capa de entrada) hacia delante (downstream o corriente-abajo). En el caso de redes sin recurrencias, la propagación finaliza cuando el estímulo ha alcanzado – y activado – las últimas neuronas de la red, las que no tienen ningún elemento conectado a las mismas (capa de salida). Este modelo intermedio soporta a su vez la existencia de realimentación entre las neuronas de la red. En este caso la propagación finalizará cuando no se produzcan más cambios significativos en los niveles de activación de las neuronas. Sobre la arquitectura Feed-Forward, se pueden llegar a crear modelos de red simples como el ADALINE, complejos como el Perceptrón Multicapa o incluso más. b. Diseño del modelo de propagación - ToDoList Este modelo genérico carece de Maestros ya que sólo interesa plantear la funcionalidad común a todas las redes Feed-Forward: su sistema de propagación. Se toman las siguientes convenciones de nomenclatura: Sean dos neuronas, A y B, en una red Feed-Forward. Si la neurona B toma como entrada el valor de A, asignándole un peso a esta conexión; A será una entrada de B, mientras que B será un hijo de la neurona A. Por lo tanto, el flujo corriente-abajo fluirá desde A hasta B: de entradas a hijos. En un primer momento se tanteó con un sistema de propagación mucho más parecido al modelo biológico primario: las neuronas serían entidades (instancias) que, al ser procesadas, activarían las neuronas que estuvieran conectadas a ellas corrienteabajo. Si bien este sistema parece mucho más intuitivo y paralelizable, presenta grandes problemas por su tiempo de ejecución y consumo de recursos. Se puede llegar a producir una explosión de invocaciones en cadena de una neurona a la siguiente, y de ahí al siguiente nivel de conexión. Lo habitual es que una neurona tenga más de una entrada, por lo que la mayor parte de las activaciones serían en falso: la neurona realizaría sus cálculos sin disponer de toda la información de entrada Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 116 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ estable y actualizada. El problema llega a ser mucho más grave si se da cabida a la realimentación en la red, ya que daría lugar a una explosión de invocaciones sin final. El denominado Modelo Biológico fue desechado tras las primeras pruebas posteriores a su desarrollo al comprobar la gravedad de sus deficiencias en consumo de recursos y tiempo de ejecución. El sistema de propagación finalmente empleado se bautizó como Modelo ToDoList. En este sistema, el control de la propagación gira en torno a una lista de neuronas a ser procesadas. La ToDoList actúa como una cola con una política similar a la FIFO, de la cual se extrae de la cima la siguiente neurona a ser procesada, y se añade al final (cola) los hijos de las neuronas que han sido procesadas. Las neuronas Feed-Forward, modeladas a través de la clase abstracta FeedForwardNeuron, son capaces de activar conexiones sinápticas. Tal y como se describe en el 5.5.2. Relación entre AxonSource, AxonReceiver, Sensor y Neuron > a) Puntualizaciones sobre las neuronas (Neuron), el método + synapse() :Collection no sólo genera el valor de activación de la red, sino que además obtiene el conjunto de neuronas afectadas. Un final temprano – aunque exitoso – se produciría en el caso de que la entrada no generara cambios en el valor de activación de la neurona (axon value en el modelo AxonSource). Al no verse afectadas el resto de las neuronas conectadas, estas no tendrán que ser añadidas a la lista de propagación ya que, al menos en lo que corresponde a esta entrada, su valor permanecerá inalterable. La implantación proporcionada de la clase ToDoList tiene su interfaz y sistema de trabajo preparado para el uso de prioridades en forma de pesos. Para ello la lista no trabaja directamente con objetos de la clase Neuron, sino con instancias de la clase NeuronInTheList que envuelven en una misma entidad la referencia a la neurona y su peso. Es posible comparar las instancias de NeuronInTheList al haber implantado los métodos + compareTo(otherNeuron :Object) :int y + equals(otherNeuron :Object) :boolean que atienden a la prioridad e identidad de la neurona. De forma que ordenar una lista de mayor a menor prioridad es tan simple como ordenar la estructura de datos que contenga las instancias de NeuronInTheList. El criterio de prioridad se basa en los dos puntos siguientes: • A menor peso, mayor prioridad, por lo tanto más cerca estará la neurona de la cima de la ToDoList. • A igualdad de peso, la prioridad se decidirá por el menor identificador de neurona. Para tomar esta decisión se ha partido de la idea de que la numeración de las neuronas se produce desde el principio hasta el final de la red. De esta manera, en situaciones de recursividad se dará prioridad a Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 117 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ las neuronas que estén más cerca de los sensores, y cuyos cambios sea más posible que se propaguen. Dos instancias de ToDoList serán iguales cuando hagan referencia a la misma neurona. Para simplificar esta comparación sólo es necesario trabajar con los identificadores numéricos de las instancias de Neuron. Sin embargo, la implantación actual ignora el uso de prioridades. La razón es que en el sistema actual no se considera que un proceso tan costoso en tiempo como es la ordenación sistemática de una estructura de datos sea imprescindible. Más cuando esta ordenación tenga que ser llevada a cabo, en principio, al menos una vez por neurona para cada propagación. El consumo es desorbitado, por lo que a estas alturas compensa tener el sistema preparado, pero ignorar la prioridades y pagar, a cambio, algunas posibles activaciones adicionales de neuronas que podrían haberse ahorrado. Un punto importante para el funcionamiento de la ToDoList es que no se permite la presencia de neuronas duplicadas dentro de ella. En la situación actual las neuronas repetidas son ignoradas. Para acelerar este proceso en la implantación actual se incluye un vector auxiliar neuronsPresent :boolean[] que mantiene una posición para cada una de las neuronas de la red. Si la neurona está ya presente, este valor será true y false en caso contrario. En el caso de utilizar una aproximación con prioridades, se retendrá en la lista la neurona con mayor prioridad (menor peso). Para ello puede ser más cómodo que el array auxiliar sea de enteros y contenga el peso con el que la neurona está presente en la red. Para facilitar el uso de las instancias de ToDoList, esta clase implementa la interfaz Iterator. De esta manera es posible avanzar a través de la lista de neuronas por ser procesadas empleando únicamente los métodos + hasNext() :boolean y + next() :Object. En este último se ha optado por proporcionar un servicio sincronizado con vistas a futuras implantaciones paralelizadas. Los pasos a seguir en el trabajo con la ToDoList, utilizando además prioridades, son los siguientes: 1. Inicializar ToDoList con la colección de First Neurons de la red neuronal. Son aquellas neuronas que están directamente conectadas a los sensores de la red. Peso de las neuronas iniciales 0. 2. ¿Hay más elementos en la lista?: toDoList.hasNext(); 3. Obtener el elemento y realizar la sinapsis. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 118 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 4. Añadir las neuronas devueltas por la sinapsis a la lista con 5. Ordenar la ToDoList 6. Volver al paso 2. peso +1. La implantación actual, ignorando el uso de prioridades es la siguiente: // The list is prepared this.toDoList = new ToDoList(this.neurons.size()); // Starts by activating the NeuralStimulus that leads onto the first neurons this.toDoList.add(this.getConnectedNeurons(), 0); // Goes deeper into the neuron network while(this.toDoList.hasNext()){ /* Visits the first element, calculating the new neuron's value, taking * it out from the toDoList. As a result of the synapse methods it * obtains the neurons connected to this one and adds them * on to the list. */ Collection thisNeuronsChilds = ((FeedForwardNeuron) this.toDoList.next()).synapse(); this.toDoList.add(thisNeuronsChilds, -1);// Weight is ignored } Para llevar a cabo la sinapsis, las neuronas Feed-Forward utilizan dos funciones: una Función de Red para aglutinar todas las entradas en un valor único, y una Función de Activación que determina el estado de activación de la red. Estas funciones se configuran en la neurona mediante instancias de NetworkFunction y ActivationFunction respectivamente. El proceso matemático utilizado se describe a continuación: v = networkFunction( x1, x 2 ,L, x k ) y = activationFunction(v ) ! Símbolo Descripción Elemento Variable v Valor conjunto de las entradas de red. - float networkResult x El valor de las entradas a la red. xi entries.values() y Estado de activación de la neurona. - float axonValue Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 119 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Ilustración 11: Ejemplo de Propagación Feed-Forward - Sin recursividad ToDoList (cima " cola) Iteración Procesado 0 - 0, 1, 2 1 0 1, 2, 3, 4 2 1 2, 3, 4 3 2 3, 4 4 3 4, 5 5 4 5 6 5 - fin Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 120 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Ilustración 12: Ejemplo de Propagación Feed-Forward - Con recursividad ToDoList (cima " cola) Iteración Procesado 0 - 0, 1, 2 1 0 1, 2, 3, 4 2 1 2, 3, 4, 5 3 2 3, 4, 5 4 3 4, 5, 0, 6 5 4 5, 0, 6 6 5 0, 6, 2 7 0 6, 2, 3, 4 8 6 2, 3, 4 9 2 3, 4, 5 bucle a partir de … iteración 2 En el Diagrama de Clases 12: Modelo de Red Feed-Forward y Perceptrón se ha representado el contenido completo del paquete com.jcortex.feedForward, distribuido con el framework. Se ha incluido las interfaces y clases abstractas básicas del paquete principal que definen el contrato de los elementos de la red neuronal. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 121 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Clases 12: Modelo de Red Feed-Forward y Perceptrón Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 122 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6.4. Modelo Perceptrón (com.jcortex.feedForward) a. Descripción de la Red Las redes Perceptrón, formadas por una única neurona similar a la de McCullock-Pitts, se encuentran entre los primeros acercamientos a las Redes Neuronales Artificiales. Si bien al estar constituido por una única neurona poco se podría considerar una red. El sistema básico que se proporciona a través del modelo Feed-Forward se correspondería más con una neurona ADALINE, ya que esta última es realmente mucho más versátil que las Perceptrón tradicionales. Se puede configurar para su uso con distintas funciones de red y de activación. b. Diseño del modelo Para la creación de este modelo sólo ha sido preciso crear una clase para la red neuronal (PerceptronNeuralNetwork) y un Maestro capaz de educar las redes de este modelo (DefaultPerceptronTeacher). Estas clases pueden apreciarse en el Diagrama de Clases 12: Modelo de Red Feed-Forward y Perceptrón, situado en el apartado anterior. El constructor de PerceptronNeuralNetwork se encarga por su cuenta de crear una neurona Perceptrón pura a partir de la versátil que ofrece el modelo genérico Feed-Forward. Dentro de las posibilidades que ofrece la neurona FeedForwardNeuron, la red impone: • Al ser la única neurona su identificador será 0. • La Función de Red será una LinearBasisFunction. • La Función de Activación será una StepFunction con umbral en 0,5. Esta única neurona será a la vez first neuron, por estar conectada a los sensores, y end neuron por ser la que proporciona la salida a la red. c. Propagación La propagación se realiza sobre el modelo genérico Feed-Forward del que heredan todos los elementos de red de este modelo. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 123 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ d. Maestro DefaultPerceptronTeacher El maestro por defecto suministrado con el framework JCortex emplea, para la educación de la red Perceptrón una implantación del Algoritmo de Adaptación de Pesos. Este algoritmo se basa en ajustar los parámetros de la neurona (los pesos asociados a sus conexiones de entrada) a partir de los errores producidos al paso de un conjunto de ejemplos. Para más información consultar la descripción del método + educateNetwork(:NeuralNetwork, :Object[], :Object[]) :Statistics de la clase DefaultPerceptronTeacher en el Anexo A: Documentación de la API – JCortex. Tabla 9: Parámetros de aprendizaje de DefaultPerceptronTeacher Parámetro Tipo Descripción Valor por Defecto acceptableError float Máximo error admisible para finalizar 0.05f el entrenamiento. analysisWindow int Tamaño de la ventana utilizada por los analizadores para tomar decisiones sobre el progreso del entrenamiento. 10 constantVariation float Margen bajo el cual una variación se considera constante. 0.0001f learningRate float Factor de Aprendizaje propio de los 0.5f algoritmos basados en aprendizaje supervisado a partir de errores. maxIterations long Número de iteraciones máximo. 1000 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 124 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Tabla 10: Analizadores no compuestos de DefaultPerceptrónTeacher Analizador (DefaultPerceptronTeacher.) Tipo Descripción TRAINING_ERROR ValueDecreaseAnalyzer Error cuadrático medio de Entrenamiento. VALIDATION_ERROR ValueDecreaseAnalyzer Error cuadrático medio de Validación. WEIGHT_VARIATION ValueVariationAnalyzer Variación absoluta de los pesos de las neuronas del mapa. f. Serialización en XML La serialización de este modelo de red es muy sencilla y rápida, ya que sólo necesita almacenar la configuración de una única neurona. <neuralNetwork class="com.jcortex.feedForward.PerceptronNeuralNetwork" inputTranslator="com.jcortex.translators.TransparentInputTranslator" neuronCount="1" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" sensorCount="2"> <neuron activationFunction="com.jcortex.activationFunctions.StepFunction" activationParamsCount="1" class="com.jcortex.feedForward.FeedForwardNeuron" id="0" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="0.5"/> </parameters> <entries> <entry id="-1" weight="-28.797607"/> <entry id="-2" weight="20.38462"/> </entries> </neuron> <firstNeurons size="1"> <neuronRef id="0"/> </firstNeurons> <endNeurons size="1"> <neuronRef id="0"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 125 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ </endNeurons> <teacher acceptableError="0.05" analysisWindow="10" class="com.jcortex.feedForward.DefaultPerceptronTeacher" constantVariation="1.0E-4" learningRate="0.5" maxIterations="500" validationPercent="0.2"/> </neuralNetwork> La red serializada presenta el siguiente aspecto, tal y como lo representa el entorno de desarrollo JCortexBuilder. Ilustración 13: Ejemplo de Red Perceptrón Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 126 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.6.5. Modelo Preceptrón Multicapa (com.jcortex.backPropagation) a. Descripción de la Red La Red Perceptrón Multicapa es la red Back-Propagation por excelencia. Es un de los modelos de red más ampliamente utilizados en la industria. Formalmente, el Perceptrón Multicapa es una red Feed-Forward a la que se le han añadido unas funcionalidades especiales para poder realizar un aprendizaje utilizando retropropagación. Esto significa que a través de los elementos de la red viajarán dos tipos de señales: • Señales de Función: señales de entrada que se propagan a lo largo de la red desde la entrada hasta la salida. • Señales de Error: señales que se originan en la capa de salida y se propagan hacia la entrada durante el proceso de entrenamiento. Las neuronas de la red Perceptrón Multicapa se organizan, como su propio nombre indica, en múltiples capas completamente conectadas entre si en cadena. Una capa sólo tiene acceso a la inmediatamente anterior y la inmediatamente posterior. Los sensores pueden considerarse como la primera capa, previa a la capa se entrada, y las end neurons pueden ser consideradas como la capa de salida. El resto de las capas intermedias se denominan capas ocultas. Este modelo representa una red completamente conectada (fully-connected), lo que significa que cada neurona toma como entradas todas las neuronas de la capa anterior, y es a su vez entrada para todas las neuronas de la capa siguiente. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 127 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ b. Diseño del modelo La implantación de este modelo de red neuronal artifical sólo requiere tres clases, que extiendan las proporcionadas por el modelo intermedio Feed-Forward. El modelo Perceptrón Multicapa no deja de ser un sistema de neuronas de propagación hacia delante, con unas funciones e información adicionales que les permita propagar el error en sentido contrario para su aprendizaje. Las clases de este modelo están representadas en el Diagrama de Clases 13: Modelo de Red Perceptrón Multicapa, en el que también se representa sus relaciones con las clases Feed-Forward y del paquete principal. La clase MultilayerPerceptronNeuralNetwork extiende FeedForwardNeuralNerwork, lo que le proporciona todas las características y atribuciones de NeuralNetwork. El modelo intermedio Feed-Forward proporciona todas las funcionalidades relacionadas con el funcionamiento y propagación de la red. La única responsabilidad ha de acatar esta clase es la gestión de su estructura interna, lo que incluye su creación, almacenamiento y recuperación. El sistema de capas en que se organiza la red Perceptrón Multicapa se recoge dentro de la estructura de datos – neuronLayers :BackPropagationNeuron[][] . El acceso a las neuronas concretas se lleva a cabo mediante dos índices [i][j]: el primero indica la capa, mientras que el segundo identifica a la neurona concreta de la capa. Este esquema de almacenamiento aprovecha las características propias del lenguaje JAVA, por el cual la variable neuronLayer[i] realmente hace referencia a un array de tipo BackPropagationNeuron[] de cualquier dimensión. Es importante resaltar que al contrario de otros lenguajes cuyas matrices multidimensionales están forzadas a poseer el mismo tamaño en todas sus conjuntos de elementos (n-1)-dimensionales, en Java estas estructuras se ajustan al tamaño justo, a pesar de trabajar con capas de tamaño muy dispar. Se ha de tomar en consideración a su vez que la almacenada en la estructura de capas no es la única referencia que la red neuronal posee de la neurona. A nivel de NeuralNetwork las neuronas se almacenan en el interior de una lista List que permite un acceso directo cuando se requiere una neurona por su identificador. El propio constructor de la red Perceptron Multicapa se encarga de crear las neuronas preparadas para la retropropagación, situarlas en el esquema de capas, conectarlas completamente con la capa anterior, almacenarlas en la lista conjunta del nivel superior y dar de alta las últimas como end neurons. Las neuronas BackPropagationNeuron extienden también el concepto de neurona implantado a nivel de red Feed-Forward. En este nuevo nivel de especialización, la neurona adquiere las características necesarias para participar del Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 128 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ aprendizaje por retropropagación. La neurona adquiere la capacidad de calcular su gradiente y almacenarlo. Para ello se recurre a los siguientes métodos: • + getGradient() :float. Obtiene el último valor de gradiente calculado por la neurona. • + calculateGradient(desired_output :float) :float. Calcula el gradiente para las neuronas de la capa de salida. Sólo en estas es posible indicar cuál debía haber sido la salida deseada y, con ella, calcular el error cometido por la neurona. Esta medida de error es la utilizada para realizar el ajuste de los pesos de la neurona. • + calculateGradient() :float. Las neuronas que se encuentran en una de las capas ocultas no pueden conocer durante el proceso de entrenamiento cuál es la salida que se supone debían producir. Su error ha de ser calculado mediante los gradientes de sus neuronas hijas para poder tener una pista de qué sentido e intensidad ha de tener el ajuste de los pesos. Éste método no recibe parámetros ya que ha de ser la propia neurona la que construya su gradiente a partir de los gradientes de aquellas para las cuales esta es una entrada. Para poder calcular el gradiente de una neurona, es preciso que su Función de Activación no sea simplemente una instancia de tipo ActivationFunction, sino que ha de ser una especialización de esta: BackPropagationActivationFunction. Son estas últimas las que poseen los mecanismos necesarios para calcular la derivada de la Función de Activación, imprescindible para obtener el valor del gradiente. La clase DefaultMultilayerPerceptronTeacher modela el maestro por defecto para esta red. Como todos los maestros en JCortex hereda directamente de la clase Teacher. El proceso de entrenamiento de una red Perceptrón Multicapa es largo y complejo, como se describe en el apartado d. Maestro DefaultMultilayerPerceptronTeacher. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 129 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Diagrama de Clases 13: Modelo de Red Perceptrón Multicapa c. Propagación La propagación se realiza sobre el modelo genérico Feed-Forward del que heredan todos los elementos de red de este modelo. d. Maestro DefaultMultilayerPerceptronTeacher El maestro proporcionado por defecto para el modelo de red Perceptrón Multicapa es una implantación del algoritmo de Aprendizaje Supervisado por Adaptación de Pesos basado en el mecanismo de Retropropagación. Este algoritmo se basa en ajustar los parámetros de la neurona (los pesos asociados a sus conexiones de entrada) a partir de los errores producidos al paso de un conjunto de ejemplos, utilizando el mecanismo de retropropagación para alcanzar las neuronas de las capas ocultas. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 130 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Para más información consultar la descripción del método + educateNetwork(:NeuralNetwork, :Object[], :Object[]) :Statistics de la clase DefaultMultilayerPerceptronTeacher en el Anexo A: Documentación de la API – JCortex. Tabla 11: Parámetros de aprendizaje de DefaultMultilayerPerceptronTeacher Parámetro Tipo Valor por Defecto Descripción acceptableError float Máximo error admisible para finalizar 0.05f el entrenamiento. analysisWindow int Tamaño de la ventana utilizada por los analizadores para tomar decisiones sobre el progreso del entrenamiento. 10 constantVariation float Margen bajo el cual una variación se considera constante. 0.0001f learningRate float Factor de Aprendizaje propio de los 0.5f algoritmos basados en aprendizaje supervisado a partir de errores. maxIterations long Número de iteraciones máximo. 1000 Tabla 12: Analizadores no compuestos de DefaultMultilayerPerceptrónTeacher Analizador (DefaultMultilayerPerceptronTeacher.) TRAINING_ERROR Tipo ValueDecreaseAnalyzer Descripción Error cuadrático medio de Entrenamiento. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 131 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Error cuadrático medio de Validación. VALIDATION_ERROR ValueDecreaseAnalyzer WEIGHT_VARIATION ValueVariationAnalyzer Variación absoluta de los pesos de las neuronas del mapa. e. Serialización en XML Ejemplo de archivo generado para una red neuronal Perceptrón Multicapa de dos capas con 2 neuronas en la capa de entrada y una neurona en la capa de salida, representada en la Ilustración 14. El código XML se muestra sin los nodos raiz correspondientes a la definición del documento y descritos en el apartado 5.2.3. Metodología de trabajo con XML > c) Formato básico de los documentos XML generados por JCortex. <neuralNetwork class="com.jcortex.backPropagation.MultilayerPerceptronNeuralNetwork" inputTranslator="com.jcortex.translators.TransparentInputTranslator" neuronCount="3" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" sensorCount="2"> <layers count="2"> <layer ix="0" size="2"/> <layer ix="1" size="1"/> </layers> <neuron activationFunction="com.jcortex.activationFunctions.SigmoidalFunction" activationParamsCount="1" class="com.jcortex.backPropagation.BackPropagationNeuron" id="0" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="0.5"/> </parameters> <entries> <entry id="-1" weight="2.7147276"/> <entry id="-2" weight="0.997935"/> </entries> </neuron> <neuron activationFunction="com.jcortex.activationFunctions.SigmoidalFunction" activationParamsCount="1" class="com.jcortex.backPropagation.BackPropagationNeuron" id="1" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="0.5"/> </parameters> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 132 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ <entries> <entry id="-1" weight="2.645915"/> <entry id="-2" weight="1.3748711"/> </entries> </neuron> <neuron activationFunction="com.jcortex.activationFunctions.SigmoidalFunction" activationParamsCount="1" class="com.jcortex.backPropagation.BackPropagationNeuron" id="2" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="0.5"/> </parameters> <entries> <entry id="1" weight="6.2097344"/> <entry id="0" weight="6.0428324"/> </entries> </neuron> <firstNeurons size="2"> <neuronRef id="0"/> <neuronRef id="1"/> </firstNeurons> <endNeurons size="1"> <neuronRef id="2"/> </endNeurons> <teacher acceptableError="0.05" analysisWindow="50" class="com.jcortex.backPropagation.DefaultMultilayerPerceptronTeacher" constantVariation="1.0E-4" learningRate="0.4" maxIterations="500" validationPercent="0.2"/> </neuralNetwork> Ilustración 14: Ejemplo de Red Perceptrón Multicapa Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 133 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5.7. Estudio de Optimización Los estudios de optimización realizados a lo largo del proceso de desarrollo del framework han permitido identificar las actividades más costosas y minimizar el tiempo de proceso. Han sido realizados sobre los métodos de aprendizaje de los maestros asociados a cada modelo de Red Neuronal Artificial. Esta decisión se tomó con la idea de reducir al máximo el tiempo de la tarea tradicionalmente más pesada (el entrenamiento de la red). Además, un entrenamiento supone a menudo gran cantidad de pruebas dentro de la red, por lo que los procesos de propagación pueden ser estudiados de una manera inmejorable. Se ha seguido un proceso iterativo en el que se sucedía los análisis de optimización con el rediseño de los métodos de pensamiento y entrenamiento. Los resultados generados en los sucesivos estudios resultaron de gran utilidad a la hora de afinar las estructuras de datos empleadas en las distintas tareas, ajustar los caminos de ejecución, y centrar los esfuerzos de optimización en las tareas más repetitivas y pesadas. En los apartados siguientes 5.7.1. Entrenamiento de un Perceptrón Multicapa y 5.7.2. Entrenamiento de un Mapa de Kohonen se muestra el volcado generado por la herramienta de profile Shark del aprendizaje de estos dos modelos de red. En estos informes los métodos no se muestran en orden cronológico de invocación, sino de acuerdo con su tiempo de ejecución. Ambos análisis se realizaron sobre una máquina RISC PowerPC G4 a 1,67GHz con 512 MB de RAM, sobre Mac OS X 10.4. Las pruebas se realizaron lanzando los procesos de entrenamiento sobre el entorno de desarrollo JCortexBuilder, por lo que en ocasiones se pueden observar métodos ejecutados sobre elementos de la interfaz. Estas llamadas, aunque no sean visibles, son comunes en las notificaciones de los StatsListeners. 5.7.1. Entrenamiento de un Perceptrón Multicapa # + | | | | | | | | | | | | | | Generated from the visible portion of the outline view 14113.4 ms Thread:run (java.lang) + 14113.4 ms TeachInAThread:run (com.jcortex.builder) | + 14113.4 ms DefaultMultilayerPerceptronTeacher:educateNetwork (...backProp...) | | + 7470.2 ms BackPropagationNeuron:calculateGradient (...jcortex.backPropagation) | | | + 5856.0 ms FeedForwardNeuron:getEntryWeight (com.jcortex.feedForward) | | | | 718.3 ms Hashtable:get (java.util) | | | 760.4 ms AbstractList:iterator (java.util) | | | 471.2 ms AbstractList$Itr:hasNext (java.util) | | | 36.0 ms AbstractList$Itr:next (java.util) | | | 0.4 ms FeedForwardNeuron:getActivationFunction (com.jcortex.feedForward) | | + 4804.7 ms FeedForwardNeuralNetwork:pureThink (com.jcortex.feedForward) | | | + 2445.4 ms Neuron:synapse (com.jcortex) | | | | + 2403.1 ms FeedForwardNeuron:produceAxonValue (com.jcortex.feedForward) | | | | | + 1976.7 ms LinearBasisFunction:getSolution (com.jcortex.networkFunctions) | | | | | | - 692.0 ms Collections$SynchronizedCollection:iterator (java.util) Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 134 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | + | | + | | | | | | | + | | | | + | + | | | | | - 490.7 ms Hashtable$Enumerator:hasNext (java.util) | | 363.6 ms Hashtable$Enumerator:next (java.util) | + 376.3 ms SigmoidalFunction:getSolution (com.jcortex.activationFunctions) | | - 376.3 ms Math:exp (java.lang) 2133.1 ms ToDoList:add (com.jcortex.feedForward) 471.4 ms AbstractList$Itr:hasNext (java.util) 442.5 ms AbstractList:iterator (java.util) - 404.4 ms LinkedList:add (java.util) 43.5 ms AbstractList$Itr:next (java.util) 79.9 ms ToDoList:nextElement (com.jcortex.feedForward) - 77.5 ms LinkedList:remove (java.util) 55.9 ms ToDoList:<init> (com.jcortex.feedForward) 13.7 ms 0x514d1100000138 [unknown] (Unknown Library) - 6.9 ms Arrays:fill (java.util) - 0.3 ms LinkedList:<init> (java.util) 14.4 ms ToDoList:hasMoreElements (com.jcortex.feedForward) 6.8 ms AbstractList:iterator (java.util) 5.7 ms Collections$SynchronizedCollection:size (java.util) 1.5 ms AbstractList$Itr:hasNext (java.util) 485.0 ms Collections$SynchronizedCollection:iterator (java.util) 385.4 ms Hashtable$Enumerator:hasNext (java.util) 338.9 ms Hashtable$Enumerator:next (java.util) 138.4 ms Statistics:addRegister (com.jcortex) + 137.3 ms Statistics:notifyUpdate2Listeners (com.jcortex) | - 80.5 ms TrainingProgressRepresentation:statsUpdate (com.jcortex.builder) | - 37.5 ms StatsMeasureXYGraphJPanel:statsUpdate (...jcortex.builder.reports) | - 19.3 ms JReportFrame:statsUpdate (com.jcortex.builder) 75.5 ms Statistics:finishedStats (com.jcortex) + 75.5 ms Statistics:notifyEnd2Listeners (com.jcortex) | - 75.5 ms JReportFrame:statsClosed (com.jcortex.builder) 22.4 ms FeedForwardNeuron:getEntries (com.jcortex.feedForward) 13.8 ms ComposedProgressAnalyzer:isProgressGoodEnough (com.jcortex) + 13.4 ms ValueDecreaseAnalyzer:isProgressGoodEnough (com.jcortex) | - 12.6 ms StringBuffer:append (java.lang) 0.3 ms LinkedList$ListItr:hasNext (java.util) 5.7.2. Entrenamiento de un Mapa de Kohonen + | | | | | | | | | | | | | | | 11856.0 ms Thread:run (java.lang) + 11856.0 ms TeachInAThread:run (com.jcortex.builder) | + 11856.0 ms DefaultKohonenTeacher:educateNetwork (com.jcortex.kohonen) | | + 9082.2 ms KohonenNeuralNetwork:pureThink (com.jcortex.kohonen) | | | + 8764.6 ms KohonenMap:pureThink (com.jcortex.kohonen) | | | | + 8198.2 ms KohonenNeuron:produceAxonValue (com.jcortex.kohonen) | | | | | 7972.2 ms EuclideanDistanceFunction:getDistance (...distanceFunctions) | | | | - 208.4 ms AbstractList$Itr:next (java.util) | | | | 190.6 ms AbstractList$Itr:hasNext (java.util) | | | | - 79.1 ms Default2DKMap:iterator (com.jcortex.kohonen) | | 1971.1 ms KohonenNeuron:learnFromLastInput (com.jcortex.kohonen) | | + 370.9 ms Statistics:addRegister (com.jcortex) | | | - 357.1 ms Statistics:notifyUpdate2Listeners (com.jcortex) | | | + 5.7 ms StatsMeasure:addRegister (com.jcortex) | | | | 1.3 ms Math:max (java.lang) | | | | 1.3 ms Vector:add (java.util) Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 135 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | + | + | | | | + | | | | | - 3.1 ms Collections$SynchronizedMap:get (java.util) 1.1 ms StatsRegister:<init> (com.jcortex) 154.3 ms KohonenNeuron:registerLastExampleClass (com.jcortex.kohonen) 34.8 ms Hashtable:put (java.util) 15.0 ms Hashtable:containsKey (java.util) 8.8 ms Hashtable:get (java.util) 110.0 ms Statistics:finishedStats (com.jcortex) - 110.0 ms Statistics:notifyEnd2Listeners (com.jcortex) 50.9 ms AbstractSequentialList:iterator (java.util) 13.9 ms KohonenNeuron:getClusterErrors (com.jcortex.kohonen) - 7.0 ms Collections$SynchronizedCollection:iterator (java.util) 3.1 ms Hashtable$Enumerator:next (java.util) - 1.8 ms Hashtable$Enumerator:hasNext (java.util) - 0.3 ms KohonenNeuron:getClusterSuccesses (com.jcortex.kohonen) 7.8 ms AbstractList$Itr:next (java.util) 6.4 ms KohonenNeuron:clearExamplesInClasses (com.jcortex.kohonen) 5.7 ms ComposedProgressAnalyzer:isProgressGoodEnough (com.jcortex) + 1.9 ms ValueDecreaseAnalyzer:isProgressGoodEnough (com.jcortex) | 0.9 ms LinkedList:size (java.util) | 0.3 ms LinkedList:add (java.util) + 1.6 ms AbstractSequentialList:iterator (java.util) | - 1.6 ms AbstractList:listIterator (java.util) 4.1 ms AbstractList$Itr:hasNext (java.util) + 2.8 ms KohonenNeuralNetwork:getBestNeighbourhood (com.jcortex.kohonen) | 2.8 ms KohonenMap:getNeighbours (com.jcortex.kohonen) - 0.4 ms Collections$SynchronizedCollection:iterator (java.util) 5.7.3. Resultados de los análisis mostrados Los ejemplos anteriores muestran una tendencia muy buena en el entrenamiento de las redes: el proceso de aprendizaje dedica prácticamente la totalidad de su tiempo a los cálculos imprescindibles. Como cálculos imprescindibles se consideran las operaciones matemáticas esenciales incluidas en los algoritmos de aprendizaje, así como las tareas imprescindibles de gestión y avance a través de listas. En todo momento se ha procurado evitar que acciones auxiliares absorban el tiempo de entrenamiento. Como acciones auxiliares pueden ser la recogida de estadísticas, su análisis, la selección de la clase dominante gestión y consulta de estructuras de datos, respuesta a las notificaciones, y otras tareas adicionales que no forman parte del algoritmo matemático puro. Es agradable observar como en el caso del Perceptrón Multicapa, el efecto descrito anteriormente se manifiesta en que las barras de tiempos más altas con diferencia son las que recogen el acumulado de los tiempos de propagación de los ejemplos por la red y entrenamiento. Es comprensible que el entrenamiento sea una labor pesada si se tiene en cuenta la complejidad matemática e iterativa del algoritmo de retropropagación del error que requiere una gran carga de cálculos. Por otro lado el tiempo dedicado a las tareas estadísticas y otras auxiliares es ridículo en comparación. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 136 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ El mismo efecto se produce en el entrenamiento de los Mapas de Kohonen. En el ejemplo se muestra como la mayor parte del tiempo se dedica, con diferencia, al proceso de propagación del estímulo dentro de la red. Esto se debe a que se ha de calcular la distancia entre el ejemplo recibido y los pesos de la neurona en todas y cada una de las neuronas para todas las iteraciones. Este cálculo incluye una raíz cuadrada que añade un punto de complejidad al cálculo matemático. En comparación el resto de tiempos resulta ínfimo. Más, si se tiene en cuenta que en el acumulado de Estadísticas&Clase se está recogiendo también el proceso de selección de la clase dominante. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 137 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6. Desarrollo del IDE JCortexBuilder Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 138 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6.1. El IDE JCortexBuilder JCortexBuilder es el perfecto compañero para el framework JCortex. Permite con una interfaz gráfica clara e intuitiva crear, educar, utilizar, y exportar a proyectos de Java soluciones basadas en Redes Neuronales Artificiales. JCortexBuilder proporciona un gran número de ventajas y facilidades para los desarrolladores de Java. Desde la posibilidad de realizar entrenamientos simultáneos en busca del mejor resultado, personalizar los elementos de desarrollo e, incluso, facilitar la documentación de las redes creadas. Una idea ha de estar muy clara: rara vez un usuario empezará a usar el framework JCortex por sus bondades (aunque hay que tener cuidado porque seguro que dejará de hacerlo si considera que tiene defectos), pero sí que se podría interesar por el a la vista de un entorno de desarrollo fácil, dinámico y potente. JCortex tendrá que muy bueno para poder defenderse en entornos muy exigentes, pero será JCortexBuilder el que venda el sistema. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 139 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6.2. Diseño del Entorno de Desarrollo JCortexBuilder El entorno de desarrollo JCortexBuilder ha sido creado como una adaptación limpia del framework a una interfaz gráfica. Limpia significa que en ningún momento se ha lastrado el framework con responsabilidades que no le pertenecieran sólo para simplificar el funcionamiento del entorno de desarrollo. Se procura mantener un framework lo más puro e independiente posible. En contrapartida, se complica el diseño de JCortexBuilder, necesitando un amplio abanico de adaptadores y clases intermedias. El entorno de desarrollo ha sido construido con la idea clara de convertirse en la prueba de fuego definitiva para el framework. Por sus requisitos, es un entorno muy exigente que además ha facilitado en gran medida la creación misma de JCortex. Sin un entorno de desarrollo disponible no se hubiera podido llevar a cabo el gran número de pruebas y ensayos recogidos en la planificación. Ha sido además concebido con la idea de ser agradable para un programador – especialmente uno de Java – que no desea adentrarse en las interioridades matemáticas del sistema. A continuación se destacan otras características relevantes de JCortexBuilder, ya sea por su utilidad, por las posibilidades que abren, o por su importancia técnica. • Internacionalización y Localización. El entorno de desarrollo JCortexBuilder se encuentra completamente internacionalizado mediante un sistema de Resource Bundles. Utiliza el mismo sistema recomendado por JCortex (ver: 5.5.8. Internacionalización y localización). El bundle principal, messages.properties, se encuentra en com.jcortex.builder y contiene la lengua inglesa. La distribución actual contiene también la localización de Español-Castellano. • Adaptable a personalizaciones y evolución de JCortex. JCortexBuilder ha sido creado para ser capaz de adaptarse a la evolución del framework JCortex, así como a las personalizaciones del usuario. Prácticamente todas las listas disponibles en la interfaz sobre traductores, funciones, maestros, modelos de red, etc. son gestionables, para que cada usuario pueda añadir y utilizar sus propias soluciones a través del framework. Todos pueden ser configurados a través del archivo de configuración XML mantenido por la aplicación. • Sistema de creación de asistentes integrado. Una de las mayores potencialidades de JCortexBuilder reside en la posibilidad de simplificar al máximo el proceso de creación de una red empleando para ello un asistente. De hecho, también el proceso de creación de un asistente es cómodo y sencillo ya que JCortex ofrece la clase abstracta AbstractAssistanJDialog que proporciona las funcionalidades básicas y características de Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 140 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ personalización requeridas para construir rápidamente un asistente integrado con la aplicación. • Almacenamiento de imágenes. Todas las imágenes generadas con el entorno JCortexBuilder pueden ser almacenadas como archivos .png. Esta es una gran ventaja para los programadores que, una vez que han creado y entrenado una red, se enfrentan a la obligación de documentarla y justificarla. • Almacenamiento y recuperación de Redes Neuronales. JCortexBuilder exprime al máximo esta característica del framework JCortex, proporcionando una interfaz sencilla para almacenar e inspeccionar archivos XML que contengan la configuración de redes neuronales. • Permite exportar la red neuronal al proyecto de Java. El fin último de este entorno de desarrollo y este framework es proporcionar soluciones útiles para problemas reales. Es importante, por tanto, que exista la posibilidad de que el sistema guíe al usuario en el proceso de trasladar el framework y la red neuronal creada al proyecto en el que será utilizada. Todas las clases del entorno de desarrollo JCortexBuilder pueden ser distribuidas junto con JCortex, dentro del paquete com.jcortex.builder. A continuación se muestran los paquetes de esta aplicación, junto con las clases que los componen. No se han representado las clases internas ni abstractas muy comunes en las interfaces gráficas. com.jcortex.builder AboutTheBox AbstractAssistantJDialog AbstractNetworkJSettingsPanel Contiene clases genéricas para las ventanas y elementos auxiliares. ConfigParameters DataReadingUtilities ExportAssistant ImageUtilities InterpretTools JARTools JCortexBuilder JCortexJDesktopPane JReportFrame JTeacherSettingsPanel Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 141 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ JToolBoxFrame JTrainingProgressPanel JWorkBenchFrame Messages NeuralNetworkCanvas NeuralNetworkModel ReadAttribute TaggedElementModel TaggedElementWrapper TeachInAThread TrainingProgressRepresentation com.jcortex.builder.addons.backPropagation LayerRow LayersTableModel MultilayerPerceptronCanvas MultilayerPerceptronJSettingsPanel Contiene las clases de que representan y adaptan el modelo de red Perceptrón Multicapa distribuido con el framework JCortex. com.jcortex.builder.addons.hopfield HopfieldCanvas HopfieldJSettingsPanel Contiene las clases de que representan y adaptan el modelo de red de Hopfield distribuido con el framework JCortex. com.jcortex.builder.addons.kohonen KohonenCanvas KohonenJSettingsPanel Contiene las clases de que representan y adaptan el modelo de Mapas de Kohonen distribuido con el framework JCortex. com.jcortex.builder.addons.perceptron PerceptronCanvas PerceptronJSettingsPanel Contiene las clases de que representan y adaptan el modelo de red Perceptrón distribuido con el framework JCortex. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 142 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ com.jcortex.builder.gui AbstractComponentWrapper BooleanCheckWrapper FloatTextWrapper Contiene las elementos y adaptadores utilizados en las ventanas y otras partes de la interfaz gráfica. HTMLTextPane ImageFileFilter ImagesJPanel IntegerTextWrapper JOpenFileComponent JSaveFileComponent LongTextWrapper ShortTextWrapper SpringUtilities XMLFileFilter com.jcortex.builder.reports AbstractXYGraphJPanel FloatArrayXYGraphJPanel StatsMeasureXYGraphJPanel Clases propias de los informes. Por ahora contiene exclusivamente las que conforman el sistema de gráficas para los analizadores de progreso de los entrenamientos. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 143 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6.1.1. Adaptación de un modelo de red a JCortexBuilder La adaptación de un modelo de red neuronal a su uso en JCortexBuilder se realiza simplemente extendiendo dos clases: • AbstractNetworkJSettingsPanel. Su subclases se encargan de mostrar el JPanel en el que se definirán los parámetros de creación de una red neuronal, para posteriormente extraer la información necesaria y crear la instancia de NeuralNetwork adecuada. Se ha optado por personalizar la configuración de una red ya que, si bien es una tarea añadida importante, ofrece una enorme versatilidad para la comunicación y para lograr que el uso del modelo de red sea amigable con el usuario. • NeuralNetworkCanvas. Sus subclases se encargan de dibujar la red neuronal, es decir, representar la red con la que se está trabajando sobre un JPanel. La referencia a estas clases se recoge dentro de JCortexBuilder en una colección de instancias de NeuralNetworkModel. Estas instancias son creadas en la carga del archivo de configuración de la aplicación y definen la red, su información descriptiva, las dos clases anteriormente descritas a las que recurrirá la interfaz, y una lista de maestros disponibles para ese modelo de red. No es necesario crear una interfaz para los maestros, ya que JCortexBuilder analizará automáticamente los parámetros de entrenamiento de las instancias de Teacher, mostrando los campos para el tipo requerido en cada caso. Esta representación se afronta de forma automatizada ya que requiere menos pericia artística que la configuración de una red y será habitual el uso de numerosos maestros distintos para un mismo modelo. Por defecto, JCortexBuilder soporta los modelos de red y los maestros proporcionados con el framework JCortex. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 144 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6.1.2. Archivo de configuración El archivo de configuración es cargado por la aplicación en el arranque. En caso de que no exista, se crea uno nuevo copiando el archivo por defecto contenido en el paquete com.jcortex.builder. Los modelos de red configurados, las funciones y los traductores disponibles son los elementos básicos que forman este archivo. El archivo de configuración por defecto tiene la siguiente forma para la versión ALPHA 0.02: <JCortexBuilder> <neuralNetworkModels> <nnModel name="Hopfield" version="1.0b" class="com.jcortex.hopfield.HopfieldNeuralNetwork" settingsPanel="com.jcortex.builder.addons.hopfield.HopfieldJSettings Panel" canvas="com.jcortex.builder.addons.hopfield.HopfieldCanvas"> <teacherModel name="Default Teacher" class="com.jcortex.hopfield.DefaultHopfieldTeacher"/> </nnModel> <nnModel name="Kohonen" version="1.0b" class="com.jcortex.kohonen.KohonenNeuralNetwork" settingsPanel="com.jcortex.builder.addons.kohonen.KohonenJSettingsPa nel" canvas="com.jcortex.builder.addons.kohonen.KohonenCanvas"> <teacherModel name="Default Teacher" class="com.jcortex.kohonen.DefaultKohonenTeacher"/> </nnModel> <nnModel name="Multilayer Perceptron" version="1.0b" class="com.jcortex.backPropagation.MultilayerPerceptronNeuralNetwork " settingsPanel="com.jcortex.builder.addons.backPropagation.Multilayer PerceptronJSettingsPanel" canvas="com.jcortex.builder.addons.backPropagation.MultilayerPercept ronCanvas"> <teacherModel name="Default Teacher" class="com.jcortex.backPropagation.DefaultMultilayerPerceptronTea cher"/> </nnModel> <nnModel name="Perceptron" version="1.0b" class="com.jcortex.feedForward.PerceptronNeuralNetwork" settingsPanel="com.jcortex.builder.addons.perceptron.PerceptronJSett ingsPanel" canvas="com.jcortex.builder.addons.perceptron.PerceptronCanvas"> <teacherModel name="Default Teacher" class="com.jcortex.feedForward.DefaultPerceptronTeacher"/> </nnModel> </neuralNetworkModels> <activationFunctions> <function name="Gaussian Function" class="com.jcortex.activationFunctions.GaussianFunction" /> <function name="Hyperbolic Function" class="com.jcortex.activationFunctions.HyperbolicTangentFunction" /> <function name="Identity Function" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 145 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ class="com.jcortex.activationFunctions.IdentityFunction" /> <function name="Sigmoidal Function" class="com.jcortex.activationFunctions.SigmoidalFunction" /> <function name="Sign Function" class="com.jcortex.activationFunctions.SignFunction" /> <function name="Step Function" class="com.jcortex.activationFunctions.StepFunction" /> </activationFunctions> <distanceFunctions> <function name="Euclidean Distance" class="com.jcortex.distanceFunctions.EuclideanDistanceFunction" /> </distanceFunctions> <networkFunctions> <function name="Linear Basis Function" class="com.jcortex.networkFunctions.LinearBasisFunction" /> <function name="Radial Basis Function" class="com.jcortex.networkFunctions.RadialBasisFunction" /> </networkFunctions> <inputTranslators> <translator name="Transparent Input Translator" class="com.jcortex.translators.TransparentInputTranslator" /> </inputTranslators> <outputTranslators> <translator name="Single Boolean Output Translator" class="com.jcortex.translators.SingleBooleanOutputTranslator" /> <translator name="Transparent Output Translator" class="com.jcortex.translators.TransparentOutputTranslator" /> </outputTranslators> </JCortexBuilder> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 146 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6.2. Formato de los archivos de Datos Tanto los entrenamientos supervisados como no supervisados requieren el uso de un gran volumen de ejemplos. Actualmente el sistema de carga de datos es muy estricto en cuanto a los formatos que admite y los metadatos que requiere. En el futuro se espera poder aumentar la flexibilidad de este sistema, cargando no sólo número reales, sino cadenas de texto y objetos serializados. La estructura de una archivo de datos: # Comentario Se pueden introducir comentarios de una línea entera, siempre y cuando esta comience con una almohadilla. Puede estar en cualquier lugar del archivo, salvo en la zona de datos. @structure float[] Definición de la estructura de datos que compone cada ejemplo. Por ahora sólo se permiten listas de números reales. En próximas versiones se espera emplear otros modificadores como object que indicaría que el ejemplo a cargar es un objeto serializado. @input N1 float Definición de uno de los atributos de entrada. (El orden es importante) @output O1 float Definición de uno de los atributos de salida. (El orden es importante) @data Indicación de que en la siguiente línea comienza la zona de datos con los ejemplos. Se pueden encontrar ejemplos de estos archivos al final del Anexo B: Ejemplos de uso. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 147 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6.2. Visita guiada a JCortexBuilder A continuación se presentan los pasos, acciones y tareas más importantes para trabajar con JCortexBuilder. 6.2.1. Principales elementos de la interfaz El Work Bench de creación de Redes Neuronales artificiales es el punto de comienzo para la configuración y construcción de redes. Es posible disponer de varios a la vez con distintas alternativas de configuración. El listado de entrenamientos en curso y finalizados aparece en una columna a la izquierda. Puede ser recogido y desplegado para ahorrar espacio. Informe de aprendizaje o descriptivo de la red (según si se está entrenando, ha sido entrenada o ha sido cargada desde un archivo de configuración XML. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 148 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6.2.2. Ejemplo de entrenamiento Perceptrón Multicapa 1. Arranque de la aplicación con la ventana de bienvenida. 2. Para crear una nueva red neurona seleccionar el botón iluminado. La opción de Nueva Red Neuronal también es accesible desde el menú Archivo. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 149 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 3. Seleccionar la red neuronal “Multilayer Perceptron v.1.0.b” del menú desplegable. 4. En esta ventana se pueden configurar los parámetros de la red Perceptrón Multicapa, así como los de su maestro. En el ejemplo se ha creado una red de dos entradas con una salida. Las neuronas se organizan en dos capas, todas ellas utilizando como Función de Red Lineal Basis Function y como Función de Activación la Sigmoidal. Se han de configurar también los traductores a utilizar y los parámetros de entrenamiento. Seleccionamos un traductor de salida transparente y dejamos los parámetros de entrenamiento por defecto. Siempre es posible añadir elementos personalizados, accediendo a la opción Gestionar de los menús desplegables: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 150 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Se selecciona el archivo aFuncion2Variables.txt y el maestro por defecto. La configuración queda de la siguiente forma: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 151 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 5. Comienza el entrenamiento pulsando el botón Crear y Entrenar, con lo que se despliega la ventana de informe y aparece el entrenamiento en la barra lateral. Siempre es posible detener un entrenamiento o eliminarlo directamente. Si se cierra la ventana de informe, puede ser traída de nuevo a través de su elemento en el listado lateral. En este caso el entrenamiento resultó ser extremadamente rápido. Apenas dos iteraciones fueron suficientes para situarse por debajo del error máximo exigido. Se tiene acceso a toda esta información a través de las pestañas. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 152 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Las razones comunicadas por los analizadores para deterner el entrenamiento son: Razones de parada de los analizadores aglutinados: { ....Detenido porque Error de Entrenamiento (Cuadrático Medio) está por debajo del error mínimo exigido. Mejor valor = 0,044 ....Error de Validación (Cuadrático Medio) no ha encontrado razones hasta ahora para detener el entrenamiento. ....Variación de Pesos (Media Abs.) no ha encontrado razones hasta ahora para detener el entrenamiento. } Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 153 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Se puede conservar el esquema de la red como una imagen .png a través del menú contextual, e incluso cambiar la escala de la imagen para poder apreciarla mejor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 154 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 6. Se puede probar la red creada, en la última pestaña. 7. Finalmente se puede exportar la red neuronal creada al proyecto de Java definitivo haciendo clic en Exportar a mi Proyecto. Durante el proceso un asistente da las indicaciones y explicaciones necesarias, e incluso proporciona el código a utilizar en la aplicación. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 155 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 156 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 157 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 7. Planificación y Seguimiento A continuación se muestra en forma de tablas la EDT (Estructura de División de Trabajo) en la que se reparte el proyecto. Para llevar a cabo la planificación se ha considerado un calendario continuo en el que se trabaje todos los días de la semana 1,5 horas (1 hora con 30 minutos). Al final de cada semana, se habrá dedicado al proyecto alrededor de 10,5 horas que en las alrededor de 40 semanas que suma el proyecto producen un tiempo estimado de unas 420 horas. En la práctica no se dedica una hora y media diaria, sino que en los momentos en los que el resto de las obligaciones académicas y profesionales lo han permitido, este tiempo se ha agrupado en jornadas en principio imprevisibles para su planificación. En la realidad, se puede comprobar como el tiempo dedicado al proyecto ha sido superior a las 420 horas supuestas. Tabla 13: EDT Inicial EDT 1. Gestión de Proyectos 1.1. Realización del Anexo B 1.2. Entrega del Anexo B 1.3. Entrega Final del Proyecto 2. Documentación y Comunicación 2.1. Anexo B 2.1.1. Creación de la presentación 2.1.2. Presentación 2.2. Presentación Marzo 2.2.1. Creación de la presentación 2.2.2. Presentación 2.3. Presentación Mayo 2.3.1. Creación de la presentación 2.3.2. Presentación 2.4. Creación del sitio web www.jcortex.com 2.5. Redactar Memoria Final 2.6. Presentación Final 3. Formación 3.1. Aprendizaje básico sobre RNA por cuenta propia 3.2. Asignatura IA 4. Framework Jcortex 4.1. Núcleo del Framework 4.1.1. Estudio y Diseño 4.1.2. Clases abstractas e interfaces 4.1.3. Refinado del núcleo 4.2. Modelo de propagación genérico 4.2.1 Estudio y diseño 4.2.2. Implantación e integración 4.3. Modelo Perceptrón Tiempo Estimado 243 days 4 days 0 days 0 days 245 days 8 days 7 days 1 day 8 days 7 days 1 day 8 days 7 days 1 day Fecha Comienzo 29/10/2005 29/10/2005 02/11/2005 29/06/2006 09/11/2005 09/11/2005 09/11/2005 16/11/2005 22/02/2006 22/02/2006 01/03/2006 26/04/2006 26/04/2006 03/05/2006 Fecha Comp. Final 29/06/2006 0% 02/11/2005 0% 02/11/2005 0% 29/06/2006 0% 12/07/2006 0% 16/11/2005 0% 16/11/2005 0% 16/11/2005 0% 01/03/2006 0% 01/03/2006 0% 01/03/2006 0% 03/05/2006 0% 03/05/2006 0% 03/05/2006 0% 2 days 26/04/2006 27/04/2006 0% !60,00 20 days 31/05/2006 20/06/2006 0 days 12/07/2006 12/07/2006 136 days? 31/08/2005 13/01/2006 0% 0% 0% !600,00 !0,00 !0,00 80 days? 31/08/2005 18/11/2005 0% !0,00 54 days? 297 days 53 days 7 days 7 days 14 days 19 days 7 days 12 days 140 days 21/11/2005 01/09/2005 01/09/2005 01/09/2005 08/09/2005 10/10/2005 19/09/2005 19/09/2005 26/09/2005 21/11/2005 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% !0,00 !5.535,00 !840,00 !210,00 !210,00 !420,00 !570,00 !210,00 !360,00 !540,00 13/01/2006 25/06/2006 23/10/2005 07/09/2005 14/09/2005 23/10/2005 07/10/2005 25/09/2005 07/10/2005 09/04/2006 Coste Previsto !120,00 !120,00 !0,00 !0,00 !1.380,00 !240,00 !210,00 !30,00 !240,00 !210,00 !30,00 !240,00 !210,00 !30,00 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 158 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 4.3.1 Estudio y diseño 4.3.2. Implantación e integración 4.3.3. Integración en JCortexBuilder 4.3.4. Pruebas, refinado y mejora del rendimiento 4.4. Modelo Perceptrón Multicapa 4.4.1 Estudio y diseño 4.4.2. Implantación e integración 4.4.3. Integración en JCortexBuilder 4.4.4. Pruebas, refinado y mejora del rendimiento 4.5. Mapas de Kohonen 4.5.1 Estudio y diseño 4.5.2. Implantación e integración 4.5.3. Integración en JCortexBuilder 4.5.4. Pruebas, refinado y mejora del rendimiento 4.6. Redes de Hopfield 4.6.1 Estudio y diseño 4.6.2. Implantación e integración 4.6.3. Integración en JCortexBuilder 4.6.4. Pruebas, refinado y mejora del rendimiento 4.7. Cierre Framework ALPHA 0.01 4.8. Refinado del Framework en conjunto 4.9. Redactar JavaDoc 4.9. Cierre Distribución ALPHA 0.02 5. IDE JCortexBuilder 5.1. Análisis de la problemática de las RNA's y el entorno gráfico 5.2. Diseño 5.3. Programación de la aplicación 5.4. Mejoras sobre el interfaz 3 days 7 days 1 day 21/11/2005 23/11/2005 24/11/2005 30/11/2005 08/02/2006 08/02/2006 0% 0% 0% !90,00 !210,00 !30,00 7 days 03/04/2006 09/04/2006 0% !210,00 107 days 7 days 14 days 3 days 01/12/2005 01/12/2005 08/12/2005 05/02/2006 17/03/2006 07/12/2005 21/12/2005 07/02/2006 0% 0% 0% 0% !1.140,00 !210,00 !420,00 !90,00 14 days 04/03/2006 17/03/2006 0% !420,00 94 days 3 days 7 days 2 days 22/12/2005 22/12/2005 25/12/2005 03/02/2006 25/03/2006 24/12/2005 31/12/2005 04/02/2006 0% 0% 0% 0% !570,00 !90,00 !210,00 !60,00 7 days 19/03/2006 25/03/2006 0% !210,00 48 days 2 days 4 days 1 day 11/02/2006 11/02/2006 13/02/2006 17/02/2006 30/03/2006 12/02/2006 16/02/2006 17/02/2006 0% 0% 0% 0% !300,00 !60,00 !120,00 !30,00 3 days 28/03/2006 30/03/2006 0% !90,00 4 days 22/04/2006 26/04/2006 0% !120,00 47,5 days 08/05/2006 24/06/2006 0% !1.425,00 8 days 1 day 112 days 23/05/2006 31/05/2006 24/06/2006 25/06/2006 02/01/2006 23/04/2006 0% 0% 0% !0,00 !30,00 !1.590,00 4 days 02/01/2006 05/01/2006 0% !120,00 7 days 21 days 21 days 06/01/2006 12/01/2006 13/01/2006 02/02/2006 03/04/2006 23/04/2006 0% 0% 0% !210,00 !630,00 !630,00 !8.625,00 A modo de detalle, se incluye en la Ilustración 15: Histograma del recurso Miguel Lara Encabo, el nivel de ocupación del único recurso humano definido para el proyecto. En las últimas fechas, alrededor de la presentación de mayo y antes de la entrega final, la ocupación crece hasta un 200% prácticamente constante. Esto se debe a que se simultanean las tareas de redacción de la documentación, y últimos retoques, pruebas y afinaciones sobre el framework y el entorno de desarrollo. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 159 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Ilustración 15: Histograma del recurso Miguel Lara Encabo A continuación, en la Tabla 14: ETD a fecha 01/03/2006 - Presentación de Marzo, se muestra una instantánea tomada sobre la planificación del proyecto, alrededor del miércoles 1 de marzo del 2006, la fecha en la se llevó a cabo la presentación intermedia del proyecto. Se puede apreciar como ha hubo actividades que exigieron mucho más tiempo del previsto (por ejemplo el cálculo de vecindades en los Mapas de Kohonen). Sin embargo, también hubo otras actividades que resultaron ser ligéramente más rápidas de lo esperado e incluso se había adelantado parte de la tarea de algunas actividades futuras. En este momento del tiempo se llevó a cabo un Earned Value Análisis que reflejó cómo la situación prevista no estaba demasiado lejos de la realidad materializada. Para el cálculo de costes sólo se ha tenido en cuenta el coste que supone la dedicación de un recurso humano a la realización de las actividades. Se ha supuesto un coste de 20!/hora, sin variaciones en caso de sobrecarga u horas extra. Los resultados se muestran en la tabla Tabla 15: Cálculo del Earned Value Analysis a fecha 01/03/2006. Tabla 14: ETD a fecha 01/03/2006 - Presentación de Marzo EDT 1. Gestión de Proyectos 1.1. Realización del Anexo B 1.2. Entrega del Anexo B 1.3. Entrega Final del Proyecto 2. Documentación y Comunicación 2.1. Anexo B 2.1.1. Creación de la presentación 2.1.2. Presentación 2.2. Presentación Marzo 2.2.1. Creación de la presentación 2.2.2. Presentación 2.3. Presentación Mayo 2.3.1. Creación de la presentación 2.3.2. Presentación Tiempo Estimado 243 days 4 days 0 days 0 days 245 days 8 days 7 days 1 day 8 days 7 days 1 day 8 days 7 days 1 day Fecha Comienzo 29/10/2005 29/10/2005 02/11/2005 29/06/2006 09/11/2005 09/11/2005 09/11/2005 16/11/2005 22/02/2006 22/02/2006 01/03/2006 26/04/2006 26/04/2006 03/05/2006 Fecha Comp. Final 29/06/2006 100% 01/11/2005 100% 02/11/2005 100% 29/06/2006 100% 12/07/2006 33% 16/11/2005 100% 15/11/2005 100% 16/11/2005 100% 01/03/2006 88% 28/02/2006 100% 01/03/2006 0% 03/05/2006 0% 03/05/2006 0% 03/05/2006 0% Coste Previsto !120,00 !120,00 !0,00 !0,00 !1.380,00 !240,00 !210,00 !30,00 !240,00 !210,00 !30,00 !240,00 !210,00 !30,00 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 160 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 2.4. Creación del sitio web www.jcortex.com 2.5. Redactar Memoria Final 2.6. Presentación Final 3. Formación 3.1. Aprendizaje básico sobre RNA por cuenta propia 3.2. Asignatura IA 4. Framework Jcortex 4.1. Núcleo del Framework 4.1.1. Estudio y Diseño 4.1.2. Clases abstractas e interfaces 4.1.3. Refinado del núcleo 4.2. Modelo de propagación genérico 4.2.1 Estudio y diseño 4.2.2. Implantación e integración 4.3. Modelo Perceptrón 4.3.1 Estudio y diseño 4.3.2. Implantación e integración 4.3.3. Integración en JCortexBuilder 4.3.4. Pruebas, refinado y mejora del rendimiento 4.4. Modelo Perceptrón Multicapa 4.4.1 Estudio y diseño 4.4.2. Implantación e integración 4.4.3. Integración en JCortexBuilder 4.4.4. Pruebas, refinado y mejora del rendimiento 4.5. Mapas de Kohonen 4.5.1 Estudio y diseño 4.5.2. Implantación e integración 4.5.3. Integración en JCortexBuilder 4.5.4. Pruebas, refinado y mejora del rendimiento 4.6. Redes de Hopfield 4.6.1 Estudio y diseño 4.6.2. Implantación e integración 4.6.3. Integración en JCortexBuilder 4.6.4. Pruebas, refinado y mejora del rendimiento 4.7. Cierre Framework ALPHA 0.01 4.8. Refinado del Framework en conjunto 4.9. Redactar JavaDoc 4.9. Cierre Distribución ALPHA 0.02 5. IDE JCortexBuilder 5.1. Análisis de la problemática de las RNA's y el entorno gráfico 5.2. Diseño 5.3. Programación de la aplicación 5.4. Mejoras sobre el interfaz 2 days 26/04/2006 27/04/2006 0% !60,00 20 days 31/05/2006 20/06/2006 0 days 12/07/2006 12/07/2006 136 days? 31/08/2005 13/01/2006 0% 0% 100% !600,00 !0,00 !0,00 80 days? 31/08/2005 18/11/2005 100% !0,00 54 days? 297 days 53 days 7 days 12 days 14 days 15 days 7 days 8 days 140 days 3 days 7 days 1 day 21/11/2005 01/09/2005 01/09/2005 01/09/2005 08/09/2005 10/10/2005 19/09/2005 19/09/2005 26/09/2005 21/11/2005 21/11/2005 24/11/2005 08/02/2006 13/01/2006 25/06/2006 23/10/2005 07/09/2005 19/09/2005 23/10/2005 03/10/2005 25/09/2005 03/10/2005 09/04/2006 23/11/2005 30/11/2005 08/02/2006 100% 54% 79% 100% 100% 50% 100% 100% 100% 61% 100% 100% 100% !0,00 !5.985,00 !990,00 !210,00 !360,00 !420,00 !450,00 !210,00 !240,00 !540,00 !90,00 !210,00 !30,00 7 days 03/04/2006 09/04/2006 0% !210,00 107 days 7 days 14 days 3 days 01/12/2005 01/12/2005 08/12/2005 05/02/2006 17/03/2006 07/12/2005 21/12/2005 07/02/2006 61% 100% 100% 75% !1.140,00 !210,00 !420,00 !90,00 14 days 04/03/2006 17/03/2006 0% !420,00 94 days 3 days 21 days 2 days 22/12/2005 22/12/2005 25/12/2005 03/02/2006 25/03/2006 24/12/2005 14/01/2006 04/02/2006 84% 100% 100% 100% !990,00 !90,00 !630,00 !60,00 7 days 19/03/2006 25/03/2006 25% !210,00 48 days 2 days 4 days 1 day 11/02/2006 11/02/2006 13/02/2006 17/02/2006 30/03/2006 12/02/2006 16/02/2006 17/02/2006 78% 100% 100% 100% !300,00 !60,00 !120,00 !30,00 3 days 28/03/2006 30/03/2006 25% !90,00 4 days 22/04/2006 26/04/2006 0% !120,00 47,5 days 08/05/2006 24/06/2006 0% !1.425,00 8 days 1 day 112 days 23/05/2006 31/05/2006 24/06/2006 25/06/2006 02/01/2006 23/04/2006 25% 0% 69% !0,00 !30,00 !1.500,00 4 days 02/01/2006 05/01/2006 100% !120,00 4 days 21 days 21 days 06/01/2006 09/01/2006 13/01/2006 02/02/2006 03/04/2006 23/04/2006 100% 100% 25% !120,00 !630,00 !630,00 !8.625,00 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 161 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Tabla 15: Cálculo del Earned Value Analysis a fecha 01/03/2006 EDT 1. Gestión de Proyectos 1.1. Realización del Anexo B 1.2. Entrega del Anexo B 1.3. Entrega Final del Proyecto 2. Documentación y Comunicación 2.1. Anexo B 2.1.1. Creación de la presentación 2.1.2. Presentación 2.2. Presentación Marzo 2.2.1. Creación de la presentación 2.2.2. Presentación 2.3. Presentación Mayo 2.3.1. Creación de la presentación 2.3.2. Presentación 2.4. Creación del sitio web www.jcortex.com 2.5. Redactar Memoria Final 2.6. Presentación Final 3. Formación 3.1. Aprendizaje básico sobre RNA por cuenta propia 3.2. Asignatura IA 4. Framework Jcortex 4.1. Núcleo del Framework 4.1.1. Estudio y Diseño 4.1.2. Clases abstractas e interfaces 4.1.3. Refinado del núcleo 4.2. Modelo de propagación genérico 4.2.1 Estudio y diseño 4.2.2. Implantación e integración 4.3. Modelo Perceptrón 4.3.1 Estudio y diseño 4.3.2. Implantación e integración 4.3.3. Integración en PVest 6 PVejc7 AC8 EAC 9 BAC 10 VAC11 120,00 ! 120,00 ! 120,00 ! 120,00 ! 120,00 ! 0,00 ! 120,00 ! 120,00 ! 120,00 ! 120,00 ! 120,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 480,00 ! 450,00 ! 450,00 ! 1.380,00 ! 1.380,00 ! 0,00 ! 240,00 ! 240,00 ! 240,00 ! 240,00 ! 240,00 ! 0,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 0,00 ! 30,00 ! 30,00 ! 30,00 ! 30,00 ! 30,00 ! 0,00 ! 240,00 ! 210,00 ! 210,00 ! 240,00 ! 240,00 ! 0,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 0,00 ! 30,00 ! 0,00 ! 0,00 ! 30,00 ! 30,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 240,00 ! 240,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 210,00 ! 210,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 30,00 ! 30,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 60,00 ! 60,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 600,00 ! 600,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 3.450,00 ! 3.217,50 ! 3.247,50 ! 5.586,61 ! 5.535,00 ! -51,61 ! 840,00 ! 630,00 ! 780,00 ! 1.040,00 ! 840,00 ! -200,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 0,00 ! 210,00 ! 210,00 ! 360,00 ! 360,00 ! 210,00 ! -150,00 ! 420,00 ! 210,00 ! 210,00 ! 420,00 ! 420,00 ! 0,00 ! 570,00 ! 570,00 ! 450,00 ! 450,00 ! 570,00 ! 120,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 0,00 ! 360,00 ! 360,00 ! 240,00 ! 240,00 ! 360,00 ! 120,00 ! 330,00 ! 330,00 ! 330,00 ! 540,00 ! 540,00 ! 0,00 ! 90,00 ! 90,00 ! 90,00 ! 90,00 ! 90,00 ! 0,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 0,00 ! 30,00 ! 30,00 ! 30,00 ! 30,00 ! 30,00 ! 0,00 ! 6 Valor Planificado teniendo en cuenta las actividades planificadas para esta fecha. 7 Valor Planificado teniendo en cuenta las actividades ejecutadas hasta la fecha. 8 Costes Actuales incurridos en la realización de las actividades. 9 Coste esperado de acuerdo con los datos recogidos. 10 Coste presupuestado. 11 Variación entre el coste presupuestado y el previsto, por actividad. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 162 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ JCortexBuilder 4.3.4. Pruebas, refinado y mejora del rendimiento 4.4. Modelo Perceptrón Multicapa 4.4.1 Estudio y diseño 4.4.2. Implantación e integración 4.4.3. Integración en JCortexBuilder 4.4.4. Pruebas, refinado y mejora del rendimiento 4.5. Mapas de Kohonen 4.5.1 Estudio y diseño 4.5.2. Implantación e integración 4.5.3. Integración en JCortexBuilder 4.5.4. Pruebas, refinado y mejora del rendimiento 4.6. Redes de Hopfield 4.6.1 Estudio y diseño 4.6.2. Implantación e integración 4.6.3. Integración en JCortexBuilder 4.6.4. Pruebas, refinado y mejora del rendimiento 4.7. Cierre Framework ALPHA 0.01 4.8. Refinado del Framework en conjunto 4.9. Redactar JavaDoc 4.9. Cierre Distribución ALPHA 0.02 5. IDE JCortexBuilder 5.1. Análisis de la problemática de las RNA's y el entorno gráfico 5.2. Diseño 5.3. Programación de la aplicación 5.4. Mejoras sobre el interfaz 0,00 ! 0,00 ! 0,00 ! 210,00 ! 210,00 ! 0,00 ! 720,00 ! 697,50 ! 697,50 ! 1.140,00 ! 1.140,00 ! 0,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 210,00 ! 0,00 ! 420,00 ! 420,00 ! 420,00 ! 420,00 ! 420,00 ! 0,00 ! 90,00 ! 67,50 ! 67,50 ! 90,00 ! 90,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 420,00 ! 420,00 ! 0,00 ! 780,00 ! 780,00 ! 780,00 ! 570,00 ! 570,00 ! 0,00 ! 90,00 ! 90,00 ! 90,00 ! 90,00 ! 90,00 ! 0,00 ! 630,00 ! 630,00 ! 630,00 ! 210,00 ! 210,00 ! 0,00 ! 60,00 ! 60,00 ! 60,00 ! 60,00 ! 60,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 210,00 ! 210,00 ! 0,00 ! 210,00 ! 210,00 ! 210,00 ! 300,00 ! 300,00 ! 0,00 ! 60,00 ! 60,00 ! 60,00 ! 60,00 ! 60,00 ! 0,00 ! 120,00 ! 120,00 ! 120,00 ! 120,00 ! 120,00 ! 0,00 ! 30,00 ! 30,00 ! 30,00 ! 30,00 ! 30,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 90,00 ! 90,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 120,00 ! 120,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 1.425,00 ! 1.425,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 30,00 ! 30,00 ! 0,00 ! 870,00 ! 870,00 ! 870,00 ! 1.590,00 ! 1.590,00 ! 0,00 ! 120,00 ! 120,00 ! 120,00 ! 120,00 ! 120,00 ! 0,00 ! 120,00 ! 120,00 ! 120,00 ! 210,00 ! 210,00 ! 0,00 ! 630,00 ! 630,00 ! 630,00 ! 630,00 ! 630,00 ! 0,00 ! 0,00 ! 0,00 ! 0,00 ! 630,00 ! 630,00 ! 0,00 ! 8.676,61 ! 8.625,00 ! El coste del proyecto se ha revisado en 8.676,61!, una cifra nada dispar respecto al inicialmente presupuestado de 8.625.00!. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 163 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 8. Conclusiones del Proyecto Desde el punto de vista puramente técnico se puede considerar que este proyecto de desarrollo ha sido un éxito. A la vista del tiempo disponible y el alcance de las actividades, está claro que la planificación inicial estaba mal dimensionada y era excesivamente optimista. Sin embargo los cambios en el alcance del proyecto no han alterado el cumplimiento de los requerimientos y objetivos iniciales. Es más, en diversas ocasiones se ha reconducido el proyecto con el fin de priorizar el mejor cumplimiento del objetivo principal: lograr un sistema práctico, que pueda ser utilizado por la comunidad de programadores de Java para resolver exigencias reales de sus aplicaciones. Se ha generado, en definitiva, un sistema útil que soporta de forma fiable los desarrollos de Redes Neuronales Artificiales y aporta las funcionalidades básicas imprescindibles para los programadores. Es cierto que aún quedan vías para la mejora que serán exploradas en futuras versiones del framework – JCortex – y del entorno de desarrollo – JCortexBuilder. A lo largo del desarrollo del proyecto se han afrontado problemas técnicos en el ámbito de las Redes Neuronales Artificiales y de la Ingeniería de Software que han sido resueltos unas veces acudiendo a algoritmos teóricos de expertos, y otras recurriendo a la propia labor de investigación. Desde el punto de vista personal, esta ha resultado ser una labor muy enriquecedora, no exenta de apuros y problemas. Considero muy importante el hecho de haber podido enfrentarme a problemas de desarrollo reales en un ámbito que podría considerarse fuera de lo académico. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 164 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ 9. Bibliografía, materiales y aplicaciones Bibliografía de consulta: [ISAS04] • Redes Neuronales Artificiales. Un enfoque práctico – Pedro Isasi Viñuela e Inés M. Galván León – Ed. Pearson Prentice Hall – ISBN:84-205-4025-0 [SIER05] • Head First Java – Kathy Sierra y Bert Bates – Ed. O’Reilly – ISMB:0-596-00920-8 [PILO00] • UML Pocket Reference – Dan Pilone – Editorial O’Reilly – ISBN:0596-00497-4 • Apuntes de la asignatura de Inteligencia Artificial – Miguel Ángel Sanz Bobi – 5º IINF, ICAI, Universidad Pontificia Comillas • Apuntes de la asignatura de Ingeniería del Software II – Juan Carlos Esquivel Díaz – 5º IINF, ICAI, Universidad Pontificia Comillas Principales aplicaciones utilizadas en el desarrollo: • J2SE SDK 1.4.2 y 1.5.0 – http://java.sun.com/ • Eclipse 3.1.2 – http://www.eclipse.org/ • JUDE Community 1.6.2 – http://jude.esm.jp/ • Shark 4.3.3 – CHUD Tools 4.3.3 – http://developer.apple.com/ • BBEdit 8.1 – http://www.barebones.com/ • Firefox 1.5.0.3 (lector de XML) – http://www.mozilla.org/ • Photoshop CS – http://www.adobe.es/ • Blender 2.4.1 – http://www.blender.org/ Principales aplicaciones adicionales para la documentación del proyecto: • Microsoft Word 2004 para Mac – http://www.mactopia.com/ • Keynote 3.0.1 – http://www.apple.com/es/iwork/keynote/ • DocFlex/Doclet para javadoc v1.4.7 – http://www.docflex.com • FastTrack Schedule 8.0.8 • Grapher 1.0 – http://www.apple.com/ Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 165 Memoria de desarrollo – Framework JCortex – http://www.jcortex.com/ Anexo A: Documentación de la API – JCortex Package Summary Page com.jcortex 166 com.jcortex.activationFunctions 258 com.jcortex.backPropagation 277 com.jcortex.distanceFunctions 295 com.jcortex.feedForward 297 com.jcortex.hopfield 332 com.jcortex.kohonen 343 com.jcortex.networkFunctions 413 com.jcortex.translators 416 Package com.jcortex Interface Summary Page ActivationFunction Interface defining the contract for the Activation Functions available in the framework or user-developed. 168 AxonReceiver Interface defining the contract for an Axon Receiver element. 170 AxonSource Interface defining the contract for an AxonSource element. 173 BackPropagationActivationFunction Interface defining the contract for a Back-Propagation Activation Function. 178 DistanceFunction Interface defining the contract for the Distance Functions available in the framework or user-developed. 186 InputTranslator Interface defining the contract for the Input Translator available in the framework or user-developed. 187 JCortexConstants This class holds the basic constant values required in the JCortex framework. 188 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 166 Package com.jcortex NetworkFunction Interface defining the contract for the Network Functions available in the framework or user-developed. 198 OutputTranslator Interface defining the contract for the Output Translator available in the framework or user-developed. 220 StatisticsListener This interface defines the contract obliged to any class that wants to be notified by upgrades and the closing of a training session's statistics. 236 Class Summary Page Class modeling the relationship between an AxonSource connected to an AxonReceiver and the weight given to that connection. 175 The instances of this class are responsable for ComposedProgressAnalyzer taking the decision of when to stop a training, based on a statistics measure's progression. 179 ConsoleUtilities Class defining static methods as helpers for this frameworks classes console reports and String representations. 183 LoadAndStoreUtilities An utilities class devoted to hold the methods which read and write the framework's data on to the local file system. 190 Messages Class in charge of obtaining the localized messages for the JCortex framework. 194 NeuralNetwork Abstract class that must be extended by all the specific Artificial Neural Network models. 200 Neuron bstract class extended to represent the generic role of a neuron inside a Neural Networ's structure. 215 ProgressAnalyzer This is the Component element in the Composite GoF Desing Pattern. 222 Sensor The sensor is interface placed between the data entrance and the neurons or other mechanisms stored inside the NeuralNetwork. 226 Statistics Holds the progress statistics for a training session. 230 AxonSourceEntry Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 167 Package com.jcortex StatisticsEvent Event element created in order to send a notification to a listener. 235 StatsMeasure This class models the dimensions - or measures recorded in the statistics. 238 StatsRegister The StatsRegister is the most basic element in the training Statistics system. 242 Teacher The abstract class obliged to all Teachers of Neural Networks. 246 ValueDecreaseAnalyzer The instances of this class are responsable for taking the decision of when to stop a training, based on a statistics measure's progression. 253 ValueVariationAnalyzer The instances of this class are responsable for taking the decision of when to stop a training, based on a statistics measure's progression. 256 Exception Summary ReadingException Page Exception thrown when there is an exception reading a local file from the file system. 225 Interface ActivationFunction com.jcortex All Known Subinterfaces: BackPropagationActivationFunction All Known Implementing Classes: GaussianFunction, HyperbolicTangentFunction, SigmoidalFunction, SignFunction, StepFunction IdentityFunction, public interface ActivationFunction Interface defining the contract for the Activation Functions available in the framework or user-developed. This interfaces' implementations must follow the Singleton (GoF) design pattern. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 168 Interface ActivationFunction Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. int 169 getNumberOfActivationParameters() Method to obtain the number of activation parameters this particular function needs. float Page 169 getSolution(float networkResult, float[] activationParams) Calculates and return the solution of the currente function, given the parameters passed as arguments. 170 Method Detail getDefaultParameterSet public float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. Returns: The default set of parameters. getNumberOfActivationParameters public int getNumberOfActivationParameters() Method to obtain the number of activation parameters this particular function needs. Returns: The number of activation parameters. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 169 Interface ActivationFunction getSolution public float getSolution(float networkResult, float[] activationParams) throws IllegalArgumentException Calculates and return the solution of the currente function, given the parameters passed as arguments. Parameters: networkResult - The result from the network function. activationParams - The array of activation parameters needed. Returns: The result of calculating the activation function. Throws: IllegalArgumentException Interface AxonReceiver com.jcortex All Known Implementing Classes: BackPropagationNeuron, FeedForwardNeuron, KohonenNeuron, Neuron public interface AxonReceiver Interface defining the contract for an Axon Receiver element. An AxonReceiver is an element that will be child of one or more AxonSource instances. It is capable of receiving the numeric values offered by its parents. An AxonReceiver is capable of assigning a weight to each one of its connections with AxonSources. Author: Miguel Lara Encabo - [email protected] Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 170 Interface AxonReceiver Version: 0.1b Method Summary void addEntry(AxonSource entry) Adds a new neuron connectio to an upper-level axon source, taking care of the weight choosing. void 173 getId() This elemen's ID is obtained. void 172 getEntryWeight(AxonSource parent) Getter Method for this neuron's entries' weights int 172 getEntries() Getter Method for this neuron's entries collection. float 171 addEntry(AxonSource entry, float weight) Adds a new neuron connection to an upper-level axon source, taking care of the weight choosing. Collection Page 171 setEntryWeight(AxonSource parent, float value) Sets an entry's weight. 172 Method Detail getId public int getId() This elemen's ID is obtained. Returns: An integer number with the ID of this element. addEntry public void addEntry(AxonSource entry) Adds a new neuron connectio to an upper-level axon source, taking care of the weight choosing. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 171 Interface AxonReceiver Parameters: entry - The new axon data source on to which stablish a connection. addEntry public void addEntry(AxonSource entry, float weight) Adds a new neuron connection to an upper-level axon source, taking care of the weight choosing. Parameters: entry - The new AxonSource element to be connected as its father. weight - The entry's weight setEntryWeight public void setEntryWeight(AxonSource parent, float value) Sets an entry's weight. Parameters: - The parent AxonSource whose entry weighjt we are going to change. parent value - The float value to be set as this connections weight. getEntries public Collection getEntries() Getter Method for this neuron's entries collection. Returns: The entries list. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 172 Interface AxonReceiver getEntryWeight public float getEntryWeight(AxonSource parent) Getter Method for this neuron's entries' weights Returns: This receiver's entries' weights Interface AxonSource com.jcortex All Known Implementing Classes: BackPropagationNeuron, FeedForwardNeuron, KohonenNeuron, Neuron, Sensor public interface AxonSource Interface defining the contract for an AxonSource element. An AxonSource is an element that will be father of one or more AxonReceiver instances. It is capable of producing the numeric values offered to its children. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary void Page addConnectedNeuron(AxonReceiver child, boolean back_connection) Adds a new neuron connectio to a lower-lever cell. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 175 173 Interface AxonSource float getAxonValue() The value of the next cell input is obtained through the axon connection. int getId() This source's ID is obtained. float 174 174 produceAxonValue() Internal method made to generate the value that has to be transmitted through the axon connection. 174 Method Detail getId public int getId() This source's ID is obtained. Returns: An integer with the ID of this source; getAxonValue public float getAxonValue() The value of the next cell input is obtained through the axon connection. Returns: A float value holding the result of the cell's activation. produceAxonValue public float produceAxonValue() throws IllegalArgumentException Internal method made to generate the value that has to be transmitted through the axon connection. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 174 Interface AxonSource Returns: An Object holding the result of the cell's activation Throws: IllegalArgumentException - Exception that can be thrown when there is a problem with the function's parameters. InvalidParameterException addConnectedNeuron public void addConnectedNeuron(AxonReceiver child, boolean back_connection) Adds a new neuron connectio to a lower-lever cell. Parameters: child - The child element connected to this AxonSource instance. back_connection - Indicates if this neuron has to create the entry in its child. Class AxonSourceEntry com.jcortex java.lang.Object com.jcortex.AxonSourceEntry public class AxonSourceEntry extends Object Class modeling the relationship between an AxonSource connected to an AxonReceiver and the weight given to that connection. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 175 Class AxonSourceEntry Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary Page AxonSourceEntry(AxonSource axonSource, float weight) Default constructor for the instances of this class. Method Summary AxonSource 177 setAxonSource(AxonSource axonSource) Sets the AxonSource connected as a parent. void 176 getWeight() Obtains the weight given to this connection. void Page getAxonSource() Obtains the AxonSource connected as parent. float 176 177 setWeight(float weight) Set the weight for this connection. 177 Constructor Detail AxonSourceEntry public AxonSourceEntry(AxonSource axonSource, float weight) Default constructor for the instances of this class. Method Detail getAxonSource public AxonSource getAxonSource() Obtains the AxonSource connected as parent. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 176 Class AxonSourceEntry Returns: The parent AxonSource instance. setAxonSource public void setAxonSource(AxonSource axonSource) Sets the AxonSource connected as a parent. Parameters: axonSource - The AxonSource instance to be connected as parent. getWeight public float getWeight() Obtains the weight given to this connection. Returns: The weight's value. setWeight public void setWeight(float weight) Set the weight for this connection. Parameters: weight - The weigh to be set for this connection. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 177 Interface BackPropagationActivationFunction Interface BackPropagationActivationFunction com.jcortex All Superinterfaces: ActivationFunction All Known Implementing Classes: HyperbolicTangentFunction, IdentityFunction, SigmoidalFunction public interface BackPropagationActivationFunction extends ActivationFunction Interface defining the contract for a Back-Propagation Activation Function. These functions extend as well the ActivationFunction interface, and on top of it they implement a method to obtain the derivate solution for the current function. This interfaces' implementations must follow the Singleton (GoF) design pattern. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary float Page getDerivativeSolution(BackPropagationNeuron neuron) Method for calculating the derivate value of this function given the BackPropagationNeuron's values as an entry. 179 Methods inherited from interface com.jcortex.ActivationFunction getDefaultParameterSet, getNumberOfActivationParameters, getSolution Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 178 Interface BackPropagationActivationFunction Method Detail getDerivativeSolution public float getDerivativeSolution(BackPropagationNeuron neuron) Method for calculating the derivate value of this function given the BackPropagationNeuron's values as an entry. Parameters: - The BackPropagationNeuron instance that homes this function. neuron Returns: The derivate value calculated. Class ComposedProgressAnalyzer com.jcortex java.lang.Object com.jcortex.ProgressAnalyzer com.jcortex.ComposedProgressAnalyzer public class ComposedProgressAnalyzer extends ProgressAnalyzer The instances of this class are responsable for taking the decision of when to stop a training, based on a statistics measure's progression. This way there will be a instance for each stats measure that the Teacher instance wants to be monitored for decision. Its intelligence operates inside the method isEvolutionGoodEnough(). This class is responsible of storing all progress information that is not reflected in the StatsMeasure instance associated, such as recen variations... It is thought best not to implement this class as a StatsListener, as its decision method isEvolutionGoodEnough() is not necessarily invoked each time a statistic register is Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 179 Class ComposedProgressAnalyzer recorded, but it will be promptly asked by the Teacher instance at work when a decision is required. The Composed Progress Analyzer combines the decision taken by several other analyzers in order to make the final statement. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary Page ComposedProgressAnalyzer() Creates a new instance of this Composed Progress Analyzer by initialyzing the analyzer collection with a LinkedList. 181 Method Summary Page void add(ProgressAnalyzer analyzer) Adds a ProgessAnalyzer instance to the compositing list. ProgressAnalyzer getInnerAnalyzers(int ix) Obtains a ProgessAnalyzer instance from the list, given its index. String 182 isProgressGoodEnough() Decides if the progress of the composed ProgessAnalyzer instances is good enough to continue. void 182 getReasonToStop() Obtains the description of the reason why this analyzer has stopped the training process it was following, if indeed it has. boolean 181 182 remove(ProgressAnalyzer analyzer) Removes a compositing list. ProgessAnalyzer instance from the 181 Methods inherited from class com.jcortex.ProgressAnalyzer add, getInnerAnalyzers, getReasonToStop, isProgressGoodEnough, remove Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 180 Class ComposedProgressAnalyzer Constructor Detail ComposedProgressAnalyzer public ComposedProgressAnalyzer() Creates a new instance of this Composed Progress Analyzer by initialyzing the analyzer collection with a LinkedList. Method Detail add public void add(ProgressAnalyzer analyzer) Adds a ProgessAnalyzer instance to the compositing list. Overrides: add in class ProgressAnalyzer Parameters: analyzer - The progress analyzer to be added. remove public void remove(ProgressAnalyzer analyzer) Removes a ProgessAnalyzer instance from the compositing list. Overrides: remove in class ProgressAnalyzer Parameters: analyzer - The progress analyzer to be removed. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 181 Class ComposedProgressAnalyzer getInnerAnalyzers public ProgressAnalyzer getInnerAnalyzers(int ix) Obtains a ProgessAnalyzer instance from the list, given its index. Overrides: getInnerAnalyzers in class ProgressAnalyzer Parameters: ix - The index of the desired analyzer. Returns: The requested ProgessAnalyzer instance. isProgressGoodEnough public boolean isProgressGoodEnough() Decides if the progress of the composed ProgessAnalyzer instances is good enough to continue. The composed progress will be good enough to continue the training when the progress of each one of the analyzers included is good enough. Overrides: isProgressGoodEnough in class ProgressAnalyzer Returns: A boolean value indicating if the training should continue (true) or not (false). getReasonToStop public String getReasonToStop() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 182 Class ComposedProgressAnalyzer Obtains the description of the reason why this analyzer has stopped the training process it was following, if indeed it has. The reason is built by adding up the reasons of the progress analyzers composed. Overrides: getReasonToStop in class ProgressAnalyzer Returns: The reason why this analyzer has decided to stop the training. Class ConsoleUtilities com.jcortex java.lang.Object com.jcortex.ConsoleUtilities final public class ConsoleUtilities extends Object Class defining static methods as helpers for this frameworks classes console reports and String representations. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary Page ConsoleUtilities() 184 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 183 Class ConsoleUtilities Method Summary static String Page arrayToString(boolean[] array) Static method for translating a boolean[] array to its String representation. static String arrayToString(boolean[][] array) Static method for translating a boolean[][] array to its String representation. static String 185 arrayToString(float[] array) Static method for translating a float[] array to its String representation. static String 185 184 arrayToString(float[][] array) Static method for translating a float[][] array to its String representation. 184 Constructor Detail ConsoleUtilities public ConsoleUtilities() Method Detail arrayToString public static String arrayToString(float[] array) Static method for translating a float[] array to its String representation. Parameters: array - The array to be translated. Returns: The String translation. arrayToString public static String arrayToString(float[][] array) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 184 Class ConsoleUtilities Static method for translating a float[][] array to its String representation. Internally uses the public static String arrayToString(float[] array) method. Parameters: array - The array to be translated. Returns: The String translation. arrayToString public static String arrayToString(boolean[] array) Static method for translating a boolean[] array to its String representation. Parameters: array - The array to be translated. Returns: The String translation. arrayToString public static String arrayToString(boolean[][] array) Static method for translating a boolean[][] array to its String representation. Internally uses the public static String arrayToString(boolean[] array) method. Parameters: array - The array to be translated. Returns: The String translation. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 185 Interface DistanceFunction Interface DistanceFunction com.jcortex All Known Implementing Classes: EuclideanDistanceFunction public interface DistanceFunction Interface defining the contract for the Distance Functions available in the framework or user-developed. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary float Page getDistance(AxonSource[] entries, float[] weights) Obtains the distance between the values provided by the AxonSource an the weights stablished for that connection. 186 Method Detail getDistance public float getDistance(AxonSource[] entries, float[] weights) throws IllegalArgumentException Obtains the distance between the values provided by the AxonSource an the weights stablished for that connection. Parameters: - The AxonSource instances that provide the values for the distance calculation. entries Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 186 Interface DistanceFunction - The weights which are to be compared in order to calculate the distance. weights Returns: The distance between the entries' values and the weights. Throws: IllegalArgumentException InvalidParameterException - Exception that can be thrown if arrays have different sizes. Interface InputTranslator com.jcortex All Known Implementing Classes: TransparentInputTranslator public interface InputTranslator Interface defining the contract for the Input Translator available in the framework or user-developed. The Input Translator's aim it to serialize the objects you need to use in you application into a float array numerical representation. Neural Networks are mathematic algorythms so they can only work with numbers. You must make sure that the numbers into which an instance is translated are really representative. It is desirable that each each instance should be univocal with its float[] representation, but bear in mind this is not a HASH function: intances which have the same signification for the problem should have similar (or even the same) number arrays, independent of their exact original values. On the other side of the Neural Network an Output Translator will be placed producing an instance from the same class as the input or a different one. This means that it may not be essential that an input translation should have a straight inverse operation. In other words, information can be lost in the translation if it is not necessary. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 187 Interface InputTranslator Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary float[] Page getInputTranslation(Object input_value) Translates the input value given as an object into the numerical values that can be fed onto the neurons. 188 Method Detail getInputTranslation public float[] getInputTranslation(Object input_value) Translates the input value given as an object into the numerical values that can be fed onto the neurons. Parameters: input_value - The qualitative Object used in each particular problem. Returns: The float array that contains the input for each Neuron. Interface JCortexConstants com.jcortex public interface JCortexConstants This class holds the basic constant values required in the JCortex framework. It is made up of static attributes with public access, and some may even be final if they are never supposed to change in a distribution. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 188 Interface JCortexConstants Author: Miguel Lara Encabo - [email protected] Version: 0.1b Field Summary String FRAMEWORK_MESSAGE This framework's message, to be posted on the console. String 189 XML_NEURON_CONSTRUCTOR_ATTRIBUTE_SIGNATURE A constructor with a two parameters of class org.w3c.dom.Node and com.jcortex.NeuralNetwork is needed quite a lot in the XML configuration file loading process. Class[] 189 FRAMEWORK_VERSION This framework's version. Class[] Page 190 XML_SIMPLE_CONSTRUCTOR_ATTRIBUTE_SIGNATURE A constructor with a single parameter of class org.w3c.dom.Node is required quite a lot in the XML configuration file loading process. 190 Field Detail FRAMEWORK_VERSION public static final String FRAMEWORK_VERSION This framework's version. FRAMEWORK_MESSAGE public static final String FRAMEWORK_MESSAGE This framework's message, to be posted on the console. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 189 Interface JCortexConstants XML_SIMPLE_CONSTRUCTOR_ATTRIBUTE_SIGNATURE public static final Class[] XML_SIMPLE_CONSTRUCTOR_ATTRIBUTE_SIGNATURE A constructor with a single parameter of class org.w3c.dom.Node is required quite a lot in the XML configuration file loading process. The Class[] array kept in this attribute is required to invoke the method: #Class#.getConstructor(Class[]); This static attribute has been stored as a constant so the same Class array needn't be created each time one of this constructors has to be obtained. XML_NEURON_CONSTRUCTOR_ATTRIBUTE_SIGNATURE public static final Class[] XML_NEURON_CONSTRUCTOR_ATTRIBUTE_SIGNATURE A constructor with a two parameters of class org.w3c.dom.Node and com.jcortex.NeuralNetwork is needed quite a lot in the XML configuration file loading process. The Class[] array kept in this attribute is required to invoke the method: ##Class##.getConstructor(Class[]); This static attribute has been stored as a constant so the same Class array needn't be created each time one of this constructors has to be obtained. Class LoadAndStoreUtilities com.jcortex java.lang.Object com.jcortex.LoadAndStoreUtilities abstract public class LoadAndStoreUtilities extends Object An utilities class devoted to hold the methods which read and write the framework's data on to the local file system. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 190 Class LoadAndStoreUtilities Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary static NeuralNetwork Page readXMLNeuralNetwork(File xmlFile) Reads an XML file with a NeuralNetwork configuration stored and creates with this information a NeuralNetwork instance. static NeuralNetwork readXMLNeuralNetwork(String filePath) Reads an XML file - from a given path - with a NeuralNetwork configuration stored and creates with this information a NeuralNetwork instance. static File 192 writeXMLFile(File file, org.w3c.dom.Document xmlDoc) Static method for writing an XML file in the given File instance. static File 193 192 writeXMLFile(String filePath, org.w3c.dom.Document xmlDoc) Static method for writing an XML file at the selected spot. 191 Method Detail writeXMLFile public static File writeXMLFile(String filePath, org.w3c.dom.Document xmlDoc) throws Exception Static method for writing an XML file at the selected spot. This method is based on the (File, Document) implementation included in the same class. Parameters: filePath xmlDoc - The file's path on wich the XML document will be written. - The XML's document content. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 191 Class LoadAndStoreUtilities Returns: The written File instance. Throws: Exception - Exceptions can be thrown. writeXMLFile public static File writeXMLFile(File file, org.w3c.dom.Document xmlDoc) throws Exception Static method for writing an XML file in the given File instance. This method uses the DOM implementation as the XML data manager and uses a DOM tansformet to write the XML file into the file system. Parameters: file - The file on wich the XML document will be written. xmlDoc - The XML's document content. Returns: The written File instance. Throws: Exception - Exceptions can be thrown. readXMLNeuralNetwork public static NeuralNetwork readXMLNeuralNetwork(String filePath) throws Exception Reads an XML file - from a given path - with a NeuralNetwork configuration stored and creates with this information a NeuralNetwork instance. This method is based on its (File ) implementation included in this class. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 192 Class LoadAndStoreUtilities Parameters: filePath - The XML file with the NeuralNetwork configuration. Returns: The NeuralNetwork instance created with the stored configuration. Throws: Exception readXMLNeuralNetwork public static NeuralNetwork readXMLNeuralNetwork(File xmlFile) throws Exception Reads an XML file with a NeuralNetwork configuration stored and creates with this information a NeuralNetwork instance. This method makes sure that there is a node as the root of the XML document and that this node has a child in it. If one of both is lacking, this can't be a NeuralNetwork configuration file. This method makes use of the XML-node based instance constructor that mus appear in all final NeuralNetwork classes. Parameters: xmlFile - The XML file with the NeuralNetwork configuration. Returns: The NeuralNetwork instance created with the stored configuration. Throws: Exception Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 193 Class Messages Class Messages com.jcortex java.lang.Object com.jcortex.Messages public class Messages extends Object Class in charge of obtaining the localized messages for the JCortex framework. This class is based on the use of java.util.ResourceBundle. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary protected Messages() Method Summary static String 195 195 getString(String key, Object arg1, Object arg2) Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. static String Page getString(String key, Object arg1) Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. static String 195 getString(String key) Obtains a localized text for the given key, from the resource bundle indicated by RESOURCE_BUNDLE. static String Page 196 getString(String key, Object arg1, Object arg2, Object arg3) Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 197 194 Class Messages static String getString(String Object arg4) key, Object arg1, Object arg2, Object arg3, Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. static String 197 getString(String key, Object[] args) Obtains a localized text for the given key, replacing the placeholders with a variable number of parameters submitted submitted as an Object array. 198 Constructor Detail Messages protected Messages() Method Detail getString public static String getString(String key) Obtains a localized text for the given key, from the resource bundle indicated by RESOURCE_BUNDLE. Parameters: key - The key for which the localized text is looked up. Returns: The localyzed text with the placeholders replaced. getString public static String getString(String key, Object arg1) Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 195 Class Messages This method is really a wrapper for this class' public static String getString(String key, Object[] args) method. The Object parameters received are put into a newly created Object[] array. Parameters: key - The key for which the localized text is looked up. arg1 - The argument that will replace the first placeholder in the text. Returns: The localyzed text with the placeholders replaced. getString public static String getString(String key, Object arg1, Object arg2) Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. This method is really a wrapper for this class' public static String getString(String key, Object[] args) method. The Object parameters received are put into a newly created Object[] array. Parameters: key - The key for which the localized text is looked up. arg1 - The argument that will replace the first placeholder in the text. arg2 - The argument that will replace the second placeholder in the text. Returns: The localyzed text with the placeholders replaced. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 196 Class Messages getString public static String getString(String Object Object Object key, arg1, arg2, arg3) Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. This method is really a wrapper for this class' public static String getString(String key, Object[] args) method. The Object parameters received are put into a newly created Object[] array. Parameters: key - The key for which the localized text is looked up. arg1 - The argument that will replace the first placeholder in the text. arg2 - The argument that will replace the second placeholder in the text. arg3 - The argument that will replace the third placeholder in the text. Returns: The localyzed text with the placeholders replaced. getString public static String getString(String Object Object Object Object key, arg1, arg2, arg3, arg4) Obtains a localized text for the given key, replacing the placeholders with the parameters submitted. This method is really a wrapper for this class' public static String getString(String key, Object[] args) method. The Object parameters received are put into a newly created Object[] array. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 197 Class Messages Parameters: key - The key for which the localized text is looked up. arg1 - The argument that will replace the first placeholder in the text. arg2 - The argument that will replace the second placeholder in the text. arg3 - The argument that will replace the third placeholder in the text. arg4 - The argument that will replace the fourth placeholder in the text. Returns: The localyzed text with the placeholders replaced. getString public static String getString(String key, Object[] args) Obtains a localized text for the given key, replacing the placeholders with a variable number of parameters submitted submitted as an Object array. Parameters: key - The key for which the localized text is looked up. args - The array of arguments that will replace the placeholders. Returns: The localyzed text with the placeholders replaced. Interface NetworkFunction com.jcortex All Known Implementing Classes: LinearBasisFunction, RadialBasisFunction Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 198 Interface NetworkFunction public interface NetworkFunction Interface defining the contract for the Network Functions available in the framework or user-developed. The Network Function has its origin in the McCullock-Pitts neuron model. This function merges the neuron's parents' values into a single number. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary float Page getSolution(Collection axonSourceEntries) Calculates the input value to the neuron, from the values provided its input connections and weights, given all as SourceEntry instances. 199 Method Detail getSolution public float getSolution(Collection axonSourceEntries) Calculates the input value to the neuron, from the values provided its input connections and weights, given all as SourceEntry instances. Parameters: axonSourceEntries - A Collection of AxonSourceEntry instances. Returns: The network value calculated. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 199 Class NeuralNetwork Class NeuralNetwork com.jcortex java.lang.Object com.jcortex.NeuralNetwork Direct Known Subclasses: FeedForwardNeuralNetwork, KohonenNeuralNetwork HopfieldNeuralNetwork, abstract public class NeuralNetwork extends Object Abstract class that must be extended by all the specific Artificial Neural Network models. This class covers the basic common functionalities and the defines the contract all Neural Networks must commit to. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Field Summary protected InputTranslator Page inputTranslator This network's input translator. protected List neurons This neural network's list of neurons. protected OutputTranslator 203 outputTranslator This network's output translator. protected Sensor[] 203 204 sensors This network's sensor list. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 204 200 Class NeuralNetwork protected Teacher teacher 203 This neural network's associated teacher. Constructor Summary Page NeuralNetwork(int neuronCount, int inputsNum, inputTranslator, OutputTranslator outputTranslator) InputTranslator 204 Creates brand-new instances of NeuralNetwork. NeuralNetwork(org.w3c.dom.Node nnRoot) Creates a NeuralNetwork instance based on its XML representation. Method Summary void Page addEndNeuron(AxonSource neuron) Adds a neuron - taken as an AxonSource instance - into this network's collection of End Neurons. void This method encapsulates the whole process of creating Document with the XML representation of this NeuralNetwork instance. 205 getConnectedNeurons() Obtains the collection of the neurons that are directly connected to this NeuralNetwork instance. Collection 213 getAttributeCount() Obtains the number of input attributes this neural network has been built to. Collection 205 export2XMLDocument() a int 210 createNeuralNetwork(org.w3c.dom.Node nnNode) Static method that encapsulates the creation of a neural network from a "neuralNetwork" XML node. final org.w3c.dom.Document 210 addNeurons(List neurons_) Adds a list of Neuron instances to this Neural Network. static final NeuralNetwork 208 addNeuron(Neuron neuron) Adds a Neuron instance to this Neural Network. void 208 addFirstNeuron(AxonReceiver neuron) Adds a neuron, considered as its AxonReceiver interface into the neural network's first-neurons-collection. void 204 207 getEndNeurons() Obtains the collection of the ending neurons of this NeuralNetwork instance. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 207 201 Class NeuralNetwork InputTranslator getInputTranslator() 213 Obtains this network's Input Translator. Neuron getNeuron(int id) 211 Obtains a neuron, given its ID number. int getNeuronCount() Obtains the number of neurons in the neural network. List getNeurons() 207 Obtains the list of neurons hold by this network. OutputTranslator getOutputTranslator() 213 Obtains this network's Output Translator. Sensor getSensor(int id) 209 Obtains a sensor given its ID number. int getSensorCount() Obtains the number of sensors in this instance. Sensor[] NeuralNetwork 210 getSensors() Obtains this NeuralNetwork instance's sensor array. Teacher NeuralNetwork 211 neuralNetwork2xml(org.w3c.dom.Node org.w3c.dom.Document document) Obtains representation. abstract float[] this NeuralNetwork docRoot, instance's XML 208 setInputTranslator(InputTranslator inputTranslator) Sets this network's Input Translator. void 209 setFirtsNeurons(Collection firstNeurons) Sets the collection of the neurons that are directly connected to this NeuralNetwork instance. void 206 setEndNeurons(Collection endNeurons) Sets the end neuron collection. void 212 pureThink(float[] inputData) Makes the specific numerical thinking for each neural network model. void 210 getTeacher() Obtains the teacher associated to this instance. final void 205 213 setOutputTranslator(OutputTranslator outputTranslator) Sets this network's Output Translator. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 214 202 Class NeuralNetwork void setTeacher(Teacher teacher) Sets the teacher associated to this instance. protected abstract void NeuralNetwork 211 specificNeuralNetwork2xml(org.w3c.dom.Element org.w3c.dom.Document document) nnRoot, A Template Method (GoF) that must be implemented for every specific kind of NeuralNetwork. Object think(Object inputData) This method encapsulates the "thinking" process of this neural network's instance. abstract String 206 toHTMLString() Abstract method requiring every NeuralNetwork to be able to produce a String representation of itself with HTML tags to set its style. abstract String 212 214 toString() Abstract method requiring every NeuralNetwork to be able to produce a String representation of itself. 214 Field Detail teacher protected Teacher teacher This neural network's associated teacher. Its visibility is protected to allow a quicker use from its subclasses. neurons protected List neurons This neural network's list of neurons. Its visibility is protected to allow a quicker use from its subclasses. inputTranslator protected InputTranslator inputTranslator Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 203 Class NeuralNetwork This network's input translator. Its visibility is protected to allow a quicker use from its subclasses. outputTranslator protected OutputTranslator outputTranslator This network's output translator. Its visibility is protected to allow a quicker use from its subclasses. sensors protected Sensor[] sensors This network's sensor list. Its visibility is protected to allow a quicker use from its subclasses. Constructor Detail NeuralNetwork public NeuralNetwork(int neuronCount, int inputsNum, InputTranslator inputTranslator, OutputTranslator outputTranslator) Creates brand-new instances of NeuralNetwork. NeuralNetwork public NeuralNetwork(org.w3c.dom.Node nnRoot) throws ReadingException Creates a NeuralNetwork instance based on its XML representation. Throws: ReadingException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 204 Class NeuralNetwork Method Detail createNeuralNetwork public static final NeuralNetwork createNeuralNetwork(org.w3c.dom.Node nnNod e) throws ReadingException Static method that encapsulates the creation of a neural network from a "neuralNetwork" XML node. This method looks into the node in order to obtain the specific NeuralNetwork subclass that must be instatiated. Once it obtains the class' name, it produces the Class object and looks for the constructor with the JCortexConstants.XML_SIMPLE_CONSTRUCTOR_ATTRIBUTE_SIGNATURE signature. Parameters: nnNode - A node with the neural network's configuration. Returns: An instance of NeuralNetwork created with the node's configuration. Throws: ReadingException getNeuronCount public int getNeuronCount() Obtains the number of neurons in the neural network. This method does not include sensors in the count. Returns: The number of neurons. getAttributeCount public int getAttributeCount() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 205 Class NeuralNetwork Obtains the number of input attributes this neural network has been built to. Returns: The number of input attributes. think public Object think(Object inputData) throws IllegalArgumentException This method encapsulates the "thinking" process of this neural network's instance. It receives an object as the input data and translates it to a number representation. Once translated, this method invokes the pureThink() that must be developed in each specific neural network model. The result of this method is passed through the output translator before it is offered back to the invoker. This method requires the Template Method (GoF) pureThink(). Parameters: inputData - The object that serves as input data for the neural network. Returns: An object containing the answer given by the neral network. Throws: IllegalArgumentException pureThink public abstract float[] pureThink(float[] inputData) throws IllegalArgumentException Makes the specific numerical thinking for each neural network model. It behaves as the Template Method (GoF) for the think() method. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 206 Class NeuralNetwork Parameters: inputData - The numerical input data. Returns: returns The numerical result of passing the input through the network. Throws: IllegalArgumentException getNeurons public List getNeurons() Obtains the list of neurons hold by this network. Returns: The list of neurons. getConnectedNeurons public Collection getConnectedNeurons() Obtains the collection of the neurons that are directly connected to this NeuralNetwork instance. There can be more neurons in the network connected to these in further layers. Returns: A collection with the directly connected neurons. getEndNeurons public Collection getEndNeurons() Obtains the collection of the ending neurons of this NeuralNetwork instance. These neurons are the ones asked to know the Networks final result. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 207 Class NeuralNetwork The End Neurons can be known as well as the network's Output Neurons as their internal state will be considered as the output of the Neural Network. Returns: A collections with the last neurons in the network. addFirstNeuron public void addFirstNeuron(AxonReceiver neuron) Adds a neuron, considered as its network's first-neurons-collection. AxonReceiver interface into the neural This method does not include this neuron inside the collection of all the neurons in the neural network. It does find out before adding this neuron if it is already in the fist-neurons-collection. Parameters: neuron - The new neuron to be included in the collection. setFirtsNeurons public void setFirtsNeurons(Collection firstNeurons) Sets the collection of the neurons that are directly connected to this NeuralNetwork instance. There can be more neurons in the network connected to these in further layers. Parameters: firstNeurons - The collection of directly connected neurons. addEndNeuron public void addEndNeuron(AxonSource neuron) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 208 Class NeuralNetwork Adds a neuron - taken as an collection of End Neurons. AxonSource instance - into this network's Parameters: - The collection. neuron AxonSource instance to be added to the End Neurons setEndNeurons public void setEndNeurons(Collection endNeurons) Sets the end neuron collection. Parameters: endNeurons - The new end neurons collection. getSensor public Sensor getSensor(int id) Obtains a sensor given its ID number. The sensors' ID is always a negative number, so it will have to be transformed in order to be looked up in the array as ann index, according to the following distribution diagram: __________________ |-1|-2|-3|-4|...|-n| |__|__|__|__|___|__| 0 1 2 3 ... n-1 Parameters: id - The requested sensor's ID number. Returns: The Sensor instance requested. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 209 Class NeuralNetwork getSensors public Sensor[] getSensors() Obtains this NeuralNetwork instance's sensor array. Returns: An array with this network's sensors. getSensorCount public int getSensorCount() Obtains the number of sensors in this NeuralNetwork instance. Returns: The number of sensors. addNeuron public void addNeuron(Neuron neuron) Adds a Neuron instance to this Neural Network. The instance passed as an argument is placed in this network's neurons list at the place stated by the neuron's ID number. Parameters: neuron - The Neuron to be added. addNeurons public void addNeurons(List neurons_) Adds a list of Neuron instances to this Neural Network. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 210 Class NeuralNetwork Each Neuron instance passed is placed in this network's neurons list at the place stated by the neuron's ID number. getNeuron public Neuron getNeuron(int id) Obtains a neuron, given its ID number. Parameters: id - The requested neuron's id number. Returns: The neuron requested. getTeacher public Teacher getTeacher() Obtains the teacher associated to this NeuralNetwork instance. Returns: The associated teacher. setTeacher public void setTeacher(Teacher teacher) Sets the teacher associated to this NeuralNetwork instance. Parameters: teacher - The associated teacher. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 211 Class NeuralNetwork neuralNetwork2xml public final void neuralNetwork2xml(org.w3c.dom.Node docRoot, org.w3c.dom.Document document) Obtains this NeuralNetwork instance's XML representation. This method is responsable for creating the node for every kind of NeuralNetwork instance and storing the information it knows at this abstraction level. * It requires the Template Method (GoF) specificNeuralNetwork2xml() defined in this abstract class. Parameters: - The root node to which this neural network's node has to be attatched. docRoot - The original XML document used for the creation of nodes and other elements needed for representing this networks configuration. document specificNeuralNetwork2xml protected abstract void specificNeuralNetwork2xml(org.w3c.dom.Element nnRoot , org.w3c.dom.Document docum ent) A Template Method (GoF) that must be implemented for every specific kind of NeuralNetwork. Its specific information must be put - or appended - inside the XML node provided. Parameters: nnRoot - The networl's node on to which the specific model's info must be put. - The original XML document used for the creation of nodes and other elements needed for representing this networks configuration. document Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 212 Class NeuralNetwork export2XMLDocument public final org.w3c.dom.Document export2XMLDocument() This method encapsulates the whole process of creating a Document with the XML representation of this NeuralNetwork instance. It calls the neuralNetwork2XML() implemented by this abstract class. Returns: A XML document configuration. containing this NeuralNetwork instance's getInputTranslator public InputTranslator getInputTranslator() Obtains this network's Input Translator. Returns: This network's Input Translator. setInputTranslator public void setInputTranslator(InputTranslator inputTranslator) Sets this network's Input Translator. Parameters: inputTranslator - This network's Input Translator. getOutputTranslator public OutputTranslator getOutputTranslator() Obtains this network's Output Translator. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 213 Class NeuralNetwork Returns: This network's Output Translator. setOutputTranslator public void setOutputTranslator(OutputTranslator outputTranslator) Sets this network's Output Translator. Parameters: outputTranslator - This network's Output Translator. toString public abstract String toString() Abstract method requiring every NeuralNetwork to be able to produce a String representation of itself. Overrides: toString in class Object Returns: A String representation of this NeuralNetwork instance. toHTMLString public abstract String toHTMLString() Abstract method requiring every NeuralNetwork to be able to produce a String representation of itself with HTML tags to set its style. Make it cute & smart as it will be the one shown! Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 214 Class NeuralNetwork Returns: A String representation of this NeuralNetwork instance. Class Neuron com.jcortex java.lang.Object com.jcortex.Neuron All Implemented Interfaces: AxonReceiver, AxonSource Direct Known Subclasses: FeedForwardNeuron, KohonenNeuron abstract public class Neuron extends Object implements AxonSource, AxonReceiver bstract class extended to represent the generic role of a neuron inside a Neural Networ's structure. To put it simple, a Neuron is an element from a Neural Network that haves both the role of an AxonSource and an AxonReceiver. Although, this abstract class is much more than this: it provides the common functionality required by all kinds of Neuron implementations, and assures its instances' hability to make a synapse(). Author: Miguel Lara Encabo - [email protected] Version: 0.1b Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 215 Class Neuron Field Summary Page static final short RANDOM_CLOSE_TO_ZERO_VALUE static final short RANDOM_INITIAL_VALUE static final short ZERO_INITIAL_VALUE 217 Values are initialized with a low random number. 217 Values are initialized with a random number. 217 Values are initialized with 0. Constructor Summary Page Neuron(int id) 217 Creates a brand new neuron. Neuron(org.w3c.dom.Node neuronRoot, NeuralNetwork nn) 217 Creates a neuron from its XML representation. Method Summary boolean Page equals(Object obj) Compares this neuron with an Axon Source object. abstract Collection getConnectedNeurons() Gets the AxonReceivers connected to this Neuron. int 218 neuron2xml(org.w3c.dom.Document document) Obtains the XML serialized representation of this Neuron. protected abstract void specificNeuron2xml(org.w3c.dom.Element org.w3c.dom.Document document) 218 neuronRoot, A template method for putting in the neuron's tag the specific attributes of each kind of neuron. String 218 getId() Obtains this neuron's id number. final org.w3c.dom.Node 220 219 toString() Obtains the String representation of this Neuron. 219 Methods inherited from interface com.jcortex.AxonSource addConnectedNeuron, getAxonValue, getId, produceAxonValue Methods inherited from interface com.jcortex.AxonReceiver addEntry, addEntry, getEntries, getEntryWeight, getId, setEntryWeight Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 216 Class Neuron Field Detail ZERO_INITIAL_VALUE public static final short ZERO_INITIAL_VALUE Values are initialized with 0. RANDOM_INITIAL_VALUE public static final short RANDOM_INITIAL_VALUE Values are initialized with a random number. RANDOM_CLOSE_TO_ZERO_VALUE public static final short RANDOM_CLOSE_TO_ZERO_VALUE Values are initialized with a low random number. Constructor Detail Neuron public Neuron(int id) Creates a brand new neuron. Neuron public Neuron(org.w3c.dom.Node neuronRoot, NeuralNetwork nn) Creates a neuron from its XML representation. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 217 Class Neuron Method Detail getId public int getId() Obtains this neuron's id number. Specified by: getId in interface AxonSource getId in interface AxonReceiver Returns: The id number. getConnectedNeurons public abstract Collection getConnectedNeurons() Gets the AxonReceivers connected to this Neuron. Returns: A Collection instance if there are any, null if no neurons can be connected. neuron2xml public final org.w3c.dom.Node neuron2xml(org.w3c.dom.Document document) Obtains the XML serialized representation of this Neuron. This method requires the Template Method (GoF) specificNeuron2xml() method required by this abstract class's contract for all the specific neural network implementations. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 218 Class Neuron Parameters: document - The XML document needed to create the nodes and elements. Returns: The XML node with this neuron's configuration. specificNeuron2xml protected abstract void specificNeuron2xml(org.w3c.dom.Element neuronRoot, org.w3c.dom.Document document) A template method for putting in the neuron's tag the specific attributes of each kind of neuron. This method acts as a Template Method (GoF) for this class' method. neuron2xml() Parameters: neuronRoot document - The XML node that contains this neuron's configuration. - The XML document used for the creation of new elements. toString public String toString() Obtains the String representation of this Neuron. Overrides: toString in class Object Returns: The String representation of this Neuron. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 219 Class Neuron equals public boolean equals(Object obj) Compares this neuron with an Axon Source object. Overrides: equals in class Object Returns: True if both objects are AxonSources and have the same id number. Interface OutputTranslator com.jcortex All Known Implementing Classes: SingleBooleanOutputTranslator, TransparentOutputTranslator public interface OutputTranslator Interface defining the contract for the Output Translator available in the framework or user-developed. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary float[] Page getOutputBackTranslation(Object desired_output) Translates a desired result into the numerical value it should have produced. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 221 220 Interface OutputTranslator Object getOutputTranslation(float[] input_value) Translates the numerical value given out by neurons as an object that can be taken as the qualitative result given by the network. 221 Method Detail getOutputTranslation public Object getOutputTranslation(float[] input_value) Translates the numerical value given out by neurons as an object that can be taken as the qualitative result given by the network. Parameters: input_value - The float array that is the result of the neural network's process. Returns: The Object returned as a qualitative response from the neural network. getOutputBackTranslation public float[] getOutputBackTranslation(Object desired_output) Translates a desired result into the numerical value it should have produced. Parameters: desired_output - The object that is the desired output for an example. Returns: The Object returned as a qualitative response from the neural network. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 221 Class ProgressAnalyzer Class ProgressAnalyzer com.jcortex java.lang.Object com.jcortex.ProgressAnalyzer Direct Known Subclasses: ComposedProgressAnalyzer, ValueVariationAnalyzer ValueDecreaseAnalyzer, abstract public class ProgressAnalyzer extends Object This is the Component element in the Composite GoF Desing Pattern. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary Page ProgressAnalyzer() 223 Method Summary Page void add(ProgressAnalyzer analyzer) Adds a ProgessAnalyzer to this composite node. ProgressAnalyzer getInnerAnalyzers(int ix) Obtains a ProgessAnalyzer instance from the list, given its index. abstract String 223 224 getReasonToStop() Obtains the description of the reason why this analyzer has stopped the training process it was following, if indeed it has. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 224 222 Class ProgressAnalyzer abstract boolean isProgressGoodEnough() Decides if the progress monitored ProgessAnalyzer is good enough to continue. void by this 224 from this 223 remove(ProgressAnalyzer analyzer) Removes a compositing node. ProgessAnalyzer instance Constructor Detail ProgressAnalyzer public ProgressAnalyzer() Method Detail add public void add(ProgressAnalyzer analyzer) Adds a ProgessAnalyzer to this composite node. By default, an empty implementation is supplied. Parameters: analyzer - The progress analyzer to be added. remove public void remove(ProgressAnalyzer analyzer) Removes a ProgessAnalyzer instance from this compositing node. By default, an empty implementation is supplied. Parameters: analyzer - The progress analyzer to be removed. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 223 Class ProgressAnalyzer getInnerAnalyzers public ProgressAnalyzer getInnerAnalyzers(int ix) Obtains a ProgessAnalyzer instance from the list, given its index. By default, an empty implementation is supplied. Parameters: ix - The index of the desired analyzer. Returns: The requested ProgessAnalyzer instance. isProgressGoodEnough public abstract boolean isProgressGoodEnough() Decides if the progress monitored by this ProgessAnalyzer is good enough to continue. Returns: A boolean value indicating if the training should continue (true) or not (false). getReasonToStop public abstract String getReasonToStop() Obtains the description of the reason why this analyzer has stopped the training process it was following, if indeed it has. Returns: The reason why this analyzer has decided to stop the training. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 224 Class ReadingException Class ReadingException com.jcortex java.lang.Object java.lang.Throwable java.lang.Exception com.jcortex.ReadingException All Implemented Interfaces: Serializable public class ReadingException extends Exception Exception thrown when there is an exception reading a local file from the file system. It usually happens when loading a NeuralNetwork's XML configuration file. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary Page ReadingException(String message) Default constructor for this exception. 225 Constructor Detail ReadingException public ReadingException(String message) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 225 Class ReadingException Default constructor for this exception. Class Sensor com.jcortex java.lang.Object com.jcortex.Sensor All Implemented Interfaces: AxonSource public class Sensor extends Object implements AxonSource The sensor is interface placed between the data entrance and the neurons or other mechanisms stored inside the NeuralNetwork. A Sensor instance is just a buffer element that stores the value set as input for the NeuralNetwork. Sensor implements the AxonSource interface so its instances will be able to provide AxonReceiver subclasses the stored value. Both the NeuralNetwork or the first layer of AxonReceivers (these can be Neurons themselves) can access and grab the value buffered in the sensor. A value continues to be stored and provided by the Sensor instance until it is changed to a new one. All sensors' ids are negative numbers starting at -1 and decreasing until -inf. By thesemeans they are distinguished from the Neuron's ids which are positive starting at 0 and increasing to +inf. Author: Miguel Lara Encabo - [email protected] Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 226 Class Sensor Version: 0.1b Constructor Summary Page Sensor(int id, NeuralNetwork parentNetwork) Complete sensor builder. Method Summary void 229 setValue(float value_) Sets this sensor's buffered value. String 228 produceAxonValue() Dummy method as sensors don't really produce any values. void 228 getId() Gets this Sensor instance's id. float 229 getAxonValue() Gets the value buffered inside the sensor. int Page addConnectedNeuron(AxonReceiver child, boolean connect_back) Adds a neuron as a child to this sensor. float 227 228 toString() Obtains a String representation of this Sensor instance. 229 Methods inherited from interface com.jcortex.AxonSource addConnectedNeuron, getAxonValue, getId, produceAxonValue Constructor Detail Sensor public Sensor(int id, NeuralNetwork parentNetwork) Complete sensor builder. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 227 Class Sensor Method Detail setValue public void setValue(float value_) Sets this sensor's buffered value. Parameters: value_ - The value. getId public int getId() Gets this Sensor instance's id. Specified by: getId in interface AxonSource Returns: The id. getAxonValue public float getAxonValue() Gets the value buffered inside the sensor. Specified by: getAxonValue in interface AxonSource Returns: The value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 228 Class Sensor produceAxonValue public float produceAxonValue() Dummy method as sensors don't really produce any values. They just buffer them. Specified by: produceAxonValue in interface AxonSource Returns: 0f, What d'ya want? Its a dummy! addConnectedNeuron public void addConnectedNeuron(AxonReceiver child, boolean connect_back) Adds a neuron as a child to this sensor. The child will be an AxonReceiver implementation. There is no use for the Sensor instance knowing which AxonReceiver instances are connected to it. These AxonReceiver instances will really be the first-layer neurons for the NeuralNetwork: from which the propagation is really started. Specified by: addConnectedNeuron in interface AxonSource Parameters: - An AxonReceiver that will be connected as a child to this AxonSource. child connect_back - If it is true this sensor will add itself to its child as an entry. toString public String toString() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 229 Class Sensor Obtains a String representation of this Sensor instance. Overrides: toString in class Object Returns: A String representation of this instance. Class Statistics com.jcortex java.lang.Object com.jcortex.Statistics public class Statistics extends Object Holds the progress statistics for a training session. Each instance of the training session. Statistics class serves to collect all the values recorded for a This classes' instances play their role in the GoF Observer Design Pattern. They are responsible for managing the list of listeners and notifying them with the relevant changes. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 230 Class Statistics Constructor Summary Page Statistics() Default builder for the Statistics system. 232 Statistics(String[] measureList, long aproxMaxIteration) Default builder for the Statistics system. Method Summary void 232 Page addRegister(String measure, long iteration, float value) Adds a register to one of the measures 232 This method encapsulates the full Register creation process so as to simplify the work of the Teacher. void addStatisticsListener(StatisticsListener statsListener) Adds a StatisticsListener to the list of listeners syndicated 233 to this Statistics instance. void finishedStats() Method used to close the stats from outside. StatsMeasure 235 getMeasure(String measure) Obtains the Measure instance associated to the given String 233 key. float getProgress() Evaluates the progress of the training session as the percentage of iterations done, assuming the maximum iteration number given as the total ammount of iterations to be done. Iterator iterator() Obtains a Iterator instance that can go though all the values recorded in this Statistics instance. protected void 234 notifyUpdate2Listeners() This method notifies all syndicated listeners that there has been an update to the training statistics. void 233 notifyEnd2Listeners() This method notifies all syndicated listeners that the training has finished. protected void 235 234 removeStatisticsListener(StatisticsListener statsListener) Removes a StatisticsListener from the list of listeners syndicated to this Statistics instance. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 234 231 Class Statistics Constructor Detail Statistics public Statistics() Default builder for the Statistics system. It creates the Statistics instance still without knowing the number or names o the StatsMeasures it will have to deal with. This method initialyzes the variables and creates the data structures. Each instance of training session. Statistics serves to collect all the values recorded for a Statistics public Statistics(String[] measureList, long aproxMaxIteration) Default builder for the Statistics system. It creates the Statistics instance still for the known the number or names o the StatsMeasures it will have to deal with. This method initialyzes the variables and creates the data structures. It creates as well the StatsMeasure instances submitted as parameters for this constructor. Each instance of training session. Statistics serves to collect all the values recorded for a Method Detail addRegister public void addRegister(String measure, long iteration, float value) Adds a register to one of the measures Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 232 Class Statistics This method encapsulates the full the work of the Teacher. Register creation process so as to simplify Parameters: - The key, and name, of the register has been recorded. measure iteration value Measure instance for which the - The iteration number at which the register was recorded. - The value to be recorded in the register. getMeasure public StatsMeasure getMeasure(String measure) Obtains the Measure instance associated to the given String key. Parameters: measure - The key, and name, of the Measure instance requested. Returns: The Measure instance requested. iterator public Iterator iterator() Obtains a instance that can go though all the values recorded in this Statistics instance. Iterator Returns: The instance that can go though all the values in this Statistics instance. Iterator addStatisticsListener public void addStatisticsListener(StatisticsListener statsListener) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 233 Class Statistics Adds a to the list of listeners syndicated to this StatisticsListener Statistics instance. Parameters: statsListener - The StatisticsListener to be added to the syndication list. removeStatisticsListener public void removeStatisticsListener(StatisticsListener statsListener) Removes a Statistics StatisticsListener from the list of listeners syndicated to this instance. Parameters: statsListener - The StatisticsListener to be removed from the syndication list. notifyUpdate2Listeners protected void notifyUpdate2Listeners() This method notifies all syndicated listeners that there has been an update to the training statistics. Not all registers added are notified to the listeners. The NOTIFICATION_GAP dictates the number of updates done to this Statistics instance, before a change is actually notified. To make this notification, it invokes the all StatisticListener instances. .statsClosed() method obliged for notifyEnd2Listeners protected void notifyEnd2Listeners() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 234 Class Statistics This method notifies all syndicated listeners that the training has finished. To make this notification, it invokes the all StatisticListener instances. .statsClosed() method obliged for finishedStats public void finishedStats() Method used to close the stats from outside. Its only responsability is to call this class' method in charge of notifying all listeners that the training has ended. getProgress public float getProgress() Evaluates the progress of the training session as the percentage of iterations done, assuming the maximum iteration number given as the total ammount of iterations to be done. Returns: The training session's progress presented as the percentage of work done. Class StatisticsEvent com.jcortex java.lang.Object java.util.EventObject com.jcortex.StatisticsEvent All Implemented Interfaces: Serializable Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 235 Class StatisticsEvent public class StatisticsEvent extends EventObject Event element created in order to send a notification to a listener. This class plays its role in the GoF Observer Design Pattern by allowing the listener to know which Statistics instance was the source of a notification. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary Page StatisticsEvent(Object source) Creates a statistics event that can be used by the listener to identify the source of its notifications. 236 Constructor Detail StatisticsEvent public StatisticsEvent(Object source) Creates a statistics event that can be used by the listener to identify the source of its notifications. Interface StatisticsListener com.jcortex public interface StatisticsListener Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 236 Interface StatisticsListener This interface defines the contract obliged to any class that wants to be notified by upgrades and the closing of a training session's statistics. This part of a GoF Observer Design Pattern implementation (known as listeners in Java). Author: Miguel Lara Encabo - [email protected] Version: 0.1b Method Summary void Page statsClosed(StatisticsEvent statisticsEvent) Method use to notify the lister that the training session has ended. void 237 statsUpdate(StatisticsEvent statisticsEvent) Method use to notify the lister that a relevant update has taken place in the Statistics instance, during the training session. 237 Method Detail statsUpdate public void statsUpdate(StatisticsEvent statisticsEvent) Method use to notify the lister that a relevant update has taken place in the Statistics instance, during the training session. Parameters: statisticsEvent - The event that shows the source of this notification. statsClosed public void statsClosed(StatisticsEvent statisticsEvent) Method use to notify the lister that the training session has ended. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 237 Interface StatisticsListener Parameters: statisticsEvent - The event that shows the source of this notification. Class StatsMeasure com.jcortex java.lang.Object com.jcortex.StatsMeasure public class StatsMeasure extends Object This class models the dimensions - or measures recorded in the statistics. Each instance from this class collects all the records from the same kind of measurements. The measure keeps its own statistics as for its maximum, minimum and accumulate values, in case these are requested by the Author: Miguel Lara Encabo - [email protected] Version: 0.1b Constructor Summary Page StatsMeasure(String name_) Instance builder that initializes this measure's name, data structure and its own statistic values. 239 Method Summary Page void addRegister(StatsRegister sr) Adds a register to this measure. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 240 238 Class StatsMeasure float getAverage() Obtains the stored registers' average value. StatsRegister getLastRegister() Obtains the last register put into this instance. float 240 iterator() Obtains an stored. void 241 getRegisters() Gets the vector of registers recorded for this measure. Iterator 239 getRegister(int ix) Gets a certain register, given its index in the list. List 242 getName() Obtains this measure's name. StatsRegister 241 getMin() Obtains the minimum value recorded String 242 getMax() Obtains the maximum value recorded. float 241 Iterator instance that can access all the registers 241 setName(String name) Sets this measure's name. 240 Constructor Detail StatsMeasure public StatsMeasure(String name_) Instance builder that initializes this measure's name, data structure and its own statistic values. To start with, the maximum and minimum values set for this measure are the minimum and maximum values - respectively - that a float type can hold. Method Detail getName public String getName() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 239 Class StatsMeasure Obtains this measure's name. Returns: This measure's name. setName public void setName(String name) Sets this measure's name. Parameters: name - The new name for this measure. getRegisters public List getRegisters() Gets the vector of registers recorded for this measure. Returns: The vector of registers recorded. addRegister public void addRegister(StatsRegister sr) Adds a register to this measure. In the process it updates the statistics held for this measure. Parameters: sr - The new register to be added to the list. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 240 Class StatsMeasure getRegister public StatsRegister getRegister(int ix) Gets a certain register, given its index in the list. Parameters: ix - The requested register's index. Returns: The requested register. iterator public Iterator iterator() Obtains an Iterator instance that can access all the registers stored. This iterator is obtained from the List interface obliged implementation. Returns: An iterator for this instance. getAverage public float getAverage() Obtains the stored registers' average value. Returns: The average value. getMax public float getMax() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 241 Class StatsMeasure Obtains the maximum value recorded. Returns: The maximum value. getMin public float getMin() Obtains the minimum value recorded Returns: The minimum value. getLastRegister public StatsRegister getLastRegister() Obtains the last register put into this instance. Returns: The last register recorded. Class StatsRegister com.jcortex java.lang.Object com.jcortex.StatsRegister All Implemented Interfaces: Comparable Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 242 Class StatsRegister public class StatsRegister extends Object implements Comparable The StatsRegister is the most basic element in the training Statistics system. Each instance of a StatsRegister stores the pair iteration - value that keeps the record of how the training is going on. The system's relationships work as follows: _______________ | | | StatsRegister |_______________|* ______________ | StatsMeasure 1|______________|* | |----| |----| ____________ | | Statistics | 1|____________| The idea is that for each statistic measure there will be quite a lot of registers recorded. There can be several measures in the overall training statistics. Constructor Summary Page StatsRegister(long iteration_, float value_) Creates a statsitic register storing the value of its measure at the given iteration. 244 Method Summary Page int compareTo(Object obj) Compares two StatsRegister instances. long getIteration() Gets the iteration at which this register was recorded. float 244 setIteration(long iteration) Sets the iteration at which this register was recorded. void 244 getValue() Obtains the value recorded. void 245 245 setValue(float value) Sets the value in this register. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 244 243 Class StatsRegister Constructor Detail StatsRegister public StatsRegister(long iteration_, float value_) Creates a statsitic register storing the value of its measure at the given iteration. Method Detail getValue public float getValue() Obtains the value recorded. Returns: The value. setValue public void setValue(float value) Sets the value in this register. Parameters: value - The value to be recorded. getIteration public long getIteration() Gets the iteration at which this register was recorded. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 244 Class StatsRegister Returns: The iteration. setIteration public void setIteration(long iteration) Sets the iteration at which this register was recorded. Parameters: iteration - The iteration. compareTo public int compareTo(Object obj) Compares two StatsRegister instances. The comparison is made on their chronological order, taking the iteration as the timestamp. Parameters: obj - The other StatsRegister instance to be compared with this one. Returns: 1 if this register was taken as at a latter iteration than the compared one. (This register is previous in chronological order.) 0 both registers are from the same iteration. -1 if this register was taken as at a former iteration than this one. (The given register one is previous in chronological order.) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 245 Class Teacher Class Teacher com.jcortex java.lang.Object com.jcortex.Teacher Direct Known Subclasses: DefaultHopfieldTeacher, DefaultKohonenTeacher, DefaultMultilayerPerceptronTeacher, DefaultPerceptronTeacher abstract public class Teacher extends Object The abstract class obliged to all Teachers of Neural Networks. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Field Summary static int Page VALIDATION_JUMP A validation will be made each VALIDATION_JUMP iterations. Constructor Summary 247 Page Teacher() The default creator is available for a brand new teacher creation. 248 Teacher(org.w3c.dom.Node teacherNode) An XML creator taken as a placeholder for XML source configurations. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 248 246 Class Teacher Method Summary abstract Statistics Page createStatsSchema() Creates the Statistics instance with the specific progress measures needed by each particular kind of Teacher. abstract Statistics educateNetwork(NeuralNetwork nn, exampleIObjects, Object[] exampleDObjects) 249 Object[] 248 Takes care of the training of a Neural Network. abstract ProgressAnalyzer getAnalyzer() Gets the progress analyzer used in this teacher's training. synchronized Statistics getStats() 249 Gets the statistics for this teacher's progress. protected abstract void specificTeacher2xml(org.w3c.dom.Element org.w3c.dom.Document document) teacherRoot, Dumps into the teacher's XML node this specific Teacher instance's configuration. abstract void 251 250 stopTraining() Stops the training if it is in progress, and it is possible to 250 do so. org.w3c.dom.Element teacher2xml(org.w3c.dom.Document document) Dumps into an XML Element instance this teacher's configuration. abstract String toHTMLString() Produces a String output with configuration represented with HTML code. static void 249 this teacher's 251 translateAndClassifyExamples(Object[] exampleIObjects, Object[] exampleDObjects, InputTranslator inputTranslator, OutputTranslator outputTranslator, float[][] trainingI, float[][] trainingD, float[][] validationI, float[][] validationD, float 251 validationPercent) Makes a random separation of the examples passed though the Object[] parameters into the training and validation sets. Field Detail VALIDATION_JUMP public static int VALIDATION_JUMP A validation will be made each VALIDATION_JUMP iterations. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 247 Class Teacher Constructor Detail Teacher public Teacher() The default creator is available for a brand new teacher creation. Teacher public Teacher(org.w3c.dom.Node teacherNode) An XML creator taken as a placeholder for XML source configurations. Method Detail educateNetwork public abstract Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) throws IllegalArgumentException Takes care of the training of a Neural Network. Parameters: nn - The neural network to be trained. exampleIObjects - The example input objects. exampleDObjects - The example output objects. Returns: The statistics for this training. Throws: IllegalArgumentException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 248 Class Teacher getStats public synchronized Statistics getStats() Gets the statistics for this teacher's progress. In case this teacher's Statistics instance does not exist, it will be created invoking the Template Method newStatsSchema() that must be implemented for each kind of Teacher final subclass. This method will be responsible of creating the Statistics with all the specific measures applicable for each Teacher, according to their nature. Returns: The Statistics instance updated by this teacher's training. createStatsSchema public abstract Statistics createStatsSchema() Creates the Statistics instance with the specific progress measures needed by each particular kind of Teacher. This is a Template Method (GoF). This method must be implemented by all final Teacher subclasses. Typically this method will be like: public Statistics createStatsSchema() { return new Statistics(new String[]{"Measure1", "Measure2",...}, maximumIterationNumber); } Returns: The new Statistics instance with the specific progress measures for this particular Teacher. teacher2xml public org.w3c.dom.Element teacher2xml(org.w3c.dom.Document document) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 249 Class Teacher Dumps into an XML Element instance this teacher's configuration. This method creates the XML node that holds this teacher's configuration, setting its name to and putting in a class attribute with the name of this specific Teacher intance's class. The rest of this specific instance's configuration is dumped into the Teacher's node using the Template Method specificTeacher2xml(Element, Document). Parameters: - The Document instance that will be the ultimate root for this XML structure. It is used in these methods to create the XML Elements and Nodes with its Factory Methods. document Returns: An XML Element instance holding this teacher's configuration. specificTeacher2xml protected abstract void specificTeacher2xml(org.w3c.dom.Element teacherRoot, org.w3c.dom.Document document) Dumps into the teacher's XML node this specific configuration. This is a Template Method (GoF). Teacher instance's Parameters: - The XML node in which this teacher's configuration must be dumped. teacherRoot - The Document instance that will be the ultimate root for this XML structure. It is used in these methods to create the XML Elements and Nodes with its Factory Methods. document stopTraining public abstract void stopTraining() Stops the training if it is in progress, and it is possible to do so. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 250 Class Teacher toHTMLString public abstract String toHTMLString() Produces a String output with this teacher's configuration represented with HTML code. Returns: A String representation of the Teacher's configuration written in HTML. getAnalyzer public abstract ProgressAnalyzer getAnalyzer() Gets the progress analyzer used in this teacher's training. Returns: The progress analyzed used. translateAndClassifyExamples public static void translateAndClassifyExamples(Object[] exampleIObjects, Object[] exampleDObjects, InputTranslator inputTransla tor, OutputTranslator outputTrans lator, float[][] trainingI, float[][] trainingD, float[][] validationI, float[][] validationD, float validationPercent) Makes a random separation of the examples passed though the Object[] parameters into the training and validation sets. In the process, these examples are translated as what we really need is the numerical representation. The percentage of examples in each group is determined by the validationPercent parameter for which 0 means all will be taken as training Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 251 Class Teacher examples, and 1 for all turning out to be validation examples (not much point on doing so, but it may come useful some how). For each set, two collections must be created: one with the input values (ending as *I) and another with the desired output values (ending as *D). These arrays must be created before invoking this method by using the code: // Obtains the number of examples devoted to each list int validationCount = (int) (exampleIObjects.length * validationPercent); int trainingCount = exampleIObjects.length validationCount; // The example and validation arrays float[][] trainingI = new float[trainingCount][]; // Training examples' inputs float[][] trainingD = new float[trainingCount][]; // Training examples' desired outputs float[][] validationI = new float[validationCount][]; // Validation examples' inputs float[][] validationD = new float[validationCount][]; // Validation examples' desired outputs // Translates and classifies the examples between the training and validation lists Teacher.translateAndClassifyExamples(exampleIObjects, exampleDObjects, inputTranslator, outputTranslator, trainingI, trainingD, validationI, validationD, validationPercent); Parameters: - The array with the complete set of untranslated inputs for the examples. exampleIObjects - The array with the complete set of untranslated desired outputs matchig the input examples. exampleDObjects inputTranslator - The input translator to be applied on the examples. outputTranslator - The input translator to be applied on the examples. - The array where the input values for the training example set are returned. trainingI - The array where the desired output values for the training example set are returned. trainingD - The array where the input values for the validation example set are returned. validationI Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 252 Class Teacher - The array where the desired output values for the validation example set are returned. validationD - [0,1] The percentage that controls the number of examples in each set. validationPercent Class ValueDecreaseAnalyzer com.jcortex java.lang.Object com.jcortex.ProgressAnalyzer com.jcortex.ValueDecreaseAnalyzer public class ValueDecreaseAnalyzer extends ProgressAnalyzer The instances of this class are responsable for taking the decision of when to stop a training, based on a statistics measure's progression. This way there will be a instance for each stats measure that the Teacher instance wants to be monitored for decision. Its intelligence operates inside the method isEvolutionGoodEnough(). This class is responsible of storing all progress information that is not reflected in the StatsMeasure instance associated, such as recen variations... It is thought best not to implement this class as a StatsListener, as its decision method isEvolutionGoodEnough() is not necessarily invoked each time a statistic register is recorded, but it will be promptly asked by the Teacher instance at work when a decision is required. The Value Decrease Analyzer takes its decision based on how well the values observed decrease. Author: Miguel Lara Encabo - [email protected] Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 253 Class ValueDecreaseAnalyzer Version: 0.1b Field Summary protected static float Page OVERFLOW_GIFT_GRACE Detemines the size of the margin under which an overflow from the correct progress is considered as acceptable. Constructor Summary ValueDecreaseAnalyzer(StatsMeasure statsMeasure, float bottomLimit, int studyWindowSize) 254 Page 255 The full constructor for the this classes instances. Method Summary String getReasonToStop() Obtains the reason why this analyzer has suggested to stop, if indeed it has. boolean Page 255 isProgressGoodEnough() Decides if the progress monitored by this ProgessAnalyzer is good enough to continue. 255 Methods inherited from class com.jcortex.ProgressAnalyzer add, getInnerAnalyzers, getReasonToStop, isProgressGoodEnough, remove Field Detail OVERFLOW_GIFT_GRACE protected static float OVERFLOW_GIFT_GRACE Detemines the size of the margin under which an overflow from the correct progress is considered as acceptable. The value must be between [0,1]. With 0 for no margin and 1 for the maximum margin possible. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 254 Class ValueDecreaseAnalyzer For more information on this parameter, take a look at the detailed documentation. Constructor Detail ValueDecreaseAnalyzer public ValueDecreaseAnalyzer(StatsMeasure statsMeasure, float bottomLimit, int studyWindowSize) The full constructor for the this classes instances. The attributes and the data structures are initialyzed with the given parameters. Method Detail isProgressGoodEnough public boolean isProgressGoodEnough() Decides if the progress monitored by this ProgessAnalyzer is good enough to continue. Studies the sequence of statistic registers generated. For more information look at the detailed documentation. Overrides: isProgressGoodEnough in class ProgressAnalyzer Returns: A boolean value indicating if the training should continue (true) or not (false). getReasonToStop public String getReasonToStop() Obtains the reason why this analyzer has suggested to stop, if indeed it has. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 255 Class ValueDecreaseAnalyzer Overrides: getReasonToStop in class ProgressAnalyzer Returns: The reason. Class ValueVariationAnalyzer com.jcortex java.lang.Object com.jcortex.ProgressAnalyzer com.jcortex.ValueVariationAnalyzer public class ValueVariationAnalyzer extends ProgressAnalyzer The instances of this class are responsable for taking the decision of when to stop a training, based on a statistics measure's progression. This way there will be a instance for each stats measure that the Teacher instance wants to be monitored for decision. The Value Decrease Analyzer takes its decision based on the quality of the value variations experienced by the network's parameters. A training will be considered to be going on well, when there the variation recorded is higher than a Constant-Variation. The training will be stopped when for a ConstantWindow lapse of iterations all values registered are bellow the Constant-Variation imposed. The Constant-Value is the value bellow which a variation is considered as constant. This way a variation does not necessarily have to be 0 to be considered insignificant, although it should be quite close to 0. Its intelligence operates inside the method isEvolutionGoodEnough(). This class is responsible of storing all progress information that is not reflected in the StatsMeasure instance associated, such as recen variations... Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 256 Class ValueVariationAnalyzer It is thought best not to implement this class as a StatsListener, as its decision method isEvolutionGoodEnough() is not necessarily invoked each time a statistic register is recorded, but it will be promptly asked by the Teacher instance at work when a decision is required. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Constructor Summary ValueVariationAnalyzer(StatsMeasure constantVariation, int constantWindow) Page statsMeasure, float 257 This class' basic constructor. Method Summary String getReasonToStop() Obtains the reason why this analyzer has suggested to stop, if indeed it has. boolean Page 258 isProgressGoodEnough() Decides if the progress monitored by this ProgessAnalyzer is good enough to continue. 258 Methods inherited from class com.jcortex.ProgressAnalyzer add, getInnerAnalyzers, getReasonToStop, isProgressGoodEnough, remove Constructor Detail ValueVariationAnalyzer public ValueVariationAnalyzer(StatsMeasure statsMeasure, float constantVariation, int constantWindow) This class' basic constructor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 257 Class ValueVariationAnalyzer Method Detail isProgressGoodEnough public boolean isProgressGoodEnough() Decides if the progress monitored by this ProgessAnalyzer is good enough to continue. Studies the sequence of statistic registers generated. For more information look at the detailed documentation. Overrides: isProgressGoodEnough in class ProgressAnalyzer Returns: A boolean value indicating if the training should continue (true) or not (false). getReasonToStop public String getReasonToStop() Obtains the reason why this analyzer has suggested to stop, if indeed it has. Overrides: getReasonToStop in class ProgressAnalyzer Returns: The reason. Package com.jcortex.activationFunctions Class Summary GaussianFunction Page The ActivationFunction implementation of the Gaussian Function. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 259 258 Package com.jcortex.activationFunctions HyperbolicTangentFunction The ActivationFunction implementation of the Hyperbolic Tangent Function. 262 IdentityFunction The ActivationFunction implementation of the Identity Function. 265 SigmoidalFunction The ActivationFunction implementation of the Sigmoidal Function. 268 SignFunction The ActivationFunction implementation of the Sign Function. 272 StepFunction The ActivationFunction implementation of the Step Function. 274 Class GaussianFunction com.jcortex.activationFunctions java.lang.Object com.jcortex.activationFunctions.GaussianFunction All Implemented Interfaces: ActivationFunction final public class GaussianFunction extends Object implements ActivationFunction The ActivationFunction implementation of the Gaussian Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 259 Class GaussianFunction Method Summary float[] Page getDefaultParameterSet() Obtains the default parameters for this Activation Function. static GaussianFunction getInstance() Obtains the Singleton (GoF) instance for this class. int 260 getNumberOfActivationParameters() Obtains the number of parameters required by this function. float 260 261 getSolution(float networkResult, float[] activationParams) Implementation of the Gaussian Function. 261 Methods inherited from interface com.jcortex.ActivationFunction getDefaultParameterSet, getNumberOfActivationParameters, getSolution Method Detail getInstance public static GaussianFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getDefaultParameterSet public float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. Specified by: getDefaultParameterSet in interface ActivationFunction Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 260 Class GaussianFunction Returns: The default set of parameters. getNumberOfActivationParameters public int getNumberOfActivationParameters() Obtains the number of parameters required by this function. Specified by: getNumberOfActivationParameters in interface ActivationFunction Returns: The number of activation parameters required by this function. [= 2] getSolution public float getSolution(float networkResult, float[] activationParams) Implementation of the Gaussian Function. Specified by: getSolution in interface ActivationFunction Parameters: networkResult - The result of the network function. - The function parameters used by this neuron's function. This function needs two parameters: the dimensional modifier (array position 0) and another one for its shape (array position 1). activationParams Returns: The result produced by the Gaussian Function Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 261 Class HyperbolicTangentFunction Class HyperbolicTangentFunction com.jcortex.activationFunctions java.lang.Object com.jcortex.activationFunctions.HyperbolicTangentFunction All Implemented Interfaces: ActivationFunction, BackPropagationActivationFunction final public class HyperbolicTangentFunction extends Object implements BackPropagationActivationFunction The ActivationFunction implementation of the Hyperbolic Tangent Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Method Summary float[] Page getDefaultParameterSet() Obtains the default parameters for this Activation Function. float getDerivativeSolution(BackPropagationNeuron neuron) Derivative Hyperbolic Tangent Function static HyperbolicTangentFunction 264 getInstance() Obtains the Singleton (GoF) instance for this class. int 263 263 getNumberOfActivationParameters() Obtains the number of parameters required by this function. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 264 262 Class HyperbolicTangentFunction float getSolution(float networkResult, parameter_to_be_ignored) float[] 264 Hyperbolic Tangent Function Methods inherited from com.jcortex.BackPropagationActivationFunction interface getDerivativeSolution Methods inherited from interface com.jcortex.ActivationFunction getDefaultParameterSet, getNumberOfActivationParameters, getSolution Method Detail getInstance public static HyperbolicTangentFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getDefaultParameterSet public float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. Specified by: getDefaultParameterSet in interface ActivationFunction Returns: The default set of parameters. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 263 Class HyperbolicTangentFunction getNumberOfActivationParameters public int getNumberOfActivationParameters() Obtains the number of parameters required by this function. Specified by: getNumberOfActivationParameters in interface ActivationFunction Returns: The number of activation parameters required by this function. [= 0] getSolution public float getSolution(float networkResult, float[] parameter_to_be_ignored) Hyperbolic Tangent Function Specified by: getSolution in interface ActivationFunction Parameters: networkResult - The result of the network function. parameter_to_be_ignored - Not necessary for this function. Returns: The result produced by the Activation Function. Any value will be ingnored. getDerivativeSolution public float getDerivativeSolution(BackPropagationNeuron neuron) Derivative Hyperbolic Tangent Function Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 264 Class HyperbolicTangentFunction Specified by: getDerivativeSolution BackPropagationActivationFunction in interface Parameters: neuron - The neuron for which the derivate function is calculated. Returns: The result produced by the Activation Function. Class IdentityFunction com.jcortex.activationFunctions java.lang.Object com.jcortex.activationFunctions.IdentityFunction All Implemented Interfaces: ActivationFunction, BackPropagationActivationFunction final public class IdentityFunction extends Object implements BackPropagationActivationFunction The ActivationFunction implementation of the Identity Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 265 Class IdentityFunction Method Summary float[] Page getDefaultParameterSet() Obtains the default parameters for this Activation Function. float getDerivativeSolution(BackPropagationNeuron neuron) 268 Derivative Simoidal Identity Function static IdentityFunction getInstance() 266 Obtains the Singleton (GoF) instance for this class. int getNumberOfActivationParameters() Obtains the number of parameters required by this function. float 266 267 getSolution(float networkResult, float[] activationParams) 267 Implementation of the Identity Function. Methods inherited from com.jcortex.BackPropagationActivationFunction interface getDerivativeSolution Methods inherited from interface com.jcortex.ActivationFunction getDefaultParameterSet, getNumberOfActivationParameters, getSolution Method Detail getInstance public static IdentityFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getDefaultParameterSet public float[] getDefaultParameterSet() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 266 Class IdentityFunction Obtains the default parameters for this Activation Function. Specified by: getDefaultParameterSet in interface ActivationFunction Returns: The default set of parameters. getNumberOfActivationParameters public int getNumberOfActivationParameters() Obtains the number of parameters required by this function. Specified by: getNumberOfActivationParameters in interface ActivationFunction Returns: The number of activation parameters required by this function. [= 1] getSolution public float getSolution(float networkResult, float[] activationParams) Implementation of the Identity Function. Specified by: getSolution in interface ActivationFunction Parameters: networkResult - The result of the network function. - The parameters used by this function. This function needs only one parameters (array position 0). activationParams Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 267 Class IdentityFunction Returns: The result produced by the Sigmoidal Function getDerivativeSolution public float getDerivativeSolution(BackPropagationNeuron neuron) Derivative Simoidal Identity Function Specified by: getDerivativeSolution BackPropagationActivationFunction in interface Parameters: neuron - The neuron on which the deriva activation function has to work. Returns: The result produced by the derivate of the Sigmoidal Function. Class SigmoidalFunction com.jcortex.activationFunctions java.lang.Object com.jcortex.activationFunctions.SigmoidalFunction All Implemented Interfaces: ActivationFunction, BackPropagationActivationFunction final public class SigmoidalFunction extends Object implements BackPropagationActivationFunction Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 268 Class SigmoidalFunction The ActivationFunction implementation of the Sigmoidal Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Method Summary float[] Page getDefaultParameterSet() Obtains the default parameters for this Activation Function. float getDerivativeSolution(BackPropagationNeuron neuron) 271 Derivative Simoidal Tangent Function static SigmoidalFunction getInstance() 270 Obtains the Singleton (GoF) instance for this class. int getNumberOfActivationParameters() Obtains the number of parameters required by this function. float 270 getSolution(float activationParams) networkResult, 270 float[] 271 Implementation of the Sigmoidal Function. Methods inherited from com.jcortex.BackPropagationActivationFunction interface getDerivativeSolution Methods inherited from interface com.jcortex.ActivationFunction getDefaultParameterSet, getNumberOfActivationParameters, getSolution Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 269 Class SigmoidalFunction Method Detail getInstance public static SigmoidalFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getDefaultParameterSet public float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. Specified by: getDefaultParameterSet in interface ActivationFunction Returns: The default set of parameters. getNumberOfActivationParameters public int getNumberOfActivationParameters() Obtains the number of parameters required by this function. Specified by: getNumberOfActivationParameters in interface ActivationFunction Returns: The number of activation parameters required by this function. [= 1] Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 270 Class SigmoidalFunction getSolution public float getSolution(float networkResult, float[] activationParams) Implementation of the Sigmoidal Function. Specified by: getSolution in interface ActivationFunction Parameters: networkResult - The result of the network function. - The parameters used by this function. This function needs only one parameters (array position 0). FOR THIS IMPLEMENTATION THIS SETTING WILL BE IGNORED. activationParams Returns: The result produced by the Sigmoidal Function getDerivativeSolution public float getDerivativeSolution(BackPropagationNeuron neuron) Derivative Simoidal Tangent Function Specified by: getDerivativeSolution BackPropagationActivationFunction in interface Parameters: neuron - The neuron on which the deriva activation function has to work. Returns: The result produced by the derivate of the Sigmoidal Function. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 271 Class SignFunction Class SignFunction com.jcortex.activationFunctions java.lang.Object com.jcortex.activationFunctions.SignFunction All Implemented Interfaces: ActivationFunction final public class SignFunction extends Object implements ActivationFunction The ActivationFunction implementation of the Sign Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Method Summary float[] Page getDefaultParameterSet() Obtains the default parameters for this Activation Function. static SignFunction getInstance() 273 Obtains the Singleton (GoF) instance for this class. int getNumberOfActivationParameters() Obtains the number of parameters required by this function. float 273 getSolution(float parameter_to_be_ignored) networkResult, 273 float[] 274 Sign Function Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 272 Class SignFunction Methods inherited from interface com.jcortex.ActivationFunction getDefaultParameterSet, getNumberOfActivationParameters, getSolution Method Detail getInstance public static SignFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getDefaultParameterSet public float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. Specified by: getDefaultParameterSet in interface ActivationFunction Returns: The default set of parameters. getNumberOfActivationParameters public int getNumberOfActivationParameters() Obtains the number of parameters required by this function. Specified by: getNumberOfActivationParameters in interface ActivationFunction Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 273 Class SignFunction Returns: The number of activation parameters required by this function. [= 0] getSolution public float getSolution(float networkResult, float[] parameter_to_be_ignored) Sign Function Specified by: getSolution in interface ActivationFunction Parameters: networkResult - The result of the network function. parameter_to_be_ignored - Not necessary for this function. Returns: The result produced by the Sign Function Class StepFunction com.jcortex.activationFunctions java.lang.Object com.jcortex.activationFunctions.StepFunction All Implemented Interfaces: ActivationFunction final public class StepFunction extends Object implements ActivationFunction Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 274 Class StepFunction The ActivationFunction implementation of the Step Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Method Summary float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. static StepFunction 275 getNumberOfActivationParameters() Obtains the number of parameters required by this function. float 276 getInstance() Obtains the Singleton (GoF) instance for this class. int Page 276 getSolution(float networkResult, float[] activationParams) Step Function 276 Methods inherited from interface com.jcortex.ActivationFunction getDefaultParameterSet, getNumberOfActivationParameters, getSolution Method Detail getInstance public static StepFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 275 Class StepFunction getDefaultParameterSet public float[] getDefaultParameterSet() Obtains the default parameters for this Activation Function. Specified by: getDefaultParameterSet in interface ActivationFunction Returns: The default set of parameters. getNumberOfActivationParameters public int getNumberOfActivationParameters() Obtains the number of parameters required by this function. Specified by: getNumberOfActivationParameters in interface ActivationFunction Returns: The number of activation parameters required by this function. [= 1] getSolution public float getSolution(float networkResult, float[] activationParams) Step Function Specified by: getSolution in interface ActivationFunction Parameters: networkResult - The result of the network function. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 276 Class StepFunction - The function parameters used by this neuron's function. This function only one parameter (array position 0) that represents the thresshold. activationParams Returns: The result produced by the Step Function Package com.jcortex.backPropagation Pag e Class Summary A specialization of the class com.jcortex.feedForward.FeedForwardNeu BackPropagationNeuron that adds all the functionalities needed for a neuron to work inside BackPropagation neural networks. ron 277 Default Teacher implementation for the DefaultMultilayerPerceptronTeac Multilayer Perceptron neural network her model. 281 The Multilayer Perceptron Neural MultilayerPerceptronNeuralNetw Network Model based on a Feedork Forward Neural Network. 290 Class BackPropagationNeuron com.jcortex.backPropagation java.lang.Object com.jcortex.Neuron com.jcortex.feedForward.FeedForwardNeuron com.jcortex.backPropagation.BackPropagationNeuron All Implemented Interfaces: AxonReceiver, AxonSource Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 277 Class BackPropagationNeuron public class BackPropagationNeuron extends FeedForwardNeuron A specialization of the class com.jcortex.feedForward.FeedForwardNeuron that adds all the functionalities needed for a neuron to work inside Back-Propagation neural networks. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Fields inherited from class com.jcortex.Neuron RANDOM_CLOSE_TO_ZERO_VALUE, RANDOM_INITIAL_VALUE, ZERO_INITIAL_VALUE Constructor Summary BackPropagationNeuron(int id, NetworkFunction ActivationFunction activationFunction) Page networkFunction, 279 The constructor for brand new Back Propagation neurons. BackPropagationNeuron(org.w3c.dom.Node neuronNode, NeuralNetwork nn) Constructor based on the XML node representation of this neuron. Method Summary float 280 calculateGradient(float desired_output) Calculates the gradient of those neurons for which the error is available: the ending layer ones. float Page calculateGradient() Calculates the gradient of the neuron based on the next layer's gradient. float 279 280 getGradient() Obtains this neuron's gradient. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 280 278 Class BackPropagationNeuron Methods inherited from class com.jcortex.feedForward.FeedForwardNeuron addConnectedNeuron, addEntry, addEntry, connectLoadedNeuronWithEntries, equals, getActivationFunction, getActivationParameters, getAxonValue, getConnectedNeurons, getEntries, getEntryWeight, getNetworkFunction, getNetworkResult, instantError, produceAxonValue, setActivationFunction, setActivationParams, setEntryWeight, setNetworkFunction, specificNeuron2xml, synapse, toString Methods inherited from class com.jcortex.Neuron equals, getConnectedNeurons, getId, neuron2xml, toString Methods inherited from interface com.jcortex.AxonSource addConnectedNeuron, getAxonValue, getId, produceAxonValue Methods inherited from interface com.jcortex.AxonReceiver addEntry, addEntry, getEntries, getEntryWeight, getId, setEntryWeight Constructor Detail BackPropagationNeuron public BackPropagationNeuron(int id, NetworkFunction networkFunction, ActivationFunction activationFunction) The constructor for brand new Back Propagation neurons. It is based on the FeedForwardNeuron class' basic constructor. BackPropagationNeuron public BackPropagationNeuron(org.w3c.dom.Node neuronNode, NeuralNetwork nn) throws ReadingException Constructor based on the XML node representation of this neuron. Throws: ReadingException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 279 Class BackPropagationNeuron Method Detail getGradient public float getGradient() Obtains this neuron's gradient. It may return 0 if the gradient has not been calculated yet. If either calculateGradient() methods have not been invoked recently, this method may produce an old gradient value from a previous iteration. Returns: This neuron's stored gradient value. calculateGradient public float calculateGradient(float desired_output) Calculates the gradient of those neurons for which the error is available: the ending layer ones. Parameters: desired_output - The output desired to have come out Returns: The gradient value found. This is also stored in the class for future use. calculateGradient public float calculateGradient() Calculates the gradient of the neuron based on the next layer's gradient. Returns: The gradient value found. This is also stored in the class for future use. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 280 Class DefaultMultilayerPerceptronTeacher Class DefaultMultilayerPerceptronTeacher com.jcortex.backPropagation java.lang.Object com.jcortex.Teacher com.jcortex.backPropagation.DefaultMultilayerPerceptronTeacher final public class DefaultMultilayerPerceptronTeacher extends Teacher Default model. Teacher implementation for the Multilayer Perceptron neural network Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.Teacher VALIDATION_JUMP Constructor Summary Page DefaultMultilayerPerceptronTeacher() The default creator for a brand new teacher. 283 DefaultMultilayerPerceptronTeacher(org.w3c.dom.Node teacherNode) Creates a DefaultMultilayerPerceptronTeacher instance from an XML node with its configuration. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 283 281 Class DefaultMultilayerPerceptronTeacher Method Summary Statistics Page createStatsSchema() Creates the Statistics instance with the specific progress measures needed by thos particular Teacher. Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) Educates a layered Feed-Forward Neural Network using the Back Propagation Algorithm based on the Error Correction Algorithm, also known as Delta Rule. float 285 getAnalysisWindow() 287 Obtains the Analysis Window training parameter. ProgressAnalyzer getAnalyzer() 287 Obtains this teacher's associated training analyzer. float getConstantVariation() 286 Obtains the Constant Variation training parameter. float getLearningRate() 284 Obtains the Learning Rate training parameter. long getMaxIterations() Obtains parameter. float the Maximum Iteration Number training 285 setMaxIterations(long maximumIterationNumber) Sets the Maximum Iteration Number training parameter. void 287 setLearningRate(float learningRate) Sets the Learning Rate training parameter. void 287 setConstantVariation(float constantVariation) Sets the Constant Variation training parameter. void 285 setAnalysisWindow(int constantVariationWindow) Obtains the Analysis Window training parameter. void 285 setAcceptableError(float maximumAcceptableError) Sets the Acceptable Error training parameter. void 286 getValidationPercent() Obtains the Validation Percent training parameter. void 284 getAcceptableError() Obtains the Acceptable Error training parameter. int 288 286 setValidationPercent(float validationPercent) Sets the Validation Percent training parameter. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 286 282 Class DefaultMultilayerPerceptronTeacher void specificTeacher2xml(org.w3c.dom.Element org.w3c.dom.Document document) teacherRoot, Dumps into the teacher's XML node this specific instance's configuration. void Teacher stopTraining() Stops the training's progress by interrupting its next iteration. String 288 289 toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. 289 Methods inherited from class com.jcortex.Teacher createStatsSchema, educateNetwork, getAnalyzer, getStats, teacher2xml, toHTMLString, translateAndClassifyExamples stopTraining, Constructor Detail DefaultMultilayerPerceptronTeacher public DefaultMultilayerPerceptronTeacher() The default creator for a brand new teacher. All learning parameters are initialized with their default values. DefaultMultilayerPerceptronTeacher public DefaultMultilayerPerceptronTeacher(org.w3c.dom.Node teacherNode) Creates a DefaultMultilayerPerceptronTeacher instance from an XML node with its configuration. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 283 Class DefaultMultilayerPerceptronTeacher Method Detail educateNetwork public Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) throws IllegalArgumentException Educates a layered Feed-Forward Neural Network using the Back Propagation Algorithm based on the Error Correction Algorithm, also known as Delta Rule. Overrides: educateNetwork in class Teacher Parameters: nn - The neural network to be trained. exampleIObjects - The example input objects. exampleDObjects - The example output objects. Returns: The statistics for this training. Throws: - Exception thrown when an error occured due to problems with the training's parameters. IllegalArgumentException getLearningRate public float getLearningRate() Obtains the Learning Rate training parameter. Returns: The requested parameter's value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 284 Class DefaultMultilayerPerceptronTeacher setLearningRate public void setLearningRate(float learningRate) Sets the Learning Rate training parameter. Parameters: learningRate - The new value. getAcceptableError public float getAcceptableError() Obtains the Acceptable Error training parameter. Returns: The requested parameter's value. setAcceptableError public void setAcceptableError(float maximumAcceptableError) Sets the Acceptable Error training parameter. Parameters: maximumAcceptableError - The new value. getValidationPercent public float getValidationPercent() Obtains the Validation Percent training parameter. Returns: The requested parameter's value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 285 Class DefaultMultilayerPerceptronTeacher setValidationPercent public void setValidationPercent(float validationPercent) Sets the Validation Percent training parameter. Parameters: validationPercent - The new parameter's value. getMaxIterations public long getMaxIterations() Obtains the Maximum Iteration Number training parameter. Returns: The requested parameter's value. setMaxIterations public void setMaxIterations(long maximumIterationNumber) Sets the Maximum Iteration Number training parameter. Parameters: maximumIterationNumber - The new value. getConstantVariation public float getConstantVariation() Obtains the Constant Variation training parameter. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 286 Class DefaultMultilayerPerceptronTeacher Returns: The requested parameter's value. setConstantVariation public void setConstantVariation(float constantVariation) Sets the Constant Variation training parameter. Parameters: constantVariation - The new value. getAnalysisWindow public int getAnalysisWindow() Obtains the Analysis Window training parameter. Returns: The requested parameter's value. setAnalysisWindow public void setAnalysisWindow(int constantVariationWindow) Obtains the Analysis Window training parameter. Parameters: constantVariationWindow - The new value. getAnalyzer public ProgressAnalyzer getAnalyzer() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 287 Class DefaultMultilayerPerceptronTeacher Obtains this teacher's associated training analyzer. Overrides: getAnalyzer in class Teacher Returns: The training statistics analyzer createStatsSchema public Statistics createStatsSchema() Creates the Statistics instance with the specific progress measures needed by thos particular Teacher. This method works as a a Template Method (GoF) for the getStats() method implemented in the Teacher abstract class. The measures used in the training will be: TRAINING_ERROR, VALIDATION_ERROR and WEIGHT_VARIATION, all of them defined as static Strings in this class. Overrides: createStatsSchema in class Teacher Returns: The new Statistics instance. specificTeacher2xml public void specificTeacher2xml(org.w3c.dom.Element teacherRoot, org.w3c.dom.Document document) Dumps into the teacher's XML node this specific Teacher instance's configuration. This is a Template Method (GoF) for the Teacher abstract class. This teacher's training parameters are stored as attributes in the XML configuration node. Overrides: specificTeacher2xml in class Teacher Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 288 Class DefaultMultilayerPerceptronTeacher Parameters: - The XML node in which this teacher's configuration must be dumped. teacherRoot - The Document instance that will be the ultimate root for this XML structure. It is used in these methods to create the XML Elements and Nodes with its Factory Methods. document stopTraining public void stopTraining() Stops the training's progress by interrupting its next iteration. For this, it uses a boolan flag - this class' attribute continueTraining and turns it false so the next time the iteration reaches the condition state, it will surely jump out of the training loop. Overrides: stopTraining in class Teacher toHTMLString public String toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. Overrides: toHTMLString in class Teacher Returns: This teacher's String representation. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 289 Class MultilayerPerceptronNeuralNetwork Class MultilayerPerceptronNeuralNetwork com.jcortex.backPropagation java.lang.Object com.jcortex.NeuralNetwork com.jcortex.feedForward.FeedForwardNeuralNetwork com.jcortex.backPropagation.MultilayerPerceptronNeuralNetwork public class MultilayerPerceptronNeuralNetwork extends FeedForwardNeuralNetwork The Multilayer Perceptron Neural Network Model based on a Feed-Forward Neural Network. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.NeuralNetwork inputTranslator, neurons, outputTranslator, sensors, teacher Constructor Summary Page MultilayerPerceptronNeuralNetwork(int inputNum, int[] neuronLayers, InputTranslator inputTranslator, OutputTranslator outputTranslator, NetworkFunction networkFunction, BackPropagationActivationFunction 292 activationFunction) Constructor for brand-new Multilayer Perceptron Networks. MultilayerPerceptronNeuralNetwork(org.w3c.dom.Node nnRoot) Creates a representation. MultilayerPerceptronNeuralNetwork instance from its XML Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 292 290 Class MultilayerPerceptronNeuralNetwork Method Summary static int Page countNeuronsInLayers(int[] neuronLayers) Static method that counts the number of neurons inside the layers. BackPropagationNeuron[][] 294 getLayers() 293 Obtains the all the neurons in their layers. void specificNeuralNetwork2xml(org.w3c.dom.Element nnRoot, org.w3c.dom.Document document) Puts into this neural network's XML configuration node the aditional information it has as being a MultilayerPerceptronNeuralNetwork instance. String toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. String 293 294 toString() Produces a String representation of this neural network. Methods inherited from com.jcortex.feedForward.FeedForwardNeuralNetwork 293 class pureThink Methods inherited from class com.jcortex.NeuralNetwork addEndNeuron, addFirstNeuron, addNeuron, addNeurons, createNeuralNetwork, export2XMLDocument, getAttributeCount, getConnectedNeurons, getEndNeurons, getInputTranslator, getNeuron, getNeuronCount, getNeurons, getOutputTranslator, getSensor, getSensorCount, getSensors, getTeacher, neuralNetwork2xml, pureThink, setEndNeurons, setFirtsNeurons, setInputTranslator, setOutputTranslator, setTeacher, think, toHTMLString, toString Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 291 Class MultilayerPerceptronNeuralNetwork Constructor Detail MultilayerPerceptronNeuralNetwork public MultilayerPerceptronNeuralNetwork(int inputNum, int[] neuronLayers, InputTranslator inputTranslator, OutputTranslator outputTranslator, NetworkFunction networkFunction, BackPropagationActivationFunction a ctivationFunction) Constructor for brand-new Multilayer Perceptron Networks. Initializes the network's parameters and creates a Feed-Forward Neuron based on a layered structure. This constructor creates a Feed-Forward network of fully-connected layers. The layer schema is passed to the constructor through an int[] array. Each position of this array represents a layer, layer 0 is the first layer and will be fully-connected to the sensors defined by the inputNum parameter, layer 1 the next, and so on. The int number at each position represents the number of neurons in that layer. The neurons of last layer (index neuronLayers.lenght-1 will be taken as the network's end neurons. The number of neurons in the last layer will be the number of values returned by the network as its output. This constructor requires as the default Network and Activation functions with which have the new neurons initiallized. These can later be changed for each specific neuron. MultilayerPerceptronNeuralNetwork public MultilayerPerceptronNeuralNetwork(org.w3c.dom.Node nnRoot) throws ReadingException Creates a MultilayerPerceptronNeuralNetwork instance from its XML representation. The whole process is based on the appropriate Feed-Forward Neural Network constructor as this neuron does not add any specific information. The main issue of this constructor is, once the neurons have been created by the FeedForward network construstor, pour them into the layered schema. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 292 Class MultilayerPerceptronNeuralNetwork Throws: ReadingException Method Detail getLayers public BackPropagationNeuron[][] getLayers() Obtains the all the neurons in their layers. Returns: A BackPropagationNeuron[][] array where the fist index is for the layer and the second index for the neuron in the layer. specificNeuralNetwork2xml public void specificNeuralNetwork2xml(org.w3c.dom.Element nnRoot, org.w3c.dom.Document document) Puts into this neural network's XML configuration node the aditional information it has as being a MultilayerPerceptronNeuralNetwork instance. The only information stored at this level is the layer schema that organizes this network. Overrides: specificNeuralNetwork2xml in class NeuralNetwork Parameters: nnRoot - This neural network's XML configuration node. document - The XML Document needed to create new elements. toString public String toString() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 293 Class MultilayerPerceptronNeuralNetwork Produces a String representation of this neural network. Overrides: toString in class NeuralNetwork Returns: A String representation of this neural network. toHTMLString public String toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. Overrides: toHTMLString in class NeuralNetwork Returns: A String representation of this neural network. countNeuronsInLayers public static int countNeuronsInLayers(int[] neuronLayers) Static method that counts the number of neurons inside the layers. It has to go through all the layers to peform this task. Parameters: neuronLayers - The layer structure described in the basic constructor. Returns: The number of neurons defined in the layer structure. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 294 Package com.jcortex.distanceFunctions Package com.jcortex.distanceFunctions Class Summary Page EuclideanDistanceFunction The DistanceFunction implementation of the Euclidean Distance. 295 Class EuclideanDistanceFunction com.jcortex.distanceFunctions java.lang.Object com.jcortex.distanceFunctions.EuclideanDistanceFunction All Implemented Interfaces: DistanceFunction public class EuclideanDistanceFunction extends Object implements DistanceFunction The DistanceFunction implementation of the Euclidean Distance. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Method Summary float Page getDistance(AxonSource[] entries, float[] weights) Implementation of the Euclidean Distance between an AxonSource array and a float array. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 296 295 Class EuclideanDistanceFunction static EuclideanDistanceFunction getInstance() Obtains the Singleton (GoF) instance for this class. 296 Methods inherited from interface com.jcortex.DistanceFunction getDistance Method Detail getInstance public static EuclideanDistanceFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getDistance public float getDistance(AxonSource[] entries, float[] weights) throws IllegalArgumentException Implementation of the Euclidean Distance between an AxonSource array and a float array. Both arrays must have the same size; otherwise, an IllegalArgumentException will be thrown. Specified by: getDistance in interface DistanceFunction Parameters: - The first reference array with a list of AxonSource instances. From each AxonSource instance a float value can be obtained. entries weights - The second reference array with a list of float values. Returns: The Euclidean distance between the two arrays' values. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 296 Class EuclideanDistanceFunction Throws: IllegalArgumentException - Thrown in case both arrays have different sizes. Package com.jcortex.feedForward Class Summary Page DefaultPerceptronTeacher Default Teacher implementation Perceptron neural network model. for the FeedForwardNeuralNetwork This class models a generic kind of Neural Network: a Feed-Forward Neural Network. 306 FeedForwardNeuron Class that models the functionalities of a FeedForward neuron giving it as much versatility as possible. 309 NeuronInTheList Simple representation of a Neuron that will be juggled in the ToDoList. 321 PerceptronNeuralNetwork A Perceptron Neural Network is a specific kind of Feed-Forward Neural Network 325 ToDoList A ToDoList instance puts some order into the stymulus propagation through a Feed-Forward Neural Network. 329 297 Class DefaultPerceptronTeacher com.jcortex.feedForward java.lang.Object com.jcortex.Teacher com.jcortex.feedForward.DefaultPerceptronTeacher final public class DefaultPerceptronTeacher extends Teacher Default Teacher implementation for the Perceptron neural network model. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 297 Class DefaultPerceptronTeacher Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.Teacher VALIDATION_JUMP Constructor Summary Page DefaultPerceptronTeacher() The default creator for a brand new teacher. 299 DefaultPerceptronTeacher(org.w3c.dom.Node teacherNode) Creates a DefaultPerceptronTeacher instance from an XML node with its configuration. 300 Method Summary Page Statistics createStatsSchema() Creates the Statistics instance with the specific progress measures needed by thos particular Teacher. Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) Educates a pure Feed-Forward Neural Network - such as the Perceptron model - using the Error Correction Algorithm, also known as Delta Rule. float 304 getConstantVariation() Obtains the Constant Variation training parameter. float 303 getAnalyzer() Obtains this teacher's associated training analyzer. float 301 getAnalysisWindow() Obtains the Analysis Window training parameter. ProgressAnalyzer 300 getAcceptableError() Obtains the Acceptable Error training parameter. int 304 303 getLearningRate() Obtains the Learning Rate training parameter. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 302 298 Class DefaultPerceptronTeacher long getMaxIterations() Obtains parameter. float the Maximum Iteration Number training getValidationPercent() 301 Obtains the Validation Percent training parameter. void setAcceptableError(float maximumAcceptableError) 301 Sets the Acceptable Error training parameter. void setAnalysisWindow(int constantWindow) 304 Obtains the Analysis Window training parameter. void setConstantVariation(float constantVariation) 303 Sets the Constant Variation training parameter. void setLearningRate(float learningRate) 302 Sets the Learning Rate training parameter. void setMaxIterations(long maxIterations) Sets the Maximum Iteration Number training parameter. void 301 specificTeacher2xml(org.w3c.dom.Element org.w3c.dom.Document document) teacherRoot, Dumps into the teacher's XML node this specific instance's configuration. void Teacher 305 stopTraining() Stops the training's progress by interrupting its next iteration. String 302 setValidationPercent(float validationPercent) Sets the Validation Percent training parameter. void 302 305 toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. 306 Methods inherited from class com.jcortex.Teacher createStatsSchema, educateNetwork, getAnalyzer, getStats, teacher2xml, toHTMLString, translateAndClassifyExamples stopTraining, Constructor Detail DefaultPerceptronTeacher public DefaultPerceptronTeacher() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 299 Class DefaultPerceptronTeacher The default creator for a brand new teacher. All learning parameters are initialized with their default values. DefaultPerceptronTeacher public DefaultPerceptronTeacher(org.w3c.dom.Node teacherNode) Creates a DefaultPerceptronTeacher instance from an XML node with its configuration. Method Detail educateNetwork public Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) throws IllegalArgumentException Educates a pure Feed-Forward Neural Network - such as the Perceptron model - using the Error Correction Algorithm, also known as Delta Rule. Overrides: educateNetwork in class Teacher Parameters: nn - The neural network to be trained. exampleIObjects - The example input objects. exampleDObjects - The example output objects. Returns: The statistics for this training. Throws: - Exception thrown when an error occured due to problems with the training's parameters. IllegalArgumentException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 300 Class DefaultPerceptronTeacher getAcceptableError public float getAcceptableError() Obtains the Acceptable Error training parameter. Returns: The requested parameter's value. setAcceptableError public void setAcceptableError(float maximumAcceptableError) Sets the Acceptable Error training parameter. Parameters: maximumAcceptableError - The new parameter's value. getValidationPercent public float getValidationPercent() Obtains the Validation Percent training parameter. Returns: The requested parameter's value. setValidationPercent public void setValidationPercent(float validationPercent) Sets the Validation Percent training parameter. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 301 Class DefaultPerceptronTeacher Parameters: validationPercent - The new parameter's value. getMaxIterations public long getMaxIterations() Obtains the Maximum Iteration Number training parameter. Returns: The requested parameter's value. setMaxIterations public void setMaxIterations(long maxIterations) Sets the Maximum Iteration Number training parameter. Parameters: maxIterations - The new parameter's value. getLearningRate public float getLearningRate() Obtains the Learning Rate training parameter. Returns: The requested parameter's value. setLearningRate public void setLearningRate(float learningRate) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 302 Class DefaultPerceptronTeacher Sets the Learning Rate training parameter. Parameters: learningRate - The new value. getConstantVariation public float getConstantVariation() Obtains the Constant Variation training parameter. Returns: The requested parameter's value. setConstantVariation public void setConstantVariation(float constantVariation) Sets the Constant Variation training parameter. Parameters: constantVariation - The new parameter's value. getAnalysisWindow public int getAnalysisWindow() Obtains the Analysis Window training parameter. Returns: The requested parameter's value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 303 Class DefaultPerceptronTeacher setAnalysisWindow public void setAnalysisWindow(int constantWindow) Obtains the Analysis Window training parameter. Parameters: constantWindow - The new value. getAnalyzer public ProgressAnalyzer getAnalyzer() Obtains this teacher's associated training analyzer. Overrides: getAnalyzer in class Teacher Returns: The training statistics analyzer createStatsSchema public Statistics createStatsSchema() Creates the Statistics instance with the specific progress measures needed by thos particular Teacher. This method works as a a Template Method (GoF) for the getStats() method implemented in the Teachet abstract class. The measures used in the training will be: TRAINING_ERROR, VALIDATION_ERROR and WEIGHT_VARIATION, all of them defined as static Strings in this class. Overrides: createStatsSchema in class Teacher Returns: The new Statistics instance. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 304 Class DefaultPerceptronTeacher specificTeacher2xml public void specificTeacher2xml(org.w3c.dom.Element teacherRoot, org.w3c.dom.Document document) Dumps into the teacher's XML node this specific Teacher instance's configuration. This is a Template Method (GoF) for the Teacher abstract class. This teacher's training parameters are stored as attributes in the XML configuration node. Overrides: specificTeacher2xml in class Teacher Parameters: - The XML node in which this teacher's configuration must be dumped. teacherRoot - The Document instance that will be the ultimate root for this XML structure. It is used in these methods to create the XML Elements and Nodes with its Factory Methods. document stopTraining public void stopTraining() Stops the training's progress by interrupting its next iteration. For this, it uses a boolan flag - this class' attribute continueTraining and turns it false so the next time the iteration reaches the condition state, it will surely jump out of the training loop. Overrides: stopTraining in class Teacher Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 305 Class DefaultPerceptronTeacher toHTMLString public String toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. Overrides: toHTMLString in class Teacher Returns: This teacher's String representation. Class FeedForwardNeuralNetwork com.jcortex.feedForward java.lang.Object com.jcortex.NeuralNetwork com.jcortex.feedForward.FeedForwardNeuralNetwork Direct Known Subclasses: MultilayerPerceptronNeuralNetwork, PerceptronNeuralNetwork abstract public class FeedForwardNeuralNetwork extends NeuralNetwork This class models a generic kind of Neural Network: a Feed-Forward Neural Network. This neural network is not itself a network model, but an intermediate entity that provides the functionality common to all Feed-Forward neural network models. A Feed-Forward neural network model is characterized for it has a set of neurons connected upstream and downstream. The connections begin with the Sensor instances to which the fist neurons are connected, and flow from these downstream. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 306 Class FeedForwardNeuralNetwork There can be recursive connections to previous neurons. The propagation must move forward, following the downstream neuron connections. Author: Miguel Lara Encabo - [email protected] Version: 0.1b Fields inherited from class com.jcortex.NeuralNetwork inputTranslator, neurons, outputTranslator, sensors, teacher Constructor Summary Page FeedForwardNeuralNetwork(int neuronNum, int inputsNum, InputTranslator inputTranslator, OutputTranslator outputTranslator) 308 The basic constructor for a brand-new Feed Forward Neural Network. FeedForwardNeuralNetwork(org.w3c.dom.Node nnRoot) Creates a representation. FeedForwardNeuralNetwork instance based on its XML Method Summary float[] 308 Page pureThink(float[] inputData) Makes the specific numerical thinking for the Feed-Forward Neural Network model. 308 Methods inherited from class com.jcortex.NeuralNetwork addEndNeuron, addFirstNeuron, addNeuron, addNeurons, createNeuralNetwork, export2XMLDocument, getAttributeCount, getConnectedNeurons, getEndNeurons, getInputTranslator, getNeuron, getNeuronCount, getNeurons, getOutputTranslator, getSensor, getSensorCount, getSensors, getTeacher, neuralNetwork2xml, pureThink, setEndNeurons, setFirtsNeurons, setInputTranslator, setOutputTranslator, setTeacher, think, toHTMLString, toString Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 307 Class FeedForwardNeuralNetwork Constructor Detail FeedForwardNeuralNetwork public FeedForwardNeuralNetwork(int neuronNum, int inputsNum, InputTranslator inputTranslator, OutputTranslator outputTranslator) The basic constructor for a brand-new Feed Forward Neural Network. FeedForwardNeuralNetwork public FeedForwardNeuralNetwork(org.w3c.dom.Node nnRoot) throws ReadingException Creates a FeedForwardNeuralNetwork representation. instance based on its XML Throws: ReadingException Method Detail pureThink public float[] pureThink(float[] inputData) throws IllegalArgumentException Makes the specific numerical thinking for the Feed-Forward Neural Network model. The process is based on a ToDoList instance that is updated with the neurons that have to be calculated in the propagation's flow. It behaves as the Template Method (GoF) for the NeuralNetwork abstract superclass. think() method of its Overrides: pureThink in class NeuralNetwork Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 308 Class FeedForwardNeuralNetwork Parameters: - The input data already translated to its float[] representation by an InputTranslator inputData Returns: The result of a Feed-Forward Neural Network's process is the numerical state of its ending neurons. These values are passed as a float[] array that will be put into the OutputTranslator. Throws: - Exception thrown when an error occured due to problems with the network's parameters. IllegalArgumentException Class FeedForwardNeuron com.jcortex.feedForward java.lang.Object com.jcortex.Neuron com.jcortex.feedForward.FeedForwardNeuron All Implemented Interfaces: AxonReceiver, AxonSource Direct Known Subclasses: BackPropagationNeuron public class FeedForwardNeuron extends Neuron Class that models the functionalities of a Feed-Forward neuron giving it as much versatility as possible. A Feed-Forward neuron can be associated to various Activation Functions, Network Functions... It stores as well the upstream-connected neurons as entries associating a value to them, and downstream-connected neurons as childs. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 309 Class FeedForwardNeuron Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.Neuron RANDOM_CLOSE_TO_ZERO_VALUE, RANDOM_INITIAL_VALUE, ZERO_INITIAL_VALUE Constructor Summary Page FeedForwardNeuron(int id, NetworkFunction ActivationFunction activationFunction) networkFunction, 312 Constructor for brand-new instances of this class. FeedForwardNeuron(org.w3c.dom.Node neuronNode, NeuralNetwork nn) Creates a configuration. FeedForwardNeuron instance from an XML node with its Method Summary void 312 Page addConnectedNeuron(AxonReceiver connect_back) child, boolean 317 Adds a new child to this neuron instance. void addEntry(AxonSource entry) An AxonSource is added as an entry to this neuron. void addEntry(AxonSource entry, float weight) An AxonSource is added as an entry to this neuron. void 313 equals(Object obj) Two neurons will be the same if their identification numbers are the same one. ActivationFunction 318 connectLoadedNeuronWithEntries(org.w3c.dom.Node neuronNode, FeedForwardNeuralNetwork ffnn) This method connects a Feed-Forward Neuron with this entries and childs in the Feed-Forward Neural Network structure, following the indications stated in its XML description. boolean 318 321 getActivationFunction() Obtains this neuron's Activation Function Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 314 310 Class FeedForwardNeuron float[] getActivationParameters() Getter Method for this neuron's activation parameters float getAxonValue() Obtains this neuron's state, represented by a number locally named Axon Value. Collection this neuron's entries (upstream-connected 314 getNetworkResult() Obtains the last result of combining the various entries into a unique value that represents the global entry this neuron instance receives. float 319 produceAxonValue() Generates this neuron's state (Axon Value) by combining all entry values with the Network Function and passing this value through the Activation Function. void 316 instantError(float desiredResponse) Calculates the error incurred by this neuron. float 315 getNetworkFunction() Obtains this neuron's Network Function float 313 getEntryWeight(AxonSource parent) Obtains the weight associated to an specific entry. NetworkFunction 317 getEntries() Obtains neurons). float 316 getConnectedNeurons() Obtains a collection of this neuron's childs (downstreamconnected neurons), for which this instance is an entry. Collection 315 setActivationFunction(ActivationFunction activationFunction_) 316 314 Sets this neuron's Activation Function void setActivationParams(int ix, float value) 315 Sets this neuron's activation parameters. void setEntryWeight(AxonSource parent, float value) 319 Sets the weight associated to a certain entry. void setNetworkFunction(NetworkFunction networkFunction_) 314 Sets this neuron's Network Function void specificNeuron2xml(org.w3c.dom.Element org.w3c.dom.Document document) neuronRoot, Adds the specific information known to the FeedForward Neuron at this level. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 320 311 Class FeedForwardNeuron Collection synapse() Makes the neuron's calculations. String 319 toString() Generates a quick String representation of this neuron. 320 Methods inherited from class com.jcortex.Neuron equals, getConnectedNeurons, getId, neuron2xml, toString Methods inherited from interface com.jcortex.AxonSource addConnectedNeuron, getAxonValue, getId, produceAxonValue Methods inherited from interface com.jcortex.AxonReceiver addEntry, addEntry, getEntries, getEntryWeight, getId, setEntryWeight Constructor Detail FeedForwardNeuron public FeedForwardNeuron(int id, NetworkFunction networkFunction, ActivationFunction activationFunction) Constructor for brand-new instances of this class. FeedForwardNeuron public FeedForwardNeuron(org.w3c.dom.Node neuronNode, NeuralNetwork nn) throws ReadingException Creates a FeedForwardNeuron instance from an XML node with its configuration. Throws: ReadingException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 312 Class FeedForwardNeuron Method Detail connectLoadedNeuronWithEntries public void connectLoadedNeuronWithEntries(org.w3c.dom.Node neuronNode, FeedForwardNeuralNetwork ffnn) throws ReadingException This method connects a Feed-Forward Neuron with this entries and childs in the Feed-Forward Neural Network structure, following the indications stated in its XML description. An instance can not be fully created from is XML representation in just one dash. All Feed-Forward Neuron make reference to other neuron instances either as an entry, a child or both (unless it is a single-layered network). Parameters: neuronNode ffnn - The XML node with this neuron's configuration. - The Feed-Forward neural network that holds this neuron. Throws: - This exception will be thrown if there is any problem reading the XML node. ReadingException getEntries public Collection getEntries() Obtains this neuron's entries (upstream-connected neurons). Specified by: getEntries in interface AxonReceiver Returns: The entries in the form of a collection of AxonSourceEntry instances. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 313 Class FeedForwardNeuron getNetworkFunction public NetworkFunction getNetworkFunction() Obtains this neuron's Network Function Returns: the neuron's network function setNetworkFunction public void setNetworkFunction(NetworkFunction networkFunction_) Sets this neuron's Network Function Parameters: networkFunction_ - the network function to be used by this neuron getActivationFunction public ActivationFunction getActivationFunction() Obtains this neuron's Activation Function Returns: the neuron's activation function setActivationFunction public void setActivationFunction(ActivationFunction activationFunction_) Sets this neuron's Activation Function Parameters: activationFunction_ - the activation function to be used by this neuron Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 314 Class FeedForwardNeuron getEntryWeight public float getEntryWeight(AxonSource parent) Obtains the weight associated to an specific entry. Specified by: getEntryWeight in interface AxonReceiver Parameters: parent - The upstream neuron that serves as entry to this instance. Returns: The weight associated to this entry. getActivationParameters public float[] getActivationParameters() Getter Method for this neuron's activation parameters Returns: the neuron's network function setActivationParams public void setActivationParams(int ix, float value) Sets this neuron's activation parameters. Parameters: ix - the index of the activation function's params. value - the float value to be set as an activation parameter. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 315 Class FeedForwardNeuron produceAxonValue public float produceAxonValue() throws IllegalArgumentException Generates this neuron's state (Axon Value) by combining all entry values with the Network Function and passing this value through the Activation Function. The result or Axon Value is both stored in this neuron's instance, and given back as this method's return. Specified by: produceAxonValue in interface AxonSource Returns: The newly calculated neuron state (Axon Value). Throws: IllegalArgumentException getAxonValue public float getAxonValue() Obtains this neuron's state, represented by a number locally named Axon Value. Specified by: getAxonValue in interface AxonSource Returns: This neuron's numerical state - or Axon Value. getNetworkResult public float getNetworkResult() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 316 Class FeedForwardNeuron Obtains the last result of combining the various entries into a unique value that represents the global entry this neuron instance receives. This value may have expired as it is the last network result calculated, not the value the neuron's current situation would have produced. If you wish to obtain an updated value, you will first have to invoke this class' produceAxonValue() method. Returns: The last network result calculated. getConnectedNeurons public Collection getConnectedNeurons() Obtains a collection of this neuron's childs (downstream-connected neurons), for which this instance is an entry. Overrides: getConnectedNeurons in class Neuron Returns: The collection of child neurons associated to this instance. addConnectedNeuron public void addConnectedNeuron(AxonReceiver child, boolean connect_back) Adds a new child to this neuron instance. If the connect_back flag - passed as a parameter - is true, this neuron will in turn invoke on its new child the addEntry() method with itself. This way it adds itself as an entry to the child neuron. Specified by: addConnectedNeuron in interface AxonSource Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 317 Class FeedForwardNeuron Parameters: - The downstream AxonSource. child AxonReceiver instance connected to this - Flag indicating if this neuron must subscribe as an entry on its child. connect_back addEntry public void addEntry(AxonSource entry) An AxonSource is added as an entry to this neuron. The associated weight is initialized with a random value close to zero. Specified by: addEntry in interface AxonReceiver Parameters: - The upstream AxonReceiver. entry AxonSource that will be added as an entry to this addEntry public void addEntry(AxonSource entry, float weight) An AxonSource is added as an entry to this neuron. The associated weight is passed as a parameter. Specified by: addEntry in interface AxonReceiver Parameters: entry - The upstream AxonSource that will be added as an entry to this AxonReceiver. weight - This entry's associated weight. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 318 Class FeedForwardNeuron setEntryWeight public void setEntryWeight(AxonSource parent, float value) Sets the weight associated to a certain entry. Specified by: setEntryWeight in interface AxonReceiver Parameters: parent value - The upstream AxonSource that serves as entry. - The new value for the associated weight. synapse public Collection synapse() throws IllegalArgumentException Makes the neuron's calculations. Returns: The neurons affected by this neuron's changes. In case no neurons are affected, or no change has taken place, the synapse can produce a null result. Throws: IllegalArgumentException instantError public float instantError(float desiredResponse) Calculates the error incurred by this neuron. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 319 Class FeedForwardNeuron Returns: the numerical value of the instant error incurred by this neuron. specificNeuron2xml public void specificNeuron2xml(org.w3c.dom.Element neuronRoot, org.w3c.dom.Document document) Adds the specific information known to the Feed-Forward Neuron at this level. This method puts the intance attributes known at this level as attributes of the XML node. Hooks as well the nodes that describes this neuron's activation parameters and entries - with their weights. (Childs are not stored as this relationship will be kept by each child as it knows this neuron is one of its entries). Overrides: specificNeuron2xml in class Neuron Parameters: neuronRoot document - The neuron's XML configuration node. - The XML Document used to create new elements. toString public String toString() Generates a quick String representation of this neuron. Overrides: toString in class Neuron Returns: A String representation of this neuron. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 320 Class FeedForwardNeuron equals public boolean equals(Object obj) Two neurons will be the same if their identification numbers are the same one. If the passed Object instance is not an AxonSource, it will be considered straight away as different (= not equal = false). Overrides: equals in class Neuron Parameters: obj - The other neuron to be compared. Returns: A boolean value: true if equal, false if not equal. Class NeuronInTheList com.jcortex.feedForward java.lang.Object com.jcortex.feedForward.NeuronInTheList All Implemented Interfaces: Comparable public class NeuronInTheList extends Object implements Comparable Simple representation of a Neuron that will be juggled in the ToDoList. This representation quickly associates a neuron with its priority in the form of a weight value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 321 Class NeuronInTheList Author: Miguel Lara Version: 0.1 Constructor Summary Page NeuronInTheList(Neuron neuron, int weight) Constructor for objects of class NeuronInTheList Method Summary int 324 equals(Object otherNeuron) An element of this list is equal to another if it is the placeholder for the same neuron, regardless of their weight. int Page compareTo(Object otherNeuron) Instances of the class NeuronInTheList must be able to compare themselves with other placeholders to correctly sort themselves in the inner queue. boolean 322 324 getId() Obtains the identity of the neuron this instance as a placeholder 323 for. Neuron getNeuron() Obtains the neuron this instance as a placeholder for. int getWeight() The getter method for the neuron's given weight. void 323 323 updateWeight(int newWeight) Updates the weight of this placeholder. 323 Constructor Detail NeuronInTheList public NeuronInTheList(Neuron neuron, int weight) Constructor for objects of class NeuronInTheList Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 322 Class NeuronInTheList Method Detail getWeight public int getWeight() The getter method for the neuron's given weight. Returns: This neuron's weight (priority). getId public int getId() Obtains the identity of the neuron this instance as a placeholder for. Returns: This neuron's id. getNeuron public Neuron getNeuron() Obtains the neuron this instance as a placeholder for. Returns: The neuron. updateWeight public void updateWeight(int newWeight) Updates the weight of this placeholder. This is not a setter method as the new weight will only be be set if it gives this neuron a higher priority than the one it had. If the priority now granted is lower, the neuron will keep the old one. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 323 Class NeuronInTheList Parameters: newWeight - The new weight (priority) granted.. compareTo public int compareTo(Object otherNeuron) Instances of the class NeuronInTheList must be able to compare themselves with other placeholders to correctly sort themselves in the inner queue. Instances will be sorted according to their associated weight and identification number. Lower weights - and id's in case of the same weight - will have the highest priority. Returns: A negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. equals public boolean equals(Object otherNeuron) An element of this list is equal to another if it is the placeholder for the same neuron, regardless of their weight. In case the object passed is not a considered straight away as not equal. NeuronInTheList instance, it will be Overrides: equals in class Object Parameters: otherNeuron - A NeuronInTheList instance to be compared. Returns: A boolean value: true if both instances are equal. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 324 Class NeuronInTheList Class PerceptronNeuralNetwork com.jcortex.feedForward java.lang.Object com.jcortex.NeuralNetwork com.jcortex.feedForward.FeedForwardNeuralNetwork com.jcortex.feedForward.PerceptronNeuralNetwork public class PerceptronNeuralNetwork extends FeedForwardNeuralNetwork A Perceptron Neural Network is a specific kind of Feed-Forward Neural Network Author: Miguel Lara Encabo - [email protected] Version: 0.1b Fields inherited from class com.jcortex.NeuralNetwork inputTranslator, neurons, outputTranslator, sensors, teacher Constructor Summary Page PerceptronNeuralNetwork(int inputNum, InputTranslator inputTranslator, OutputTranslator outputTranslator) 326 Constructor for brand-new Perceptron Neural Networks. PerceptronNeuralNetwork(org.w3c.dom.Node nnRoot) Creates a representation. PerceptronNeuralNetwork instance from its XML Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 327 325 Class PerceptronNeuralNetwork Method Summary void nn2xml(org.w3c.dom.Element document) Page nnRoot, org.w3c.dom.Document There is no aditional specific information this neural network must put into its XML representation, as it is a pure Feed-Forward implementation. protected void specificNeuralNetwork2xml(org.w3c.dom.Element org.w3c.dom.Document document) nnRoot, There is no specific information to be added to the XML configuration as this model is completely based on the Feed-Forward network. String 327 toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. String 327 328 toString() Produces a String representation of this neural network. Methods inherited from com.jcortex.feedForward.FeedForwardNeuralNetwork 328 class pureThink Methods inherited from class com.jcortex.NeuralNetwork addEndNeuron, addFirstNeuron, addNeuron, addNeurons, createNeuralNetwork, export2XMLDocument, getAttributeCount, getConnectedNeurons, getEndNeurons, getInputTranslator, getNeuron, getNeuronCount, getNeurons, getOutputTranslator, getSensor, getSensorCount, getSensors, getTeacher, neuralNetwork2xml, pureThink, setEndNeurons, setFirtsNeurons, setInputTranslator, setOutputTranslator, setTeacher, think, toHTMLString, toString Constructor Detail PerceptronNeuralNetwork public PerceptronNeuralNetwork(int inputNum, InputTranslator inputTranslator, OutputTranslator outputTranslator) Constructor for brand-new Perceptron Neural Networks. Initializes the network's parameters and creates a Feed-Forward Neuron properly-configured to be a Perceptron neuron. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 326 Class PerceptronNeuralNetwork PerceptronNeuralNetwork public PerceptronNeuralNetwork(org.w3c.dom.Node nnRoot) throws ReadingException Creates a PerceptronNeuralNetwork instance from its XML representation. The whole process is based on the appropriate Feed-Forward Neural Network constructor as this neuron does not add any specific information. Throws: ReadingException Method Detail nn2xml public void nn2xml(org.w3c.dom.Element nnRoot, org.w3c.dom.Document document) There is no aditional specific information this neural network must put into its XML representation, as it is a pure Feed-Forward implementation. Parameters: nnRoot - This neuron's XML specificNeuralNetwork2xml protected void specificNeuralNetwork2xml(org.w3c.dom.Element nnRoot, org.w3c.dom.Document document) There is no specific information to be added to the XML configuration as this model is completely based on the Feed-Forward network. Overrides: specificNeuralNetwork2xml in class NeuralNetwork Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 327 Class PerceptronNeuralNetwork Parameters: nnRoot - The networl's node on to which the specific model's info must be put. - The original XML document used for the creation of nodes and other elements needed for representing this networks configuration. document toString public String toString() Produces a String representation of this neural network. Overrides: toString in class NeuralNetwork Returns: A String representation of this neural network. toHTMLString public String toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. Overrides: toHTMLString in class NeuralNetwork Returns: A String representation of this neural network. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 328 Class ToDoList Class ToDoList com.jcortex.feedForward java.lang.Object com.jcortex.feedForward.ToDoList All Implemented Interfaces: Iterator public class ToDoList extends Object implements Iterator A ToDoList instance puts some order into the stymulus propagation through a FeedForward Neural Network. This list itself is thought to work as a non-fail-fast Iterator (GoF), as new elements will be added to the structure each time a neuron is retrieved until the last layer (if there is no recursive connection to previous layers). The add() and next() methods are synchronized with looks to its use in multi-thread environments. Although the current version has not been tested to be completely thread-safe. Author: Miguel Lara Encabo Version: 0.1 Constructor Summary Page ToDoList(int neuronHighestId) Constructor for instances of class ToDoList. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 330 329 Class ToDoList Method Summary synchronized void Page add(Collection neurons, int weight) Adds a collection of neurons to the list. boolean hasNext() Finds out if there are more elements still left in the list. synchronized Object 331 next() Obtains the next element in the list. void 330 331 remove() Empty implementation as no objects should be removed from the list like this. 331 Constructor Detail ToDoList public ToDoList(int neuronHighestId) Constructor for instances of class ToDoList. The data structures are created, and the presence array is all initialized to false as there are no neurons in the list to start with. Method Detail add public synchronized void add(Collection neurons, int weight) Adds a collection of neurons to the list. Only the neurons that are not already in the list will be added. Parameters: neurons - The neuron collection to be added into the list. - The neuron's weight given by the number of steps given before it was reached. weight Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 330 Class ToDoList hasNext public boolean hasNext() Finds out if there are more elements still left in the list. Specified by: hasNext in interface Iterator Returns: A boolean value: true if there are still more elements left. next public synchronized Object next() Obtains the next element in the list. It works like a kind of pop from the ToDoList Specified by: next in interface Iterator Returns: The next neuron to be processed; null if there are none left. remove public void remove() Empty implementation as no objects should be removed from the list like this. Specified by: remove in interface Iterator Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 331 Package com.jcortex.hopfield Package com.jcortex.hopfield Class Summary Page DefaultHopfieldTeacher Default Teacher implementation for the Hopfield neural network model. 332 HopfieldNeuralNetwork The Hopfield Neural Network Model default implementation. 337 Class DefaultHopfieldTeacher com.jcortex.hopfield java.lang.Object com.jcortex.Teacher com.jcortex.hopfield.DefaultHopfieldTeacher public class DefaultHopfieldTeacher extends Teacher Default Teacher implementation for the Hopfield neural network model. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.Teacher VALIDATION_JUMP Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 332 Class DefaultHopfieldTeacher Constructor Summary Page DefaultHopfieldTeacher() 333 The default creator for a brand new teacher. DefaultHopfieldTeacher(org.w3c.dom.Node teacherNode) Creates a DefaultMultilayerPerceptronTeacher instance from an XML node with its configuration. 334 Method Summary Page Statistics createStatsSchema() Creates an empty stats shema as there is no progress to follow. Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) Educates a Hopfield network using a numerical matrix approach. ProgressAnalyzer 334 getAnalyzer() As there are no statistics to follow, this teacher does not have a traning analyzer. protected void 335 specificTeacher2xml(org.w3c.dom.Element org.w3c.dom.Document document) 336 teacherRoot, 335 This teacher has no arguments that need to be stored. void stopTraining() This teacher does not perform the training using iterations, so there is no point on having to stop. String 335 toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. 336 Methods inherited from class com.jcortex.Teacher createStatsSchema, educateNetwork, getAnalyzer, getStats, teacher2xml, toHTMLString, translateAndClassifyExamples stopTraining, Constructor Detail DefaultHopfieldTeacher public DefaultHopfieldTeacher() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 333 Class DefaultHopfieldTeacher The default creator for a brand new teacher. The Hopfield teacher has no training parameters. DefaultHopfieldTeacher public DefaultHopfieldTeacher(org.w3c.dom.Node teacherNode) Creates a DefaultMultilayerPerceptronTeacher instance from an XML node with its configuration. Method Detail educateNetwork public Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) throws IllegalArgumentException Educates a Hopfield network using a numerical matrix approach. Overrides: educateNetwork in class Teacher Parameters: nn - The neural network to be trained. exampleIObjects - The example input objects. exampleDObjects - The example output objects. Returns: The statistics for this training. Throws: - Exception thrown when an error occured due to problems with the training's parameters. IllegalArgumentException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 334 Class DefaultHopfieldTeacher createStatsSchema public Statistics createStatsSchema() Creates an empty stats shema as there is no progress to follow. Overrides: createStatsSchema in class Teacher Returns: An empty Statistics instance. specificTeacher2xml protected void specificTeacher2xml(org.w3c.dom.Element teacherRoot, org.w3c.dom.Document document) This teacher has no arguments that need to be stored. Overrides: specificTeacher2xml in class Teacher Parameters: - The XML node in which this teacher's configuration must be dumped. teacherRoot - The Document instance that will be the ultimate root for this XML structure. It is used in these methods to create the XML Elements and Nodes with its Factory Methods. document stopTraining public void stopTraining() This teacher does not perform the training using iterations, so there is no point on having to stop. This training is close to immediate! Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 335 Class DefaultHopfieldTeacher Overrides: stopTraining in class Teacher toHTMLString public String toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. Overrides: toHTMLString in class Teacher Returns: This teacher's String representation. getAnalyzer public ProgressAnalyzer getAnalyzer() As there are no statistics to follow, this teacher does not have a traning analyzer. Overrides: getAnalyzer in class Teacher Returns: null as there is no progress analyzer. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 336 Class HopfieldNeuralNetwork Class HopfieldNeuralNetwork com.jcortex.hopfield java.lang.Object com.jcortex.NeuralNetwork com.jcortex.hopfield.HopfieldNeuralNetwork public class HopfieldNeuralNetwork extends NeuralNetwork The Hopfield Neural Network Model default implementation. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.NeuralNetwork inputTranslator, neurons, outputTranslator, sensors, teacher Constructor Summary HopfieldNeuralNetwork(int inputsNum, OutputTranslator outputTranslator) Page InputTranslator inputTranslator, 339 Creates brand-new instance of HopfieldNeuralNetwork. HopfieldNeuralNetwork(org.w3c.dom.Node nnRoot) Creates a configuration. HopfieldNeuralNetwork instance from XML sotored Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 339 337 Class HopfieldNeuralNetwork Method Summary int Page getAttributeCount() Obtains the number of input values (or attribues) this neural network can deal with. float[] getBias() 340 Obtains this network's bias vector. float[][] getWeights() Obtains the weights matrix used by this neural network to store its information. static float 339 hopfieldEnergy(float[] bias) pattern, float[][] weights, 340 float[] 343 Static method for calculating Hopfield's Energy for a pattern. static float[] hopfieldSignFunction(float[] functionsInput) iterationsInput, float[] 342 Static method for calculating Hopfield's Sign Function. float[] pureThink(float[] inputData) 341 Makes the real numerical thinking. void setBias(float[] bias) 340 Sets this network's bias vector. void setWeights(float[][] weights) 340 Sets this network's weight's matrix. protected void specificNeuralNetwork2xml(org.w3c.dom.Element org.w3c.dom.Document document) nnRoot, Puts into this neural network's XML configuration node the aditional information it has as being a HopfieldNeuralNetwork instance. String toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. String 341 342 toString() Produces a String representation of this neural network. 342 Methods inherited from class com.jcortex.NeuralNetwork addEndNeuron, addFirstNeuron, addNeuron, addNeurons, createNeuralNetwork, export2XMLDocument, getAttributeCount, getConnectedNeurons, getEndNeurons, getInputTranslator, getNeuron, getNeuronCount, getNeurons, getOutputTranslator, getSensor, getSensorCount, getSensors, getTeacher, neuralNetwork2xml, pureThink, setEndNeurons, setFirtsNeurons, setInputTranslator, setOutputTranslator, setTeacher, think, toHTMLString, toString Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 338 Class HopfieldNeuralNetwork Constructor Detail HopfieldNeuralNetwork public HopfieldNeuralNetwork(int inputsNum, InputTranslator inputTranslator, OutputTranslator outputTranslator) Creates brand-new instance of HopfieldNeuralNetwork. HopfieldNeuralNetwork public HopfieldNeuralNetwork(org.w3c.dom.Node nnRoot) throws ReadingException Creates a HopfieldNeuralNetwork instance from XML sotored configuration. This method's main task is loading the square numerical matrix with this neural network's weights, and the bias vector. Throws: ReadingException Method Detail getAttributeCount public int getAttributeCount() Obtains the number of input values (or attribues) this neural network can deal with. Overrides: getAttributeCount in class NeuralNetwork Returns: The number of input values. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 339 Class HopfieldNeuralNetwork getBias public float[] getBias() Obtains this network's bias vector. Returns: The bias vector. setBias public void setBias(float[] bias) Sets this network's bias vector. Parameters: bias - The new bias vector. getWeights public float[][] getWeights() Obtains the weights matrix used by this neural network to store its information. Returns: The weights matrix. setWeights public void setWeights(float[][] weights) Sets this network's weight's matrix. Parameters: weights - The new weights matrix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 340 Class HopfieldNeuralNetwork pureThink public float[] pureThink(float[] inputData) throws IllegalArgumentException Makes the real numerical thinking. This is a matrix-based method, so its propagation strategy is completely different to other neural networks. Overrides: pureThink in class NeuralNetwork Parameters: inputData - The numerical input data. Returns: The numerical result of passing the input through the network. Throws: IllegalArgumentException specificNeuralNetwork2xml protected void specificNeuralNetwork2xml(org.w3c.dom.Element nnRoot, org.w3c.dom.Document document) Puts into this neural network's XML configuration node the aditional information it has as being a HopfieldNeuralNetwork instance. The most relevant information stored at this level is matrix with this neural network's weights. Overrides: specificNeuralNetwork2xml in class NeuralNetwork Parameters: nnRoot - This neural network's XML configuration node. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 341 Class HopfieldNeuralNetwork document - The XML Document needed to create new elements. toString public String toString() Produces a String representation of this neural network. Overrides: toString in class NeuralNetwork Returns: A String representation of this neural network. toHTMLString public String toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. Overrides: toHTMLString in class NeuralNetwork Returns: A String representation of this neural network. hopfieldSignFunction public static float[] hopfieldSignFunction(float[] iterationsInput, float[] functionsInput) Static method for calculating Hopfield's Sign Function. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 342 Class HopfieldNeuralNetwork Parameters: - The previous value vector is needed because if functionsInput[i]==0 the input value, stored as iterationsInput[i] is the result for index i. iterationsInput functionsInput - The input with which the function calculates. Returns: A vector with the resulting binary values. hopfieldEnergy public static float hopfieldEnergy(float[] pattern, float[][] weights, float[] bias) Static method for calculating Hopfield's Energy for a pattern. Parameters: pattern - The pattern. weights - The weights matrix. bias - The bias vector. Returns: The Hopfield's Energy calculated for this pattern. Package com.jcortex.kohonen Class Summary Page CylinderHexKMap Models a cylinder-organized Kohonen Map with hexagonal-shaped neurons. 344 CylinderSquareKMap Models a cylinder-organized Kohonen Map with square-shaped neurons. 347 CylinderStarKMap Models a cylinder-organized Kohonen Map with star-shaped neurons. 350 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 343 Package com.jcortex.kohonen Default2DKMap Intermediate implementation of the KohonenMap abstract class, that covers the functionality common to all maps organized in a 2D enviroment (this is, that can be stored in a 2D matrix). 353 DefaultKohonenTeacher Default Teacher implementation for the Kohonen neural networkn model. 358 KohonenMap Abstract class obliged to all Kohonen Maps used within the JCortex framework. 368 KohonenNeuralNetwork The Kohonen Neural Network Model default implementation. 376 KohonenNeuron Class that models the functionalities of a Kohonen neuron. 384 SheetHexKMap Models a sheet-organized Kohonen Map with hexagonal-shaped neurons. 395 SheetSquareKMap Models a sheet-organized Kohonen Map with square-shaped neurons. 398 SheetStarKMap Models a sheet-organized Kohonen Map with starshaped neurons. 401 ToroidHexKMap Models a toroid-organized Kohonen Map with hexagonal-shaped neurons. 404 ToroidSquareKMap Models a toroid-organized Kohonen Map with square-shaped neurons. 407 ToroidStarKMap Models a toroid-organized Kohonen Map with starshaped neurons. 410 Class CylinderHexKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.CylinderHexKMap Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 344 Class CylinderHexKMap public class CylinderHexKMap extends Default2DKMap Models a cylinder-organized Kohonen Map with hexagonal-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Constructor Summary CylinderHexKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) Page 346 The basic constructor for this kind of Kohonen Map. CylinderHexKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a CylinderHexKMap from its configuration stored in an XML node. Method Summary boolean[][] 346 Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a cylinder-organized map with hexagonal-shaped neurons. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 346 345 Class CylinderHexKMap Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail CylinderHexKMap public CylinderHexKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. CylinderHexKMap public CylinderHexKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a CylinderHexKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 346 Class CylinderHexKMap Creates the Connection-Matrix for a cylinder-organized map with hexagonalshaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Class CylinderSquareKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.CylinderSquareKMap public class CylinderSquareKMap extends Default2DKMap Models a cylinder-organized Kohonen Map with square-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 347 Class CylinderSquareKMap Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Constructor Summary Page CylinderSquareKMap(int entriesCount, DistanceFunction dFunction) int rows, int cols, 349 The basic constructor for this kind of Kohonen Map. CylinderSquareKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a CylinderSquareKMap from its configuration stored in an XML 349 node. Method Summary boolean[][] Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a cylinder-organized map with square-shaped neurons. 349 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 348 Class CylinderSquareKMap Constructor Detail CylinderSquareKMap public CylinderSquareKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. CylinderSquareKMap public CylinderSquareKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a CylinderSquareKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a cylinder-organized map with squareshaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 349 Class CylinderSquareKMap Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Class CylinderStarKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.CylinderStarKMap public class CylinderStarKMap extends Default2DKMap Models a cylinder-organized Kohonen Map with star-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 350 Class CylinderStarKMap Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Constructor Summary Page CylinderStarKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) 351 The basic constructor for this kind of Kohonen Map. CylinderStarKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a CylinderStarKMap from its configuration stored in an XML 352 node. Method Summary boolean[][] Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a cylinder-organized map with star-shaped neurons. 352 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail CylinderStarKMap public CylinderStarKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 351 Class CylinderStarKMap The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. CylinderStarKMap public CylinderStarKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a CylinderStarKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a cylinder-organized map with star-shaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 352 Class CylinderStarKMap Class Default2DKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap Direct Known Subclasses: CylinderHexKMap, CylinderSquareKMap, CylinderStarKMap, SheetHexKMap, SheetSquareKMap, SheetStarKMap, ToroidHexKMap, ToroidSquareKMap, ToroidStarKMap abstract public class Default2DKMap extends KohonenMap Intermediate implementation of the KohonenMap abstract class, that covers the functionality common to all maps organized in a 2D enviroment (this is, that can be stored in a 2D matrix). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Field Summary protected int cols This map's column size Its visibility is protected to allow a quicker use from its subclasses. protected List Page 355 neurons The list of neurons in this map. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 355 353 Class Default2DKMap protected int rows 355 This map's row size. Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Constructor Summary Default2DKMap(int entriesCount, int dFunction) Page rows, int cols, DistanceFunction 355 The basic constructor for a brand-new 2D Kohonen Map. Default2DKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a Default2DKMap from its configuration stored in an XML node. Method Summary int Page getColumnCount() Gets the number of columns in this map. int[] 357 iterator() Obtains an Iterator instance that guides through the neurons in the map. org.w3c.dom.Node 356 getRowCount() Gets the number of rows in this map. Iterator 356 getNeurons() Gets the list of neurons from this map. int 357 getNeuron(int neuronId) Gets a neuron given its id number. List 357 getDimensions() Obtains this map's dimension in the shape of a int[] array. KohonenNeuron 356 357 map2xml(org.w3c.dom.Document document) Obtains this Kohonen Map's XML representation. 358 Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 354 Class Default2DKMap Field Detail neurons protected List neurons The list of neurons in this map. Its visibility is protected to allow a quicker use from its subclasses. rows protected int rows This map's row size. Its visibility is protected to allow a quicker use from its subclasses. cols protected int cols This map's column size Its visibility is protected to allow a quicker use from its subclasses. Constructor Detail Default2DKMap public Default2DKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for a brand-new 2D Kohonen Map. This constructor initializes this class' attributes and creates all the neurons the map will hold. These neurons are stored inside its internal list. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 355 Class Default2DKMap Default2DKMap public Default2DKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a Default2DKMap from its configuration stored in an XML node. This constructor gets from the XML node its attributes and its list of neurons from the Kohonen Neural Network. Method Detail getNeuron public KohonenNeuron getNeuron(int neuronId) Gets a neuron given its id number. Overrides: getNeuron in class KohonenMap Parameters: neuronId - The identification number of the requested neuron. Returns: The requested neuron. getNeurons public List getNeurons() Gets the list of neurons from this map. Overrides: getNeurons in class KohonenMap Returns: The list of neurons held by this map. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 356 Class Default2DKMap getColumnCount public int getColumnCount() Gets the number of columns in this map. Returns: The number of columns. getRowCount public int getRowCount() Gets the number of rows in this map. Returns: The number of rows. getDimensions public int[] getDimensions() Obtains this map's dimension in the shape of a int[] array. Schema: {rows, columns}. Overrides: getDimensions in class KohonenMap Returns: This map's dimension. iterator public Iterator iterator() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 357 Class Default2DKMap Obtains an Iterator instance that guides through the neurons in the map. Overrides: iterator in class KohonenMap Returns: The Iterator instance. map2xml public org.w3c.dom.Node map2xml(org.w3c.dom.Document document) Obtains this Kohonen Map's XML representation. Creates the XML node and stores this map's configuration. The specific KohonenMap subclass is stored as an attribute in the node. Overrides: map2xml in class KohonenMap Parameters: - The Document instance that will be the ultimate root for this XML structure. It is used in these methods to create the XML Elements and Nodes with its Factory Methods. document Returns: An XML node with this map's configuration. Class DefaultKohonenTeacher com.jcortex.kohonen java.lang.Object com.jcortex.Teacher com.jcortex.kohonen.DefaultKohonenTeacher Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 358 Class DefaultKohonenTeacher public class DefaultKohonenTeacher extends Teacher Default Teacher implementation for the Kohonen neural networkn model. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Field Summary boolean static String Page continueTraining 361 MISPLACED_EXAMPLES Textual identifier for the Misplaced Examples statistic dimension. Measure 361 Fields inherited from class com.jcortex.Teacher VALIDATION_JUMP Constructor Summary Page DefaultKohonenTeacher() The default creator for a brand new teacher. 361 DefaultKohonenTeacher(org.w3c.dom.Node teacherNode) Creates a configuration. DefaultKohonenTeacher instance from an XML node with its Method Summary Statistics 361 Page createStatsSchema() Creates the Statistics instance with the specific progress measures needed by thos particular Teacher. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 366 359 Class DefaultKohonenTeacher Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) Educates a Kohonen Neural Network using the given example set. int getAnalysisWindow() 365 Obtains the Analysis Window training parameter. ProgressAnalyzer getAnalyzer() 366 Obtains this teacher's associated training analyzer. float getConstantVariation() 364 Obtains the Constant Variation training parameter. float getLearningRate() 362 Obtains the Learning Rate training parameter. long getMaxIterations() Obtains parameter. float int the Maximum Iteration Number training 363 Obtains the Maximum Average Distance Accepted training parameter. 364 getMaxMisplacedPercent() getNeighbourhoodRadius() Obtains the Neigbourhood Radius training parameter. void 365 setConstantVariation(float constantVariation) 365 Sets the Constant Variation training parameter. void setLearningRate(float learningRate) 363 Sets the Learning Rate training parameter. void setMaxIterations(long maxIterations) Sets the Maximum Iteration Number training parameter. void 364 setNeighbourhoodRadius(int neighbourhoodRadius) 363 Sets the Neigbourhood Radius training parameter. void 364 setMaxMisplacedPercent(float maxAverageDistanceAccepted) Sets the Maximum Average Distance Accepted training parameter. void 363 setAnalysisWindow(int constantWindow) Obtains the Analysis Window training parameter. void 362 specificTeacher2xml(org.w3c.dom.Element org.w3c.dom.Document document) teacherRoot, Dumps into the teacher's XML node this specific instance's configuration. Teacher Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 366 360 Class DefaultKohonenTeacher void stopTraining() Stops the training's progress by interrupting its next iteration. String 367 toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. 367 Methods inherited from class com.jcortex.Teacher createStatsSchema, educateNetwork, getAnalyzer, getStats, teacher2xml, toHTMLString, translateAndClassifyExamples stopTraining, Field Detail MISPLACED_EXAMPLES public static String MISPLACED_EXAMPLES Textual identifier for the Misplaced Examples statistic Measure dimension. continueTraining public boolean continueTraining Constructor Detail DefaultKohonenTeacher public DefaultKohonenTeacher() The default creator for a brand new teacher. All learning parameters are initialized with their default values. DefaultKohonenTeacher public DefaultKohonenTeacher(org.w3c.dom.Node teacherNode) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 361 Class DefaultKohonenTeacher Creates a DefaultKohonenTeacher instance from an XML node with its configuration. Method Detail educateNetwork public Statistics educateNetwork(NeuralNetwork nn, Object[] exampleIObjects, Object[] exampleDObjects) throws IllegalArgumentException Educates a Kohonen Neural Network using the given example set. Overrides: educateNetwork in class Teacher Parameters: nn - The neural network to be trained. exampleIObjects - The example input objects. exampleDObjects - The example output objects. Returns: The statistics for this training. Throws: - Exception thrown when an error occured due to problems with the training's parameters. IllegalArgumentException getLearningRate public float getLearningRate() Obtains the Learning Rate training parameter. Returns: The requested parameter's value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 362 Class DefaultKohonenTeacher setLearningRate public void setLearningRate(float learningRate) Sets the Learning Rate training parameter. Parameters: learningRate - The new value. getNeighbourhoodRadius public int getNeighbourhoodRadius() Obtains the Neigbourhood Radius training parameter. Returns: The requested parameter's value. setNeighbourhoodRadius public void setNeighbourhoodRadius(int neighbourhoodRadius) Sets the Neigbourhood Radius training parameter. Parameters: neighbourhoodRadius - The new value. getMaxIterations public long getMaxIterations() Obtains the Maximum Iteration Number training parameter. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 363 Class DefaultKohonenTeacher Returns: The requested parameter's value. setMaxIterations public void setMaxIterations(long maxIterations) Sets the Maximum Iteration Number training parameter. Parameters: maxIterations - The new value. getMaxMisplacedPercent public float getMaxMisplacedPercent() Obtains the Maximum Average Distance Accepted training parameter. Returns: The requested parameter's value. setMaxMisplacedPercent public void setMaxMisplacedPercent(float maxAverageDistanceAccepted) Sets the Maximum Average Distance Accepted training parameter. Parameters: maxAverageDistanceAccepted - The new value. getConstantVariation public float getConstantVariation() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 364 Class DefaultKohonenTeacher Obtains the Constant Variation training parameter. Returns: The requested parameter's value. setConstantVariation public void setConstantVariation(float constantVariation) Sets the Constant Variation training parameter. Parameters: constantVariation - The new value. getAnalysisWindow public int getAnalysisWindow() Obtains the Analysis Window training parameter. Returns: The requested parameter's value. setAnalysisWindow public void setAnalysisWindow(int constantWindow) Obtains the Analysis Window training parameter. Parameters: constantWindow - The new value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 365 Class DefaultKohonenTeacher getAnalyzer public ProgressAnalyzer getAnalyzer() Obtains this teacher's associated training analyzer. Overrides: getAnalyzer in class Teacher Returns: The training statistics analyzer createStatsSchema public Statistics createStatsSchema() Creates the Statistics instance with the specific progress measures needed by thos particular Teacher. This method works as a a Template Method (GoF) for the getStats() method implemented in the Teacher abstract class. The measures used in the training will be: MISPLACED_EXAMPLES, WEIGHT_VARIATION, all of them defined as static Strings in this class. Overrides: createStatsSchema in class Teacher Returns: The new Statistics instance. specificTeacher2xml public void specificTeacher2xml(org.w3c.dom.Element teacherRoot, org.w3c.dom.Document document) Dumps into the teacher's XML node this specific Teacher instance's configuration. This is a Template Method (GoF) for the Teacher abstract class. This teacher's training parameters are stored as attributes in the XML configuration node. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 366 Class DefaultKohonenTeacher Overrides: specificTeacher2xml in class Teacher Parameters: - The XML node in which this teacher's configuration must be dumped. teacherRoot - The Document instance that will be the ultimate root for this XML structure. It is used in these methods to create the XML Elements and Nodes with its Factory Methods. document stopTraining public void stopTraining() Stops the training's progress by interrupting its next iteration. For this, it uses a boolan flag - this class' attribute continueTraining and turns it false so the next time the iteration reaches the condition state, it will surely jump out of the training loop. Overrides: stopTraining in class Teacher toHTMLString public String toHTMLString() Produces a String representation of this teacher's parameters and settings, including HTML tags to enhance it with styled text. Overrides: toHTMLString in class Teacher Returns: This teacher's String representation. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 367 Class DefaultKohonenTeacher Class KohonenMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap Direct Known Subclasses: Default2DKMap abstract public class KohonenMap extends Object Abstract class obliged to all Kohonen Maps used within the JCortex framework. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Field Summary protected KohonenNeuron Page bestNeuron The best neuron found out during the last propagation process. protected List neighbourhoods The list of neighbourhoods. protected int 370 neuronCount The number of neurons held by this map. protected Sensor[] 370 370 sensors The array of sensors used by this map. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 370 368 Class KohonenMap Constructor Summary public KohonenMap(int entriesCount, int neuronCount) Creates a brand Kohonen Map. protected Page 371 KohonenMap(org.w3c.dom.Node mapRoot, KohonenNeuralNetwork knn) Constructor for creating a Kohonen Map from its XML node representation. Method Summary abstract boolean[][] Page createConnectionMatrix(int neuronCount) Creates the specific Connection Matrix. KohonenNeuron 373 getDimensions() Obtains this map's dimensions. Collection 372 getBestNeuron() Obtains the best neuron for the last propagation. abstract int[] 371 375 getNeighbours(KohonenNeuron neuron) Obtains the list of neurons in neighbourhood of a given 373 one. Collection getNeighbours(int neuronId) Obtains the list of neurons in neighbourhood of a given 373 one. abstract KohonenNeuron getNeuron(int neuronId) Gets a neuron from the map given given its id. int getNeuronCount() Obtains the number of neurons in the Map. abstract List 374 integrateWithNeuralNetwork(KohonenNeuralNetwork knn) Integrates this map with its Kohonen neural network. abstract Iterator 374 getNeurons() Obtains the Vector of Neurons organized by their id. void 374 371 iterator() Gets the Iterator that can explore all the neurons in this 375 map. abstract org.w3c.dom.Node map2xml(org.w3c.dom.Document document) Obtains the XML representation of this Kohonen map. void 375 prepareNeighbourhoods(int neighbourhoodRadius) Default neighbourhood preparation, uses a matrixcalculation approach for the creation of neighbourhoods. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 371 369 Class KohonenMap void setBestNeuron(KohonenNeuron kNeuron) Sets the best neuron for the last propagation. 373 Field Detail neuronCount protected int neuronCount The number of neurons held by this map. neighbourhoods protected List neighbourhoods The list of neighbourhoods. Each neighbourhood will be represented by a collection of neurons. This list's ix indexed entry must match the neighbourhood of the neuron whose id number is exactly ix. bestNeuron protected KohonenNeuron bestNeuron The best neuron found out during the last propagation process. sensors protected Sensor[] sensors The array of sensors used by this map. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 370 Class KohonenMap Constructor Detail KohonenMap public KohonenMap(int entriesCount, int neuronCount) Creates a brand Kohonen Map. From this abstraction level, the Kohonen map must create the sensors array and the neighbourhood structure, creating the collection for each neighbourhood. KohonenMap protected KohonenMap(org.w3c.dom.Node mapRoot, KohonenNeuralNetwork knn) Constructor for creating a Kohonen Map from its XML node representation. Method Detail integrateWithNeuralNetwork public void integrateWithNeuralNetwork(KohonenNeuralNetwork knn) Integrates this map with its Kohonen neural network. This process includes adding all this map's neurons to the neural network's repository and copying the network's sensors into the Parameters: knn - The Kohonen neural network that holds this map. prepareNeighbourhoods public void prepareNeighbourhoods(int neighbourhoodRadius) throws IllegalArgumentException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 371 Class KohonenMap Default neighbourhood preparation, uses a matrix-calculation approach for the creation of neighbourhoods. It needs each specific kind of Map to produce its own Connection-Matrix. This matrix is calculated by this specific map using the Template Method (GoF) createConnectionMatrix(). A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. The initial matrix produced with the Template Method is the one that would meet the requirements of a 1 neighbourhood radius, showing only the direct connections of each neuron. Making recursive operations with this matrix, the neighbourhood for any radius value can be obtained. The [i][j] neurons will be in each other's neighbourhood. The matrix representation obtained is afterwords translated into each neuron's neighbourhood list. Parameters: neighbourhoodRadius - The neighbourhood's radius. Throws: - Exception thrown when an error occured due to problems with the network's parameters. IllegalArgumentException createConnectionMatrix public abstract boolean[][] createConnectionMatrix(int neuronCount) Creates the specific Connection Matrix. This is a boolean matrix that indicates the radius = 1 connection between Neighbourhoods. This is part of the implementation of the Template Method Design Pattern. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 372 Class KohonenMap getBestNeuron public KohonenNeuron getBestNeuron() Obtains the best neuron for the last propagation. Returns: The neuron with the lowest distance to the latest input setBestNeuron public void setBestNeuron(KohonenNeuron kNeuron) Sets the best neuron for the last propagation. Parameters: kNeuron - The best neuron. getNeighbours public Collection getNeighbours(KohonenNeuron neuron) Obtains the list of neurons in neighbourhood of a given one. Parameters: neuron - The neuron to be taken as the center of the neighbourhood. Returns: The list of kohonen neurons in the neighbourhood. getNeighbours public Collection getNeighbours(int neuronId) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 373 Class KohonenMap Obtains the list of neurons in neighbourhood of a given one. This method bases its functionality on getNeuron(int) and getNeighbours(KohonenNeuron, int, short) methods. Parameters: - The id of the neuron to be taken as the center of the neighbourhood. neuronId Returns: The list of kohonen neurons in the neighbourhood. getNeuron public abstract KohonenNeuron getNeuron(int neuronId) Gets a neuron from the map given given its id. Parameters: neuronId - The id of the neuron to be returned. Returns: The neuron with that id. null if no neuron has that id. getNeurons public abstract List getNeurons() Obtains the Vector of Neurons organized by their id. Returns: The neurons from the Map. getNeuronCount public int getNeuronCount() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 374 Class KohonenMap Obtains the number of neurons in the Map. Returns: The number od neurons in the Map. iterator public abstract Iterator iterator() Gets the Iterator that can explore all the neurons in this map. Returns: The Iterator instance for this map. getDimensions public abstract int[] getDimensions() Obtains this map's dimensions. This means the number of neurons for each dimension. Returns: A int array with the number of neurons in the index+1 dimension. (In the array[0] the first dimension will be stored...). map2xml public abstract org.w3c.dom.Node map2xml(org.w3c.dom.Document document) Obtains the XML representation of this Kohonen map. It generates a XML node with this map's configuration. Parameters: document - The XML document required for the creating new elements. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 375 Class KohonenMap Returns: The XML neuron with this Kohonen map's configuration. Class KohonenNeuralNetwork com.jcortex.kohonen java.lang.Object com.jcortex.NeuralNetwork com.jcortex.kohonen.KohonenNeuralNetwork public class KohonenNeuralNetwork extends NeuralNetwork The Kohonen Neural Network Model default implementation. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Field Summary static final short HEX_NEIGHBOURHOOD static final short LATTICE_1D static final short LATTICE_2D static final short LATTICE_CYLINDER Page 378 Hexagonal hexagonal grid neighbourhood. 379 One dimensional lattice. 379 Two dimensional lattice. Two dimensional lattice (as in (vertical only) wrapping. LATTICE_2D) with a cylindrical Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 379 376 Class KohonenNeuralNetwork static final short LATTICE_TOROID static final short SQUARE_NEIGHBOURHOOD static final short STAR_NEIGHBOURHOOD Two dimensional lattice (as in horizontal & vertical only) wrapping. LATTICE_2D) with a toroid (both 379 378 Square grid neighbourhood. 379 Square grid neighbourhood. Fields inherited from class com.jcortex.NeuralNetwork inputTranslator, neurons, outputTranslator, sensors, teacher Constructor Summary Page KohonenNeuralNetwork(int neuronNum, int inputsNum, InputTranslator inputTranslator, OutputTranslator outputTranslator, KohonenMap map, short neighbourhoodShape) 380 Creates brand-new instance of KohonenNeuralNetwork. KohonenNeuralNetwork(org.w3c.dom.Node nnRoot) Creates a configuration. KohonenNeuralNetwork instance from XML sotored Method Summary Collection 382 getNeighbourhoodShape() Obtains this neural netwrok's neighbourhood shape - or neuron shape. void 382 getMap() Obtains the KohonenMap instance that holds this Kohonen neural network's structure. short 381 getBestNeuron() Obtains the neuron that obtained the best result in the last propagation. KohonenMap Page getBestNeighbourhood() Obtains the best neuron's neighbourhood. KohonenNeuron 380 382 prepareNeighbourhoods(int neighbourhoodRadius) Prepares the neighbourhoods for this neural network's training, calculating the list of neurons present in each neighbourhood. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 383 377 Class KohonenNeuralNetwork float[] pureThink(float[] input) Makes the specific numerical thinking for the Kohonen Neural Network. protected void specificNeuralNetwork2xml(org.w3c.dom.Element org.w3c.dom.Document document) nnRoot, Puts into this neural network's XML configuration node the aditional information it has as being a KohonenNeuralNetwork instance. Object 380 toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. String 383 think(Object inputData) Calculates the result obtained from the input data. String 381 384 toString() Produces a String representation of this neural network. 384 Methods inherited from class com.jcortex.NeuralNetwork addEndNeuron, addFirstNeuron, addNeuron, addNeurons, createNeuralNetwork, export2XMLDocument, getAttributeCount, getConnectedNeurons, getEndNeurons, getInputTranslator, getNeuron, getNeuronCount, getNeurons, getOutputTranslator, getSensor, getSensorCount, getSensors, getTeacher, neuralNetwork2xml, pureThink, setEndNeurons, setFirtsNeurons, setInputTranslator, setOutputTranslator, setTeacher, think, toHTMLString, toString Field Detail HEX_NEIGHBOURHOOD public static final short HEX_NEIGHBOURHOOD Hexagonal hexagonal grid neighbourhood. SQUARE_NEIGHBOURHOOD public static final short SQUARE_NEIGHBOURHOOD Square grid neighbourhood. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 378 Class KohonenNeuralNetwork STAR_NEIGHBOURHOOD public static final short STAR_NEIGHBOURHOOD Square grid neighbourhood. LATTICE_1D public static final short LATTICE_1D One dimensional lattice. The neurons can be stored in a single dimension array. LATTICE_2D public static final short LATTICE_2D Two dimensional lattice. The neurons can be stored in a two dimension array. LATTICE_CYLINDER public static final short LATTICE_CYLINDER Two dimensional lattice (as in wrapping. LATTICE_2D) with a cylindrical (vertical only) LATTICE_TOROID public static final short LATTICE_TOROID Two dimensional lattice (as in vertical only) wrapping. LATTICE_2D) with a toroid (both horizontal & Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 379 Class KohonenNeuralNetwork Constructor Detail KohonenNeuralNetwork public KohonenNeuralNetwork(int neuronNum, int inputsNum, InputTranslator inputTranslator, OutputTranslator outputTranslator, KohonenMap map, short neighbourhoodShape) Creates brand-new instance of KohonenNeuralNetwork. KohonenNeuralNetwork public KohonenNeuralNetwork(org.w3c.dom.Node nnRoot) throws ReadingException Creates a KohonenNeuralNetwork instance from XML sotored configuration. This method's main task is invoking the creation of the that organizes the neurons of this network. KohonenMap instance Throws: ReadingException Method Detail think public Object think(Object inputData) throws IllegalArgumentException Calculates the result obtained from the input data. This method overrides the think() method defined in the abstract class NeuralNetwork as this network's output is not obtained through its ending neuron's values, but by the Dominant Class of the best neuron. Overrides: think in class NeuralNetwork Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 380 Class KohonenNeuralNetwork Parameters: inputData - The object that serves as input data for the neural network. Returns: An object containing the answer given by the neral network. Throws: IllegalArgumentException pureThink public float[] pureThink(float[] input) throws IllegalArgumentException Makes the specific numerical thinking for the Kohonen Neural Network. This process is based on the pureThink() method implemented in this network's Kohonen Map instance. It behaves as the Template Method (GoF) for the think() method. Overrides: pureThink in class NeuralNetwork Parameters: input - The numerical input data. Returns: The numerical result of passing the input through the network. Throws: IllegalArgumentException getBestNeighbourhood public Collection getBestNeighbourhood() Obtains the best neuron's neighbourhood. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 381 Class KohonenNeuralNetwork Returns: A collection with the neurons from the best neuron's neighbourhood. getBestNeuron public KohonenNeuron getBestNeuron() Obtains the neuron that obtained the best result in the last propagation. Returns: The best neuron from the last propagation. getMap public KohonenMap getMap() Obtains the structure. KohonenMap instance that holds this Kohonen neural network's Returns: This network's associated KohonenMap instance. getNeighbourhoodShape public short getNeighbourhoodShape() Obtains this neural netwrok's neighbourhood shape - or neuron shape. Returns: This neural networ's neighbourhood shape - or neuron shape Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 382 Class KohonenNeuralNetwork prepareNeighbourhoods public void prepareNeighbourhoods(int neighbourhoodRadius) throws IllegalArgumentException Prepares the neighbourhoods for this neural network's training, calculating the list of neurons present in each neighbourhood. This method is based on the prepareNeighbourhoods() method from this network's associated KohonenMap instance. Parameters: neighbourhoodRadius - The neighbourhood radius that will be used in the training. Throws: - Exception thrown if any problem is found with the value of the network's or training parameters. IllegalArgumentException specificNeuralNetwork2xml protected void specificNeuralNetwork2xml(org.w3c.dom.Element nnRoot, org.w3c.dom.Document document) Puts into this neural network's XML configuration node the aditional information it has as being a KohonenNeuralNetwork instance. The most relevant information stored at this level is the Kohonen Map that holds this network's structure. Overrides: specificNeuralNetwork2xml in class NeuralNetwork Parameters: nnRoot - This neural network's XML configuration node. document - The XML Document needed to create new elements. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 383 Class KohonenNeuralNetwork toString public String toString() Produces a String representation of this neural network. Overrides: toString in class NeuralNetwork Returns: A String representation of this neural network. toHTMLString public String toHTMLString() Produces a String representation of this neural network enhanced with HTML tags to include styled text. Overrides: toHTMLString in class NeuralNetwork Returns: A String representation of this neural network. Class KohonenNeuron com.jcortex.kohonen java.lang.Object com.jcortex.Neuron com.jcortex.kohonen.KohonenNeuron All Implemented Interfaces: AxonReceiver, AxonSource Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 384 Class KohonenNeuron public class KohonenNeuron extends Neuron Class that models the functionalities of a Kohonen neuron. A Kohonen neuron network can be associated to various Distance Functions. It stores has references to its entries, this neural network's sensors, and keeps record of the classes of the examples used for its training. Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.Neuron RANDOM_CLOSE_TO_ZERO_VALUE, RANDOM_INITIAL_VALUE, ZERO_INITIAL_VALUE Constructor Summary Page KohonenNeuron(int id, int entriesCount, distanceFunction, AxonSource[] sensors) DistanceFunction 387 Creates a brand-new KohonenNeuron instance. KohonenNeuron(org.w3c.dom.Node neuronNode, NeuralNetwork nn) Creates a configuration. KohonenNeuron instance from an XML node with its Method Summary void 390 addEntry(AxonSource entry) This should not be used. void Page addConnectedNeuron(AxonReceiver child, boolean back_connection) Ignored for Kohonen neurons as these can not have childs. void 387 391 addEntry(AxonSource entry, float weight) This should not be used. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 391 385 Class KohonenNeuron void clearExamplesInClasses() Cleans the dominant class and the classes map. float getAxonValue() Obtains the last Axon Value produced by the method produceAxonValue(). int 394 setEntryWeight(AxonSource parent, float value) Sets the weight for the requested entry. void 388 registerLastExampleClass(Object lastExampleClass) Records the last example's class. void 392 produceAxonValue() Produces this neuron's Axon Value that is none other than the distance between the input values and the ones stored as its weights. void 392 getWeigths() Obtains this neuron's weight's array. float 388 getWeight(int ix) Obtains the value from this neuron's weight vector, referenced by the given index. float[] 388 getEntryWeight(AxonSource parent) Obtains the weight associate to a given entry. float 391 getEntries() Obtains the entries for this neuron which are none others but the neural network's sensors. float 389 getDominantClass() Obtains this neuron's dominant class: the one that has obtained most of the examples. Collection 392 getConnectedNeurons() No neurons can be connected to a Kohonen neuron. Object 392 getClusterSuccesses() Obtains the number of clustering successes.This is the number of classes registered from the examples that have fallen into this neuron that match the dominant class. Collection 389 getClusterErrors() Obtains the number of clustering errors.This is the number of classes registered from the examples that have fallen into this neuron that do not match the dominant class. int 394 393 setEntryWeight(int ix, float value) Sets the weight for the entry on the position ix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 393 386 Class KohonenNeuron protected void specificNeuron2xml(org.w3c.dom.Element org.w3c.dom.Document document) neuronRoot, Adds the specific information known to the Kohonen Neuron at this level. String 390 toString() Obtains a String representation of this neuron. 394 Methods inherited from class com.jcortex.Neuron equals, getConnectedNeurons, getId, neuron2xml, toString Methods inherited from interface com.jcortex.AxonSource addConnectedNeuron, getAxonValue, getId, produceAxonValue Methods inherited from interface com.jcortex.AxonReceiver addEntry, addEntry, getEntries, getEntryWeight, getId, setEntryWeight Constructor Detail KohonenNeuron public KohonenNeuron(int id, int entriesCount, DistanceFunction distanceFunction, AxonSource[] sensors) Creates a brand-new KohonenNeuron instance. KohonenNeuron public KohonenNeuron(org.w3c.dom.Node neuronNode, NeuralNetwork nn) throws ReadingException Creates a KohonenNeuron instance from an XML node with its configuration. Throws: ReadingException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 387 Class KohonenNeuron Method Detail getEntries public Collection getEntries() Obtains the entries for this neuron which are none others but the neural network's sensors. Specified by: getEntries in interface AxonReceiver Returns: A collection with this neuron's entries: the sensors. getEntryWeight public float getEntryWeight(AxonSource parent) Obtains the weight associate to a given entry. Specified by: getEntryWeight in interface AxonReceiver Parameters: parent - The entry whose weight is requested. Returns: The weight requested. produceAxonValue public float produceAxonValue() throws IllegalArgumentException Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 388 Class KohonenNeuron Produces this neuron's Axon Value that is none other than the distance between the input values and the ones stored as its weights. The Axon Value is both returned and stored as a Specified by: produceAxonValue in interface AxonSource Returns: The Axon Value calculated. Throws: IllegalArgumentException - This exception can be thrown by the distance function. getAxonValue public float getAxonValue() Obtains the last Axon Value produced by the method produceAxonValue(). Specified by: getAxonValue in interface AxonSource Returns: The last Axon Value produced. getConnectedNeurons public Collection getConnectedNeurons() No neurons can be connected to a Kohonen neuron. Overrides: getConnectedNeurons in class Neuron Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 389 Class KohonenNeuron Returns: null as no neurons can be connected. specificNeuron2xml protected void specificNeuron2xml(org.w3c.dom.Element neuronRoot, org.w3c.dom.Document document) Adds the specific information known to the Kohonen Neuron at this level. This method puts the intance attributes known at this level as attributes of the XML node. Puts as well the entries-weights structure and the examples' classes records. Overrides: specificNeuron2xml in class Neuron Parameters: neuronRoot document - The neuron's XML configuration node. - The XML Document used to create new elements. addConnectedNeuron public void addConnectedNeuron(AxonReceiver child, boolean back_connection) Ignored for Kohonen neurons as these can not have childs. Specified by: addConnectedNeuron in interface AxonSource Parameters: child - The child element connected to this AxonSource instance. back_connection - Indicates if this neuron has to create the entry in its child. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 390 Class KohonenNeuron addEntry public void addEntry(AxonSource entry) This should not be used. Better create a new network. Specified by: addEntry in interface AxonReceiver Parameters: entry - The new axon data source on to which stablish a connection. addEntry public void addEntry(AxonSource entry, float weight) This should not be used. Better create a new network. Specified by: addEntry in interface AxonReceiver Parameters: entry - The new AxonSource element to be connected as its father. weight - The entry's weight getDominantClass public Object getDominantClass() Obtains this neuron's dominant class: the one that has obtained most of the examples. Returns: The dominant class. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 391 Class KohonenNeuron getClusterSuccesses public int getClusterSuccesses() Obtains the number of clustering successes.This is the number of classes registered from the examples that have fallen into this neuron that match the dominant class. Returns: The number of cluster successes. getClusterErrors public int getClusterErrors() Obtains the number of clustering errors.This is the number of classes registered from the examples that have fallen into this neuron that do not match the dominant class. Returns: The number of cluster errors. getWeigths public float[] getWeigths() Obtains this neuron's weight's array. Returns: The weights array. getWeight public float getWeight(int ix) Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 392 Class KohonenNeuron Obtains the value from this neuron's weight vector, referenced by the given index. Parameters: ix - The weight's index. Returns: The weight value requested setEntryWeight public void setEntryWeight(int ix, float value) Sets the weight for the entry on the position ix. Parameters: ix - The position of the weight to set. value - The new value. setEntryWeight public void setEntryWeight(AxonSource parent, float value) Sets the weight for the requested entry. Specified by: setEntryWeight in interface AxonReceiver Parameters: parent value - The Sensor instance that is an entry for this neuron. - The new value. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 393 Class KohonenNeuron registerLastExampleClass public void registerLastExampleClass(Object lastExampleClass) Records the last example's class. The "class" is not a Java "class", but a float number. This method looks if this class has already been recorded in this neuron, an accumulates this hit. If it has never been seen, it creates a new entry in the map for it. Parameters: lastExampleClass - The last example's class. clearExamplesInClasses public void clearExamplesInClasses() Cleans the dominant class and the classes map. Pretty much like a reset. toString public String toString() Obtains a String representation of this neuron. Overrides: toString in class Neuron Returns: This neuron's string representation. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 394 Class SheetHexKMap Class SheetHexKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.SheetHexKMap public class SheetHexKMap extends Default2DKMap Models a sheet-organized Kohonen Map with hexagonal-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 395 Class SheetHexKMap Constructor Summary SheetHexKMap(int dFunction) entriesCount, Page int rows, int cols, DistanceFunction 396 The basic constructor for this kind of Kohonen Map. SheetHexKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a SheetHexKMap from its configuration stored in an XML node. Method Summary boolean[][] 397 Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a sheet-organized map with hexagonal-shaped neurons. 397 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail SheetHexKMap public SheetHexKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 396 Class SheetHexKMap SheetHexKMap public SheetHexKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a SheetHexKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a sheet-organized map with hexagonalshaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 397 Class SheetSquareKMap Class SheetSquareKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.SheetSquareKMap public class SheetSquareKMap extends Default2DKMap Models a sheet-organized Kohonen Map with square-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 398 Class SheetSquareKMap Constructor Summary SheetSquareKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) Page 399 The basic constructor for this kind of Kohonen Map. SheetSquareKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a SheetSquareKMap from its configuration stored in an XML node. Method Summary boolean[][] 400 Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a sheet-organized map with square-shaped neurons. 400 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail SheetSquareKMap public SheetSquareKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 399 Class SheetSquareKMap SheetSquareKMap public SheetSquareKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a SheetSquareKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a sheet-organized map with square-shaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 400 Class SheetStarKMap Class SheetStarKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.SheetStarKMap public class SheetStarKMap extends Default2DKMap Models a sheet-organized Kohonen Map with star-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 401 Class SheetStarKMap Constructor Summary SheetStarKMap(int entriesCount, int dFunction) Page rows, int cols, DistanceFunction 402 The basic constructor for this kind of Kohonen Map. SheetStarKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a SheetStarKMap from its configuration stored in an XML node. Method Summary boolean[][] 403 Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a sheet-organized map with star-shaped neurons. 403 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail SheetStarKMap public SheetStarKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 402 Class SheetStarKMap SheetStarKMap public SheetStarKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a SheetStarKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a sheet-organized map with star-shaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 403 Class ToroidHexKMap Class ToroidHexKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.ToroidHexKMap public class ToroidHexKMap extends Default2DKMap Models a toroid-organized Kohonen Map with hexagonal-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 404 Class ToroidHexKMap Constructor Summary ToroidHexKMap(int entriesCount, int dFunction) Page rows, int cols, DistanceFunction 405 The basic constructor for this kind of Kohonen Map. ToroidHexKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a ToroidHexKMap from its configuration stored in an XML node. Method Summary boolean[][] 406 Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a toroid-organized map with hexagonal-shaped neurons. 406 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail ToroidHexKMap public ToroidHexKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) throws IllegalArgumentException The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. The number of columns must be even so both sides of hexagonal neurons can fit for the wrapping. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 405 Class ToroidHexKMap Throws: IllegalArgumentException ToroidHexKMap public ToroidHexKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) throws IllegalArgumentException Creates a ToroidHexKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Throws: IllegalArgumentException Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a toroid-organized map with hexagonalshaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 406 Class ToroidHexKMap Returns: The Connection-Matrix. Class ToroidSquareKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.ToroidSquareKMap public class ToroidSquareKMap extends Default2DKMap Models a toroid-organized Kohonen Map with square-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 407 Class ToroidSquareKMap Constructor Summary Page ToroidSquareKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) 408 The basic constructor for this kind of Kohonen Map. ToroidSquareKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a ToroidSquareKMap from its configuration stored in an XML 409 node. Method Summary boolean[][] Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a toroid-organized map with square-shaped neurons. 409 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail ToroidSquareKMap public ToroidSquareKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 408 Class ToroidSquareKMap ToroidSquareKMap public ToroidSquareKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a ToroidSquareKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a toroid-organized map with squareshaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 409 Class ToroidStarKMap Class ToroidStarKMap com.jcortex.kohonen java.lang.Object com.jcortex.kohonen.KohonenMap com.jcortex.kohonen.Default2DKMap com.jcortex.kohonen.ToroidStarKMap public class ToroidStarKMap extends Default2DKMap Models a toroid-organized Kohonen Map with star-shaped neurons. This map is an extension of Default2DKMap. A cylinder map is a plain 2D map that has been wrapped vertically (to allow more versatility in the shape of neurons). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Fields inherited from class com.jcortex.kohonen.Default2DKMap cols, neurons, rows Fields inherited from class com.jcortex.kohonen.KohonenMap bestNeuron, neighbourhoods, neuronCount, sensors Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 410 Class ToroidStarKMap Constructor Summary ToroidStarKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) Page 411 The basic constructor for this kind of Kohonen Map. ToroidStarKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a ToroidStarKMap from its configuration stored in an XML node. Method Summary boolean[][] 412 Page createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a toroid-organized map with star-shaped neurons. 412 Methods inherited from class com.jcortex.kohonen.Default2DKMap getColumnCount, getDimensions, getNeuron, getNeurons, getRowCount, iterator, map2xml Methods inherited from class com.jcortex.kohonen.KohonenMap createConnectionMatrix, getBestNeuron, getDimensions, getNeighbours, getNeighbours, getNeuron, getNeuronCount, getNeurons, integrateWithNeuralNetwork, iterator, map2xml, prepareNeighbourhoods, setBestNeuron Constructor Detail ToroidStarKMap public ToroidStarKMap(int entriesCount, int rows, int cols, DistanceFunction dFunction) The basic constructor for this kind of Kohonen Map. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 411 Class ToroidStarKMap ToroidStarKMap public ToroidStarKMap(org.w3c.dom.Node mapNode, KohonenNeuralNetwork knn) Creates a ToroidStarKMap from its configuration stored in an XML node. This class is completely based on the Default2DKMap so this constructor does nothing else than invoking its super-constructor. Method Detail createConnectionMatrix public boolean[][] createConnectionMatrix(int neuronCount) Creates the Connection-Matrix for a toroid-organized map with star-shaped neurons. A Connection-Matrix is a boolean[][] array that has a line and row for each neuron in the map. The value of position [i][j] will be true when the neuron with id number i and the neuron with id number j are direct neighbours (with no other neurons between them). The value of position [i][j] will be false otherwise. Overrides: createConnectionMatrix in class KohonenMap Parameters: neuronCount - The number of neurons that Returns: The Connection-Matrix. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 412 Package com.jcortex.networkFunctions Package com.jcortex.networkFunctions Class Summary Page LinearBasisFunction The NetworkFunction implementation of the Linear Basis Function. 413 RadialBasisFunction The NetworkFunction implementation of the Linear Basis Function. 415 Class LinearBasisFunction com.jcortex.networkFunctions java.lang.Object com.jcortex.networkFunctions.LinearBasisFunction All Implemented Interfaces: NetworkFunction public class LinearBasisFunction extends Object implements NetworkFunction The NetworkFunction implementation of the Linear Basis Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 413 Class LinearBasisFunction Method Summary static LinearBasisFunction Page getInstance() Obtains the Singleton (GoF) instance for this class. float 414 getSolution(Collection axonSourceEntries) Implementation of the Linear Basis Function. 414 Methods inherited from interface com.jcortex.NetworkFunction getSolution Method Detail getInstance public static LinearBasisFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getSolution public float getSolution(Collection axonSourceEntries) Implementation of the Linear Basis Function. Specified by: getSolution in interface NetworkFunction Parameters: - The collection of AxonSourceEntry instances from which float values will be obtained to use in the function. axonSourceEntries Returns: The composed value of all the entries' values. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 414 Class RadialBasisFunction Class RadialBasisFunction com.jcortex.networkFunctions java.lang.Object com.jcortex.networkFunctions.RadialBasisFunction All Implemented Interfaces: NetworkFunction public class RadialBasisFunction extends Object implements NetworkFunction The NetworkFunction implementation of the Linear Basis Function. As this class does not store any specific attributes or parameters it has been buit to work complaying with the Singleton pattern (GoF). Author: Miguel Lara Encabo - [email protected] Version: 0.1 Method Summary static RadialBasisFunction Page getInstance() Obtains the Singleton (GoF) instance for this class. float 416 getSolution(Collection axonSourceEntries) Implementation of the Radial Basis Function. 416 Methods inherited from interface com.jcortex.NetworkFunction getSolution Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 415 Class RadialBasisFunction Method Detail getInstance public static RadialBasisFunction getInstance() Obtains the Singleton (GoF) instance for this class. Returns: This class' Singleton (GoF) instance. getSolution public float getSolution(Collection axonSourceEntries) Implementation of the Radial Basis Function. Specified by: getSolution in interface NetworkFunction Parameters: - The collection of AxonSourceEntry instances from which float values will be obtained to use in the function. axonSourceEntries Returns: The composed value of all the entries' values. Package com.jcortex.translators Class Summary Page SingleBooleanOutputTranslator 417 TransparentInputTranslator 419 TransparentOutputTranslator 421 Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 416 Class SingleBooleanOutputTranslator Class SingleBooleanOutputTranslator com.jcortex.translators java.lang.Object com.jcortex.translators.SingleBooleanOutputTranslator All Implemented Interfaces: OutputTranslator public class SingleBooleanOutputTranslator extends Object implements OutputTranslator Constructor Summary Page SingleBooleanOutputTranslator() 417 Method Summary Page float[] getOutputBackTranslation(Object desired_output) Translates a desired result into the numerical value it should have produced. Object 418 getOutputTranslation(float[] input_value) Translates the numerical value given out by neurons as an object that can be taken as the qualitative result given by the network. 418 Methods inherited from interface com.jcortex.OutputTranslator getOutputBackTranslation, getOutputTranslation Constructor Detail SingleBooleanOutputTranslator public SingleBooleanOutputTranslator() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 417 Class SingleBooleanOutputTranslator Method Detail getOutputTranslation public Object getOutputTranslation(float[] input_value) Description copied from interface: OutputTranslator Translates the numerical value given out by neurons as an object that can be taken as the qualitative result given by the network. Specified by: getOutputTranslation in interface OutputTranslator Parameters: input_value - The float array that is the result of the neural network's process. Returns: The Object returned as a qualitative response from the neural network. getOutputBackTranslation public float[] getOutputBackTranslation(Object desired_output) Description copied from interface: OutputTranslator Translates a desired result into the numerical value it should have produced. Specified by: getOutputBackTranslation in interface OutputTranslator Parameters: desired_output - The object that is the desired output for an example. Returns: The Object returned as a qualitative response from the neural network. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 418 Class TransparentInputTranslator Class TransparentInputTranslator com.jcortex.translators java.lang.Object com.jcortex.translators.TransparentInputTranslator All Implemented Interfaces: InputTranslator public class TransparentInputTranslator extends Object implements InputTranslator Constructor Summary Page TransparentInputTranslator() 419 Method Summary Page float[] getInputTranslation(Object input_value) Translates the input value given as an object into the numerical values that can be fed onto the neurons. 420 Methods inherited from interface com.jcortex.InputTranslator getInputTranslation Constructor Detail TransparentInputTranslator public TransparentInputTranslator() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 419 Class TransparentInputTranslator Method Detail getInputTranslation public float[] getInputTranslation(Object input_value) Description copied from interface: InputTranslator Translates the input value given as an object into the numerical values that can be fed onto the neurons. Specified by: getInputTranslation in interface InputTranslator Parameters: input_value - The qualitative Object used in each particular problem. Returns: The float array that contains the input for each Neuron. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 420 Class TransparentInputTranslator Class TransparentOutputTranslator com.jcortex.translators java.lang.Object com.jcortex.translators.TransparentOutputTranslator All Implemented Interfaces: OutputTranslator public class TransparentOutputTranslator extends Object implements OutputTranslator Constructor Summary Page TransparentOutputTranslator() 421 Method Summary Page float[] getOutputBackTranslation(Object desired_output) Translates a desired result into the numerical value it should have produced. Object 422 getOutputTranslation(float[] input_value) Translates the numerical value given out by neurons as an object that can be taken as the qualitative result given by the network. 422 Methods inherited from interface com.jcortex.OutputTranslator getOutputBackTranslation, getOutputTranslation Constructor Detail TransparentOutputTranslator public TransparentOutputTranslator() Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 421 Class TransparentInputTranslator Method Detail getOutputTranslation public Object getOutputTranslation(float[] input_value) Description copied from interface: OutputTranslator Translates the numerical value given out by neurons as an object that can be taken as the qualitative result given by the network. Specified by: getOutputTranslation in interface OutputTranslator Parameters: input_value - The float array that is the result of the neural network's process. Returns: The Object returned as a qualitative response from the neural network. getOutputBackTranslation public float[] getOutputBackTranslation(Object desired_output) Description copied from interface: OutputTranslator Translates a desired result into the numerical value it should have produced. Specified by: getOutputBackTranslation in interface OutputTranslator Parameters: desired_output - The object that is the desired output for an example. Returns: The Object returned as a qualitative response from the neural network. Framework para Redes Neuronales en Java – Miguel Lara Encabo – 06/2006 422 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Anexo B: Ejemplos de uso Modelo de Redes de Hopfield Configuración de la Red y del Maestro: La Red de Hopfield es el modelo más simple de configurar. Se indica que los ejemplos del conjunto de entrenamiento tienen 24 atributos. Causas de parada del entrenamiento: El entrenamiento de una red de Hopfield no se detiene dependiendo de su evolución, sino que finaliza cuando se ha completado el cálculo de la matriz de pesos. Resultados de los estadísticos: No se proporcionan resultados estadísticos, al no haber iteraciones. Archivo de ejemplos: aNumbers.txt (ver…) Nodo de configuración XML generado: <neuralNetwork attributeCount="24" class="com.jcortex.hopfield.HopfieldNeuralNetwork" inputTranslator="com.jcortex.translators.TransparentInputTranslator" neuronCount="0" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" sensorCount="0"> <weights> <weight col="0" row="0" value="0.0"/> <weight col="1" row="0" value="-0.083333336"/> <weight col="2" row="0" value="-0.25"/> <weight col="3" row="0" value="0.41666666"/> <weight col="4" row="0" value="-0.16666667"/> <weight col="5" row="0" value="0.083333336"/> <weight col="6" row="0" value="0.083333336"/> <weight col="7" row="0" value="-0.083333336"/> <weight col="8" row="0" value="0.0"/> <weight col="9" row="0" value="0.16666667"/> <weight col="10" row="0" value="-0.083333336"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 423 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="11" row="0" value="0.083333336"/> col="12" row="0" value="-0.083333336"/> col="13" row="0" value="0.083333336"/> col="14" row="0" value="-0.083333336"/> col="15" row="0" value="-0.083333336"/> col="16" row="0" value="0.0"/> col="17" row="0" value="0.16666667"/> col="18" row="0" value="0.083333336"/> col="19" row="0" value="-0.083333336"/> col="20" row="0" value="0.16666667"/> col="21" row="0" value="-0.16666667"/> col="22" row="0" value="-0.25"/> col="23" row="0" value="0.083333336"/> col="0" row="1" value="-0.083333336"/> col="1" row="1" value="0.0"/> col="2" row="1" value="0.25"/> col="3" row="1" value="-0.083333336"/> col="4" row="1" value="0.33333334"/> col="5" row="1" value="-0.41666666"/> col="6" row="1" value="-0.41666666"/> col="7" row="1" value="0.25"/> col="8" row="1" value="0.0"/> col="9" row="1" value="0.0"/> col="10" row="1" value="-0.083333336"/> col="11" row="1" value="0.083333336"/> col="12" row="1" value="-0.083333336"/> col="13" row="1" value="-0.25"/> col="14" row="1" value="-0.083333336"/> col="15" row="1" value="0.083333336"/> col="16" row="1" value="0.16666667"/> col="17" row="1" value="-0.16666667"/> col="18" row="1" value="-0.25"/> col="19" row="1" value="0.25"/> col="20" row="1" value="-0.16666667"/> col="21" row="1" value="0.16666667"/> col="22" row="1" value="0.25"/> col="23" row="1" value="-0.25"/> col="0" row="2" value="-0.25"/> col="1" row="2" value="0.25"/> col="2" row="2" value="0.0"/> col="3" row="2" value="-0.25"/> col="4" row="2" value="0.16666667"/> col="5" row="2" value="-0.25"/> col="6" row="2" value="-0.25"/> col="7" row="2" value="0.083333336"/> col="8" row="2" value="0.0"/> col="9" row="2" value="-0.16666667"/> col="10" row="2" value="0.083333336"/> col="11" row="2" value="-0.083333336"/> col="12" row="2" value="-0.083333336"/> col="13" row="2" value="-0.25"/> col="14" row="2" value="0.083333336"/> col="15" row="2" value="0.083333336"/> col="16" row="2" value="0.0"/> col="17" row="2" value="-0.33333334"/> col="18" row="2" value="-0.083333336"/> col="19" row="2" value="0.083333336"/> col="20" row="2" value="-0.33333334"/> col="21" row="2" value="0.16666667"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 424 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="22" row="2" value="0.41666666"/> col="23" row="2" value="-0.25"/> col="0" row="3" value="0.41666666"/> col="1" row="3" value="-0.083333336"/> col="2" row="3" value="-0.25"/> col="3" row="3" value="0.0"/> col="4" row="3" value="-0.16666667"/> col="5" row="3" value="0.083333336"/> col="6" row="3" value="0.083333336"/> col="7" row="3" value="-0.083333336"/> col="8" row="3" value="0.0"/> col="9" row="3" value="0.16666667"/> col="10" row="3" value="-0.083333336"/> col="11" row="3" value="0.083333336"/> col="12" row="3" value="-0.083333336"/> col="13" row="3" value="0.083333336"/> col="14" row="3" value="-0.083333336"/> col="15" row="3" value="-0.083333336"/> col="16" row="3" value="0.0"/> col="17" row="3" value="0.16666667"/> col="18" row="3" value="0.083333336"/> col="19" row="3" value="-0.083333336"/> col="20" row="3" value="0.16666667"/> col="21" row="3" value="-0.16666667"/> col="22" row="3" value="-0.25"/> col="23" row="3" value="0.083333336"/> col="0" row="4" value="-0.16666667"/> col="1" row="4" value="0.33333334"/> col="2" row="4" value="0.16666667"/> col="3" row="4" value="-0.16666667"/> col="4" row="4" value="0.0"/> col="5" row="4" value="-0.33333334"/> col="6" row="4" value="-0.33333334"/> col="7" row="4" value="0.16666667"/> col="8" row="4" value="0.083333336"/> col="9" row="4" value="0.083333336"/> col="10" row="4" value="0.0"/> col="11" row="4" value="0.0"/> col="12" row="4" value="0.0"/> col="13" row="4" value="-0.16666667"/> col="14" row="4" value="-0.16666667"/> col="15" row="4" value="0.16666667"/> col="16" row="4" value="0.25"/> col="17" row="4" value="-0.083333336"/> col="18" row="4" value="-0.33333334"/> col="19" row="4" value="0.33333334"/> col="20" row="4" value="-0.083333336"/> col="21" row="4" value="0.25"/> col="22" row="4" value="0.16666667"/> col="23" row="4" value="-0.16666667"/> col="0" row="5" value="0.083333336"/> col="1" row="5" value="-0.41666666"/> col="2" row="5" value="-0.25"/> col="3" row="5" value="0.083333336"/> col="4" row="5" value="-0.33333334"/> col="5" row="5" value="0.0"/> col="6" row="5" value="0.41666666"/> col="7" row="5" value="-0.25"/> col="8" row="5" value="0.0"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 425 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="9" row="5" value="0.0"/> col="10" row="5" value="0.083333336"/> col="11" row="5" value="-0.083333336"/> col="12" row="5" value="0.083333336"/> col="13" row="5" value="0.25"/> col="14" row="5" value="0.083333336"/> col="15" row="5" value="-0.083333336"/> col="16" row="5" value="-0.16666667"/> col="17" row="5" value="0.16666667"/> col="18" row="5" value="0.25"/> col="19" row="5" value="-0.25"/> col="20" row="5" value="0.16666667"/> col="21" row="5" value="-0.16666667"/> col="22" row="5" value="-0.25"/> col="23" row="5" value="0.25"/> col="0" row="6" value="0.083333336"/> col="1" row="6" value="-0.41666666"/> col="2" row="6" value="-0.25"/> col="3" row="6" value="0.083333336"/> col="4" row="6" value="-0.33333334"/> col="5" row="6" value="0.41666666"/> col="6" row="6" value="0.0"/> col="7" row="6" value="-0.25"/> col="8" row="6" value="0.0"/> col="9" row="6" value="0.0"/> col="10" row="6" value="0.083333336"/> col="11" row="6" value="-0.083333336"/> col="12" row="6" value="0.083333336"/> col="13" row="6" value="0.25"/> col="14" row="6" value="0.083333336"/> col="15" row="6" value="-0.083333336"/> col="16" row="6" value="-0.16666667"/> col="17" row="6" value="0.16666667"/> col="18" row="6" value="0.25"/> col="19" row="6" value="-0.25"/> col="20" row="6" value="0.16666667"/> col="21" row="6" value="-0.16666667"/> col="22" row="6" value="-0.25"/> col="23" row="6" value="0.25"/> col="0" row="7" value="-0.083333336"/> col="1" row="7" value="0.25"/> col="2" row="7" value="0.083333336"/> col="3" row="7" value="-0.083333336"/> col="4" row="7" value="0.16666667"/> col="5" row="7" value="-0.25"/> col="6" row="7" value="-0.25"/> col="7" row="7" value="0.0"/> col="8" row="7" value="-0.16666667"/> col="9" row="7" value="-0.16666667"/> col="10" row="7" value="-0.25"/> col="11" row="7" value="0.25"/> col="12" row="7" value="-0.083333336"/> col="13" row="7" value="-0.083333336"/> col="14" row="7" value="0.083333336"/> col="15" row="7" value="-0.083333336"/> col="16" row="7" value="0.0"/> col="17" row="7" value="0.0"/> col="18" row="7" value="-0.083333336"/> col="19" row="7" value="0.083333336"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 426 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="20" row="7" value="0.0"/> col="21" row="7" value="0.0"/> col="22" row="7" value="0.083333336"/> col="23" row="7" value="-0.083333336"/> col="0" row="8" value="0.0"/> col="1" row="8" value="0.0"/> col="2" row="8" value="0.0"/> col="3" row="8" value="0.0"/> col="4" row="8" value="0.083333336"/> col="5" row="8" value="0.0"/> col="6" row="8" value="0.0"/> col="7" row="8" value="-0.16666667"/> col="8" row="8" value="0.0"/> col="9" row="8" value="0.083333336"/> col="10" row="8" value="0.0"/> col="11" row="8" value="0.0"/> col="12" row="8" value="0.16666667"/> col="13" row="8" value="0.16666667"/> col="14" row="8" value="-0.16666667"/> col="15" row="8" value="0.33333334"/> col="16" row="8" value="0.083333336"/> col="17" row="8" value="-0.083333336"/> col="18" row="8" value="-0.16666667"/> col="19" row="8" value="0.16666667"/> col="20" row="8" value="-0.083333336"/> col="21" row="8" value="-0.083333336"/> col="22" row="8" value="0.0"/> col="23" row="8" value="-0.16666667"/> col="0" row="9" value="0.16666667"/> col="1" row="9" value="0.0"/> col="2" row="9" value="-0.16666667"/> col="3" row="9" value="0.16666667"/> col="4" row="9" value="0.083333336"/> col="5" row="9" value="0.0"/> col="6" row="9" value="0.0"/> col="7" row="9" value="-0.16666667"/> col="8" row="9" value="0.083333336"/> col="9" row="9" value="0.0"/> col="10" row="9" value="0.16666667"/> col="11" row="9" value="-0.16666667"/> col="12" row="9" value="0.16666667"/> col="13" row="9" value="0.0"/> col="14" row="9" value="-0.33333334"/> col="15" row="9" value="0.16666667"/> col="16" row="9" value="0.25"/> col="17" row="9" value="0.083333336"/> col="18" row="9" value="-0.16666667"/> col="19" row="9" value="0.16666667"/> col="20" row="9" value="0.083333336"/> col="21" row="9" value="0.083333336"/> col="22" row="9" value="-0.16666667"/> col="23" row="9" value="0.0"/> col="0" row="10" value="-0.083333336"/> col="1" row="10" value="-0.083333336"/> col="2" row="10" value="0.083333336"/> col="3" row="10" value="-0.083333336"/> col="4" row="10" value="0.0"/> col="5" row="10" value="0.083333336"/> col="6" row="10" value="0.083333336"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 427 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="7" row="10" value="-0.25"/> col="8" row="10" value="0.0"/> col="9" row="10" value="0.16666667"/> col="10" row="10" value="0.0"/> col="11" row="10" value="-0.41666666"/> col="12" row="10" value="0.083333336"/> col="13" row="10" value="-0.083333336"/> col="14" row="10" value="-0.083333336"/> col="15" row="10" value="0.083333336"/> col="16" row="10" value="0.16666667"/> col="17" row="10" value="-0.16666667"/> col="18" row="10" value="0.083333336"/> col="19" row="10" value="0.083333336"/> col="20" row="10" value="-0.16666667"/> col="21" row="10" value="0.16666667"/> col="22" row="10" value="0.083333336"/> col="23" row="10" value="-0.083333336"/> col="0" row="11" value="0.083333336"/> col="1" row="11" value="0.083333336"/> col="2" row="11" value="-0.083333336"/> col="3" row="11" value="0.083333336"/> col="4" row="11" value="0.0"/> col="5" row="11" value="-0.083333336"/> col="6" row="11" value="-0.083333336"/> col="7" row="11" value="0.25"/> col="8" row="11" value="0.0"/> col="9" row="11" value="-0.16666667"/> col="10" row="11" value="-0.41666666"/> col="11" row="11" value="0.0"/> col="12" row="11" value="-0.083333336"/> col="13" row="11" value="0.083333336"/> col="14" row="11" value="0.083333336"/> col="15" row="11" value="-0.083333336"/> col="16" row="11" value="-0.16666667"/> col="17" row="11" value="0.16666667"/> col="18" row="11" value="-0.083333336"/> col="19" row="11" value="-0.083333336"/> col="20" row="11" value="0.16666667"/> col="21" row="11" value="-0.16666667"/> col="22" row="11" value="-0.083333336"/> col="23" row="11" value="0.083333336"/> col="0" row="12" value="-0.083333336"/> col="1" row="12" value="-0.083333336"/> col="2" row="12" value="-0.083333336"/> col="3" row="12" value="-0.083333336"/> col="4" row="12" value="0.0"/> col="5" row="12" value="0.083333336"/> col="6" row="12" value="0.083333336"/> col="7" row="12" value="-0.083333336"/> col="8" row="12" value="0.16666667"/> col="9" row="12" value="0.16666667"/> col="10" row="12" value="0.083333336"/> col="11" row="12" value="-0.083333336"/> col="12" row="12" value="0.0"/> col="13" row="12" value="0.083333336"/> col="14" row="12" value="-0.25"/> col="15" row="12" value="0.25"/> col="16" row="12" value="0.16666667"/> col="17" row="12" value="0.0"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 428 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="18" row="12" value="-0.083333336"/> col="19" row="12" value="0.083333336"/> col="20" row="12" value="0.0"/> col="21" row="12" value="0.0"/> col="22" row="12" value="-0.083333336"/> col="23" row="12" value="-0.083333336"/> col="0" row="13" value="0.083333336"/> col="1" row="13" value="-0.25"/> col="2" row="13" value="-0.25"/> col="3" row="13" value="0.083333336"/> col="4" row="13" value="-0.16666667"/> col="5" row="13" value="0.25"/> col="6" row="13" value="0.25"/> col="7" row="13" value="-0.083333336"/> col="8" row="13" value="0.16666667"/> col="9" row="13" value="0.0"/> col="10" row="13" value="-0.083333336"/> col="11" row="13" value="0.083333336"/> col="12" row="13" value="0.083333336"/> col="13" row="13" value="0.0"/> col="14" row="13" value="0.083333336"/> col="15" row="13" value="0.083333336"/> col="16" row="13" value="-0.16666667"/> col="17" row="13" value="0.16666667"/> col="18" row="13" value="0.083333336"/> col="19" row="13" value="-0.083333336"/> col="20" row="13" value="0.16666667"/> col="21" row="13" value="-0.33333334"/> col="22" row="13" value="-0.25"/> col="23" row="13" value="0.083333336"/> col="0" row="14" value="-0.083333336"/> col="1" row="14" value="-0.083333336"/> col="2" row="14" value="0.083333336"/> col="3" row="14" value="-0.083333336"/> col="4" row="14" value="-0.16666667"/> col="5" row="14" value="0.083333336"/> col="6" row="14" value="0.083333336"/> col="7" row="14" value="0.083333336"/> col="8" row="14" value="-0.16666667"/> col="9" row="14" value="-0.33333334"/> col="10" row="14" value="-0.083333336"/> col="11" row="14" value="0.083333336"/> col="12" row="14" value="-0.25"/> col="13" row="14" value="0.083333336"/> col="14" row="14" value="0.0"/> col="15" row="14" value="-0.25"/> col="16" row="14" value="-0.33333334"/> col="17" row="14" value="0.0"/> col="18" row="14" value="0.25"/> col="19" row="14" value="-0.25"/> col="20" row="14" value="0.0"/> col="21" row="14" value="-0.16666667"/> col="22" row="14" value="0.083333336"/> col="23" row="14" value="0.083333336"/> col="0" row="15" value="-0.083333336"/> col="1" row="15" value="0.083333336"/> col="2" row="15" value="0.083333336"/> col="3" row="15" value="-0.083333336"/> col="4" row="15" value="0.16666667"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 429 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="5" row="15" value="-0.083333336"/> col="6" row="15" value="-0.083333336"/> col="7" row="15" value="-0.083333336"/> col="8" row="15" value="0.33333334"/> col="9" row="15" value="0.16666667"/> col="10" row="15" value="0.083333336"/> col="11" row="15" value="-0.083333336"/> col="12" row="15" value="0.25"/> col="13" row="15" value="0.083333336"/> col="14" row="15" value="-0.25"/> col="15" row="15" value="0.0"/> col="16" row="15" value="0.16666667"/> col="17" row="15" value="-0.16666667"/> col="18" row="15" value="-0.25"/> col="19" row="15" value="0.25"/> col="20" row="15" value="-0.16666667"/> col="21" row="15" value="0.0"/> col="22" row="15" value="0.083333336"/> col="23" row="15" value="-0.25"/> col="0" row="16" value="0.0"/> col="1" row="16" value="0.16666667"/> col="2" row="16" value="0.0"/> col="3" row="16" value="0.0"/> col="4" row="16" value="0.25"/> col="5" row="16" value="-0.16666667"/> col="6" row="16" value="-0.16666667"/> col="7" row="16" value="0.0"/> col="8" row="16" value="0.083333336"/> col="9" row="16" value="0.25"/> col="10" row="16" value="0.16666667"/> col="11" row="16" value="-0.16666667"/> col="12" row="16" value="0.16666667"/> col="13" row="16" value="-0.16666667"/> col="14" row="16" value="-0.33333334"/> col="15" row="16" value="0.16666667"/> col="16" row="16" value="0.0"/> col="17" row="16" value="-0.083333336"/> col="18" row="16" value="-0.16666667"/> col="19" row="16" value="0.33333334"/> col="20" row="16" value="-0.083333336"/> col="21" row="16" value="0.25"/> col="22" row="16" value="0.0"/> col="23" row="16" value="-0.16666667"/> col="0" row="17" value="0.16666667"/> col="1" row="17" value="-0.16666667"/> col="2" row="17" value="-0.33333334"/> col="3" row="17" value="0.16666667"/> col="4" row="17" value="-0.083333336"/> col="5" row="17" value="0.16666667"/> col="6" row="17" value="0.16666667"/> col="7" row="17" value="0.0"/> col="8" row="17" value="-0.083333336"/> col="9" row="17" value="0.083333336"/> col="10" row="17" value="-0.16666667"/> col="11" row="17" value="0.16666667"/> col="12" row="17" value="0.0"/> col="13" row="17" value="0.16666667"/> col="14" row="17" value="0.0"/> col="15" row="17" value="-0.16666667"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 430 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="16" row="17" value="-0.083333336"/> col="17" row="17" value="0.0"/> col="18" row="17" value="0.0"/> col="19" row="17" value="-0.16666667"/> col="20" row="17" value="0.41666666"/> col="21" row="17" value="-0.083333336"/> col="22" row="17" value="-0.33333334"/> col="23" row="17" value="0.33333334"/> col="0" row="18" value="0.083333336"/> col="1" row="18" value="-0.25"/> col="2" row="18" value="-0.083333336"/> col="3" row="18" value="0.083333336"/> col="4" row="18" value="-0.33333334"/> col="5" row="18" value="0.25"/> col="6" row="18" value="0.25"/> col="7" row="18" value="-0.083333336"/> col="8" row="18" value="-0.16666667"/> col="9" row="18" value="-0.16666667"/> col="10" row="18" value="0.083333336"/> col="11" row="18" value="-0.083333336"/> col="12" row="18" value="-0.083333336"/> col="13" row="18" value="0.083333336"/> col="14" row="18" value="0.25"/> col="15" row="18" value="-0.25"/> col="16" row="18" value="-0.16666667"/> col="17" row="18" value="0.0"/> col="18" row="18" value="0.0"/> col="19" row="18" value="-0.25"/> col="20" row="18" value="0.0"/> col="21" row="18" value="-0.16666667"/> col="22" row="18" value="-0.083333336"/> col="23" row="18" value="0.083333336"/> col="0" row="19" value="-0.083333336"/> col="1" row="19" value="0.25"/> col="2" row="19" value="0.083333336"/> col="3" row="19" value="-0.083333336"/> col="4" row="19" value="0.33333334"/> col="5" row="19" value="-0.25"/> col="6" row="19" value="-0.25"/> col="7" row="19" value="0.083333336"/> col="8" row="19" value="0.16666667"/> col="9" row="19" value="0.16666667"/> col="10" row="19" value="0.083333336"/> col="11" row="19" value="-0.083333336"/> col="12" row="19" value="0.083333336"/> col="13" row="19" value="-0.083333336"/> col="14" row="19" value="-0.25"/> col="15" row="19" value="0.25"/> col="16" row="19" value="0.33333334"/> col="17" row="19" value="-0.16666667"/> col="18" row="19" value="-0.25"/> col="19" row="19" value="0.0"/> col="20" row="19" value="-0.16666667"/> col="21" row="19" value="0.16666667"/> col="22" row="19" value="0.083333336"/> col="23" row="19" value="-0.25"/> col="0" row="20" value="0.16666667"/> col="1" row="20" value="-0.16666667"/> col="2" row="20" value="-0.33333334"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 431 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight <weight col="3" row="20" value="0.16666667"/> col="4" row="20" value="-0.083333336"/> col="5" row="20" value="0.16666667"/> col="6" row="20" value="0.16666667"/> col="7" row="20" value="0.0"/> col="8" row="20" value="-0.083333336"/> col="9" row="20" value="0.083333336"/> col="10" row="20" value="-0.16666667"/> col="11" row="20" value="0.16666667"/> col="12" row="20" value="0.0"/> col="13" row="20" value="0.16666667"/> col="14" row="20" value="0.0"/> col="15" row="20" value="-0.16666667"/> col="16" row="20" value="-0.083333336"/> col="17" row="20" value="0.41666666"/> col="18" row="20" value="0.0"/> col="19" row="20" value="-0.16666667"/> col="20" row="20" value="0.0"/> col="21" row="20" value="-0.083333336"/> col="22" row="20" value="-0.33333334"/> col="23" row="20" value="0.33333334"/> col="0" row="21" value="-0.16666667"/> col="1" row="21" value="0.16666667"/> col="2" row="21" value="0.16666667"/> col="3" row="21" value="-0.16666667"/> col="4" row="21" value="0.25"/> col="5" row="21" value="-0.16666667"/> col="6" row="21" value="-0.16666667"/> col="7" row="21" value="0.0"/> col="8" row="21" value="-0.083333336"/> col="9" row="21" value="0.083333336"/> col="10" row="21" value="0.16666667"/> col="11" row="21" value="-0.16666667"/> col="12" row="21" value="0.0"/> col="13" row="21" value="-0.33333334"/> col="14" row="21" value="-0.16666667"/> col="15" row="21" value="0.0"/> col="16" row="21" value="0.25"/> col="17" row="21" value="-0.083333336"/> col="18" row="21" value="-0.16666667"/> col="19" row="21" value="0.16666667"/> col="20" row="21" value="-0.083333336"/> col="21" row="21" value="0.0"/> col="22" row="21" value="0.16666667"/> col="23" row="21" value="0.0"/> col="0" row="22" value="-0.25"/> col="1" row="22" value="0.25"/> col="2" row="22" value="0.41666666"/> col="3" row="22" value="-0.25"/> col="4" row="22" value="0.16666667"/> col="5" row="22" value="-0.25"/> col="6" row="22" value="-0.25"/> col="7" row="22" value="0.083333336"/> col="8" row="22" value="0.0"/> col="9" row="22" value="-0.16666667"/> col="10" row="22" value="0.083333336"/> col="11" row="22" value="-0.083333336"/> col="12" row="22" value="-0.083333336"/> col="13" row="22" value="-0.25"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 432 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <weight col="14" row="22" value="0.083333336"/> <weight col="15" row="22" value="0.083333336"/> <weight col="16" row="22" value="0.0"/> <weight col="17" row="22" value="-0.33333334"/> <weight col="18" row="22" value="-0.083333336"/> <weight col="19" row="22" value="0.083333336"/> <weight col="20" row="22" value="-0.33333334"/> <weight col="21" row="22" value="0.16666667"/> <weight col="22" row="22" value="0.0"/> <weight col="23" row="22" value="-0.25"/> <weight col="0" row="23" value="0.083333336"/> <weight col="1" row="23" value="-0.25"/> <weight col="2" row="23" value="-0.25"/> <weight col="3" row="23" value="0.083333336"/> <weight col="4" row="23" value="-0.16666667"/> <weight col="5" row="23" value="0.25"/> <weight col="6" row="23" value="0.25"/> <weight col="7" row="23" value="-0.083333336"/> <weight col="8" row="23" value="-0.16666667"/> <weight col="9" row="23" value="0.0"/> <weight col="10" row="23" value="-0.083333336"/> <weight col="11" row="23" value="0.083333336"/> <weight col="12" row="23" value="-0.083333336"/> <weight col="13" row="23" value="0.083333336"/> <weight col="14" row="23" value="0.083333336"/> <weight col="15" row="23" value="-0.25"/> <weight col="16" row="23" value="-0.16666667"/> <weight col="17" row="23" value="0.33333334"/> <weight col="18" row="23" value="0.083333336"/> <weight col="19" row="23" value="-0.25"/> <weight col="20" row="23" value="0.33333334"/> <weight col="21" row="23" value="0.0"/> <weight col="22" row="23" value="-0.25"/> <weight col="23" row="23" value="0.0"/> </weights> <biasVector> <bias ix="0" value="0.0"/> <bias ix="1" value="0.0"/> <bias ix="2" value="0.0"/> <bias ix="3" value="0.0"/> <bias ix="4" value="0.0"/> <bias ix="5" value="0.0"/> <bias ix="6" value="0.0"/> <bias ix="7" value="0.0"/> <bias ix="8" value="0.0"/> <bias ix="9" value="0.0"/> <bias ix="10" value="0.0"/> <bias ix="11" value="0.0"/> <bias ix="12" value="0.0"/> <bias ix="13" value="0.0"/> <bias ix="14" value="0.0"/> <bias ix="15" value="0.0"/> <bias ix="16" value="0.0"/> <bias ix="17" value="0.0"/> <bias ix="18" value="0.0"/> <bias ix="19" value="0.0"/> <bias ix="20" value="0.0"/> <bias ix="21" value="0.0"/> <bias ix="22" value="0.0"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 433 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <bias ix="23" value="0.0"/> </biasVector> <teacher class="com.jcortex.hopfield.DefaultHopfieldTeacher"/> </neuralNetwork> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 434 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Modelo de Mapas de Kohonen Configuración de la Red y del Maestro: Mapa de Kohonen, con neuronas hexagonales y recogidas en un plano. De 6 x 8 neuronas. La función utilizada para medir la distancia entre los ejemplos es la Distancia Euclídea. Esquema de la red entrenada: Causas de parada del entrenamiento: Razones de parada de los analizadores aglutinados: { ....Detenido porque Ejemplos mal agrupados no decrecía suficientemente bien. a[o] = 0.23584905; a[m] = 0.18867925; a[n] = 0.24528302 ....Variación de Pesos (Media Abs.) no ha encontrado razones hasta ahora para detener el entrenamiento. } Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 435 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Resultados de los estadísticos: Se puede apreciar como el conjunto de datos no logra ser analizado de forma satisfactoria mediante un Mapa de Kohonen. Se aprecia en la gráfica de ejemplos mal agrupados como alrededor del 23% de los ejemplos del conjunto no logran ser correctamente agrupados en una neurona pura, con otros ejemplos de su misma clase. Este hecho se debe, en parte, a que cada ejemplo cuenta con un gran número de atributos, de los cuales no se ha podido llegar a descartar ninguno por lo dispersa que se encontraba la significancia. Además parece que la selección de la clase no es connatural a la diferencia entre los valores: la “distancia natural” tomada entre los Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 436 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ elementos. Un mayor número de neuronas se ha descartado ya que se produciría gran cantidad de clusters sin elementos. Archivo de ejemplos: aPromoters.txt (ver…) Nodo de configuración XML generado: <neuralNetwork class="com.jcortex.kohonen.KohonenNeuralNetwork" inputTranslator="com.jcortex.translators.TransparentInputTranslator" neighbourhoodShape="1" neuronCount="48" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" sensorCount="57"> <kmap class="com.jcortex.kohonen.SheetHexKMap" columns="8" rows="6"/> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="0" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.49221614"/> <entry entry="-2" weight="0.42555952"/> <entry entry="-3" weight="0.5604756"/> <entry entry="4" weight="0.42844892"/> <entry entry="-5" weight="0.646903"/> <entry entry="-6" weight="0.37402648"/> <entry entry="-7" weight="0.30356243"/> <entry entry="-8" weight="0.83151835"/> <entry entry="-9" weight="0.38037467"/> <entry entry="-10" weight="0.36698085"/> <entry entry="-11" weight="0.20062664"/> <entry entry="-12" weight="0.65873593"/> <entry entry="-13" weight="0.57604414"/> <entry entry="-14" weight="0.56447977"/> <entry entry="-15" weight="0.41138303"/> <entry entry="-16" weight="0.47764182"/> <entry entry="-17" weight="0.57738936"/> <entry entry="-18" weight="0.4037699"/> <entry entry="-19" weight="0.5801815"/> <entry entry="-20" weight="0.18617734"/> <entry entry="21" weight="0.12312682"/> <entry entry="-22" weight="0.1790131"/> <entry entry="-23" weight="0.256644"/> <entry entry="-24" weight="0.70168644"/> <entry entry="-25" weight="0.6187581"/> <entry entry="-26" weight="0.58854914"/> <entry entry="-27" weight="0.6541532"/> <entry entry="28" weight="0.35783687"/> <entry entry="-29" weight="0.9738312"/> <entry entry="-30" weight="0.630539"/> <entry entry="-31" weight="0.49092004"/> <entry entry="-32" weight="0.093761064"/> <entry entry="-33" weight="0.6926569"/> <entry entry="-34" weight="0.71236134"/> <entry entry="35" weight="0.5313366"/> <entry entry="-36" weight="0.6958836"/> <entry entry="-37" weight="0.87861866"/> <entry entry="-38" weight="0.8226808"/> <entry entry="-39" weight="0.71353203"/> <entry entry="-40" weight="0.7764238"/> <entry entry="-41" weight="0.84159046"/> <entry entry="42" weight="0.75658697"/> <entry entry="-43" weight="0.6502058"/> <entry entry="-44" weight="0.29240748"/> <entry entry="-45" weight="0.800418"/> <entry entry="-46" weight="0.540604"/> <entry entry="-47" weight="0.29367352"/> <entry entry="-48" weight="0.296251"/> <entry entry="49" weight="0.30206388"/> <entry entry="-50" weight="0.5566186"/> <entry entry="-51" weight="0.5103126"/> <entry entry="-52" weight="0.14604226"/> <entry entry="-53" weight="0.53064483"/> <entry entry="-54" weight="0.7987473"/> <entry entry="-55" weight="0.021274399"/> <entry entry="-56" weight="0.3763117"/> <entry entry="-57" weight="0.47270948"/> </entries> <examplesInClasses> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 437 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <examplesClassCount class="1.0" count="3"/> <examplesClassCount class="0.0" count="4"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="1" neuronClass="null"> <entries> <entry entry="-1" weight="0.35465908"/> <entry entry="-2" weight="0.45872912"/> <entry entry="-3" weight="0.4789079"/> <entry entry="4" weight="0.37331223"/> <entry entry="-5" weight="0.7180119"/> <entry entry="-6" weight="0.43618664"/> <entry entry="-7" weight="0.32211617"/> <entry entry="-8" weight="0.7534155"/> <entry entry="-9" weight="0.47369656"/> <entry entry="-10" weight="0.44270146"/> <entry entry="-11" weight="0.198977"/> <entry entry="-12" weight="0.6529839"/> <entry entry="-13" weight="0.67099005"/> <entry entry="-14" weight="0.59094185"/> <entry entry="-15" weight="0.34194726"/> <entry entry="-16" weight="0.5239393"/> <entry entry="-17" weight="0.6689506"/> <entry entry="-18" weight="0.45672053"/> <entry entry="-19" weight="0.44730908"/> <entry entry="-20" weight="0.18386665"/> <entry entry="-21" weight="0.22167242"/> <entry entry="-22" weight="0.14615107"/> <entry entry="-23" weight="0.30389583"/> <entry entry="-24" weight="0.72787124"/> <entry entry="-25" weight="0.6487001"/> <entry entry="26" weight="0.5696288"/> <entry entry="-27" weight="0.68683285"/> <entry entry="-28" weight="0.28516817"/> <entry entry="-29" weight="0.8954435"/> <entry entry="-30" weight="0.5624428"/> <entry entry="-31" weight="0.45689937"/> <entry entry="-32" weight="0.15768439"/> <entry entry="-33" weight="0.7361756"/> <entry entry="-34" weight="0.65673715"/> <entry entry="-35" weight="0.5345044"/> <entry entry="-36" weight="0.60786706"/> <entry entry="-37" weight="0.9054916"/> <entry entry="38" weight="0.7365634"/> <entry entry="-39" weight="0.6486838"/> <entry entry="-40" weight="0.87646"/> <entry entry="-41" weight="0.7322775"/> <entry entry="-42" weight="0.63953745"/> <entry entry="-43" weight="0.74549985"/> <entry entry="-44" weight="0.31188217"/> <entry entry="-45" weight="0.72438186"/> <entry entry="-46" weight="0.5623425"/> <entry entry="47" weight="0.23093364"/> <entry entry="-48" weight="0.22405972"/> <entry entry="-49" weight="0.34166786"/> <entry entry="-50" weight="0.67516565"/> <entry entry="-51" weight="0.556191"/> <entry entry="-52" weight="0.19625047"/> <entry entry="-53" weight="0.44313887"/> <entry entry="-54" weight="0.7845372"/> <entry entry="-55" weight="0.04043218"/> <entry entry="-56" weight="0.31414008"/> <entry entry="-57" weight="0.35504606"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="2" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.39951828"/> <entry entry="-2" weight="0.45626068"/> <entry entry="-3" weight="0.47267503"/> <entry entry="4" weight="0.36665905"/> <entry entry="-5" weight="0.6811618"/> <entry entry="-6" weight="0.49153075"/> <entry entry="-7" weight="0.36066425"/> <entry entry="-8" weight="0.7478222"/> <entry entry="-9" weight="0.4696888"/> <entry entry="-10" weight="0.4706001"/> <entry entry="-11" weight="0.2142697"/> <entry entry="-12" weight="0.6332015"/> <entry entry="13" weight="0.7382133"/> <entry entry="-14" weight="0.54939884"/> <entry entry="-15" weight="0.332459"/> <entry entry="-16" weight="0.5469177"/> <entry entry="-17" weight="0.7030398"/> <entry entry="-18" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 438 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.44244906"/> <entry entry="-19" weight="0.4293024"/> <entry entry="20" weight="0.15679953"/> <entry entry="-21" weight="0.27165252"/> <entry entry="-22" weight="0.18024749"/> <entry entry="-23" weight="0.3234964"/> <entry entry="-24" weight="0.7131204"/> <entry entry="-25" weight="0.6704207"/> <entry entry="-26" weight="0.5284261"/> <entry entry="27" weight="0.68445647"/> <entry entry="-28" weight="0.25568488"/> <entry entry="-29" weight="0.8744471"/> <entry entry="-30" weight="0.5905634"/> <entry entry="-31" weight="0.42207992"/> <entry entry="-32" weight="0.115661435"/> <entry entry="-33" weight="0.7926881"/> <entry entry="-34" weight="0.6071801"/> <entry entry="-35" weight="0.48130053"/> <entry entry="-36" weight="0.6302914"/> <entry entry="-37" weight="0.874953"/> <entry entry="-38" weight="0.7165415"/> <entry entry="39" weight="0.6992448"/> <entry entry="-40" weight="0.9368913"/> <entry entry="-41" weight="0.7493421"/> <entry entry="-42" weight="0.6644"/> <entry entry="-43" weight="0.811373"/> <entry entry="-44" weight="0.30019608"/> <entry entry="-45" weight="0.80231875"/> <entry entry="-46" weight="0.52497554"/> <entry entry="-47" weight="0.18966426"/> <entry entry="-48" weight="0.23669672"/> <entry entry="-49" weight="0.4080788"/> <entry entry="-50" weight="0.70361197"/> <entry entry="-51" weight="0.58877623"/> <entry entry="-52" weight="0.1782003"/> <entry entry="53" weight="0.5133717"/> <entry entry="-54" weight="0.8263915"/> <entry entry="-55" weight="0.06980166"/> <entry entry="-56" weight="0.30643508"/> <entry entry="-57" weight="0.39334062"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="3" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.31982797"/> <entry entry="-2" weight="0.1455884"/> <entry entry="-3" weight="0.5547928"/> <entry entry="-4" weight="0.2005755"/> <entry entry="-5" weight="0.52805436"/> <entry entry="6" weight="0.5175274"/> <entry entry="-7" weight="0.30419517"/> <entry entry="-8" weight="0.55049926"/> <entry entry="-9" weight="0.57384205"/> <entry entry="-10" weight="0.7184476"/> <entry entry="-11" weight="0.3646818"/> <entry entry="-12" weight="0.41691163"/> <entry entry="13" weight="0.64328474"/> <entry entry="-14" weight="0.54678196"/> <entry entry="-15" weight="0.36197942"/> <entry entry="-16" weight="0.68159413"/> <entry entry="-17" weight="0.48394963"/> <entry entry="-18" weight="0.54044783"/> <entry entry="-19" weight="0.1050296"/> <entry entry="20" weight="0.35427013"/> <entry entry="-21" weight="0.3845269"/> <entry entry="-22" weight="0.28060004"/> <entry entry="-23" weight="0.28099665"/> <entry entry="-24" weight="0.71931595"/> <entry entry="-25" weight="0.64965796"/> <entry entry="-26" weight="0.55019313"/> <entry entry="-27" weight="0.48257187"/> <entry entry="-28" weight="0.27877343"/> <entry entry="-29" weight="0.79459286"/> <entry entry="-30" weight="0.2895898"/> <entry entry="-31" weight="0.31969368"/> <entry entry="32" weight="0.2652351"/> <entry entry="-33" weight="0.76404494"/> <entry entry="-34" weight="0.65840316"/> <entry entry="-35" weight="0.41055852"/> <entry entry="-36" weight="0.62033427"/> <entry entry="-37" weight="0.86557937"/> <entry entry="-38" weight="0.5619223"/> <entry entry="39" weight="0.41614917"/> <entry entry="-40" weight="0.77181554"/> <entry entry="-41" weight="0.5491008"/> <entry entry="-42" weight="0.4143539"/> <entry entry="-43" weight="0.75053716"/> <entry entry="-44" weight="0.2883105"/> <entry entry="-45" weight="0.525621"/> <entry entry="- Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 439 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 46" weight="0.5100949"/> <entry entry="-47" weight="0.40827358"/> <entry entry="-48" weight="0.40905145"/> <entry entry="-49" weight="0.5403618"/> <entry entry="-50" weight="0.70895654"/> <entry entry="-51" weight="0.45602313"/> <entry entry="-52" weight="0.37377882"/> <entry entry="-53" weight="0.2847839"/> <entry entry="-54" weight="0.8514939"/> <entry entry="-55" weight="0.07789549"/> <entry entry="-56" weight="0.49509108"/> <entry entry="-57" weight="0.35409176"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="4" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.47857177"/> <entry entry="-2" weight="0.1324099"/> <entry entry="-3" weight="0.693247"/> <entry entry="-4" weight="0.48441485"/> <entry entry="-5" weight="0.25301957"/> <entry entry="6" weight="0.49631277"/> <entry entry="-7" weight="0.4548292"/> <entry entry="-8" weight="0.42352638"/> <entry entry="-9" weight="0.2994064"/> <entry entry="-10" weight="0.29651666"/> <entry entry="-11" weight="0.38458186"/> <entry entry="-12" weight="0.70486313"/> <entry entry="-13" weight="0.38948232"/> <entry entry="-14" weight="0.70050305"/> <entry entry="-15" weight="0.6424996"/> <entry entry="-16" weight="0.42240393"/> <entry entry="-17" weight="0.33290714"/> <entry entry="-18" weight="0.26374725"/> <entry entry="-19" weight="0.49456283"/> <entry entry="-20" weight="0.33435246"/> <entry entry="-21" weight="0.38158536"/> <entry entry="-22" weight="0.5458811"/> <entry entry="23" weight="0.17974861"/> <entry entry="-24" weight="0.47287747"/> <entry entry="-25" weight="0.3686818"/> <entry entry="-26" weight="0.5712999"/> <entry entry="-27" weight="0.45038664"/> <entry entry="-28" weight="0.6914266"/> <entry entry="-29" weight="0.7837686"/> <entry entry="30" weight="0.6821626"/> <entry entry="-31" weight="0.6131736"/> <entry entry="-32" weight="0.25411022"/> <entry entry="-33" weight="0.4971209"/> <entry entry="-34" weight="0.79530764"/> <entry entry="-35" weight="0.429061"/> <entry entry="-36" weight="0.58835006"/> <entry entry="37" weight="0.74052596"/> <entry entry="-38" weight="0.44913143"/> <entry entry="-39" weight="0.6861573"/> <entry entry="-40" weight="0.36820036"/> <entry entry="-41" weight="0.5567043"/> <entry entry="-42" weight="0.560668"/> <entry entry="-43" weight="0.37069115"/> <entry entry="44" weight="0.43041736"/> <entry entry="-45" weight="0.661705"/> <entry entry="-46" weight="0.76276785"/> <entry entry="-47" weight="0.6868418"/> <entry entry="-48" weight="0.4173379"/> <entry entry="-49" weight="0.17301789"/> <entry entry="-50" weight="0.44644266"/> <entry entry="-51" weight="0.47257137"/> <entry entry="-52" weight="0.24198036"/> <entry entry="-53" weight="0.5437949"/> <entry entry="-54" weight="0.8516322"/> <entry entry="-55" weight="0.09668637"/> <entry entry="56" weight="0.7728646"/> <entry entry="-57" weight="0.50004625"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="5" neuronClass="0.0"> <entries> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 440 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entry entry="-1" weight="0.5352625"/> <entry entry="-2" weight="0.31110328"/> <entry entry="-3" weight="0.7394371"/> <entry entry="4" weight="0.51975846"/> <entry entry="-5" weight="0.36864203"/> <entry entry="-6" weight="0.30601662"/> <entry entry="-7" weight="0.2762812"/> <entry entry="-8" weight="0.44860804"/> <entry entry="-9" weight="0.34535462"/> <entry entry="-10" weight="0.24894463"/> <entry entry="-11" weight="0.38972506"/> <entry entry="-12" weight="0.63902265"/> <entry entry="-13" weight="0.26085728"/> <entry entry="-14" weight="0.6487766"/> <entry entry="-15" weight="0.7447883"/> <entry entry="16" weight="0.43070015"/> <entry entry="-17" weight="0.18817489"/> <entry entry="-18" weight="0.31242275"/> <entry entry="-19" weight="0.596017"/> <entry entry="-20" weight="0.5081291"/> <entry entry="-21" weight="0.234093"/> <entry entry="-22" weight="0.52966857"/> <entry entry="23" weight="0.2859169"/> <entry entry="-24" weight="0.38394648"/> <entry entry="-25" weight="0.27154502"/> <entry entry="-26" weight="0.8012119"/> <entry entry="-27" weight="0.2943329"/> <entry entry="-28" weight="0.72936493"/> <entry entry="-29" weight="0.6979279"/> <entry entry="30" weight="0.7419088"/> <entry entry="-31" weight="0.61652845"/> <entry entry="-32" weight="0.46838608"/> <entry entry="-33" weight="0.24337071"/> <entry entry="-34" weight="0.82044464"/> <entry entry="-35" weight="0.5796553"/> <entry entry="-36" weight="0.71357226"/> <entry entry="37" weight="0.83310366"/> <entry entry="-38" weight="0.5125545"/> <entry entry="-39" weight="0.51485777"/> <entry entry="-40" weight="0.12168399"/> <entry entry="-41" weight="0.7037415"/> <entry entry="-42" weight="0.6213326"/> <entry entry="-43" weight="0.11669605"/> <entry entry="44" weight="0.4780789"/> <entry entry="-45" weight="0.6758096"/> <entry entry="-46" weight="0.7383983"/> <entry entry="-47" weight="0.87860477"/> <entry entry="-48" weight="0.4606642"/> <entry entry="-49" weight="0.2317192"/> <entry entry="-50" weight="0.3508876"/> <entry entry="51" weight="0.3492964"/> <entry entry="-52" weight="0.48519427"/> <entry entry="-53" weight="0.5530391"/> <entry entry="-54" weight="0.69291055"/> <entry entry="-55" weight="0.19439563"/> <entry entry="-56" weight="0.8202158"/> <entry entry="-57" weight="0.5223155"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="6" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.3730325"/> <entry entry="-2" weight="0.45000178"/> <entry entry="-3" weight="0.4837341"/> <entry entry="4" weight="0.37699425"/> <entry entry="-5" weight="0.72189486"/> <entry entry="-6" weight="0.4327911"/> <entry entry="-7" weight="0.3313594"/> <entry entry="-8" weight="0.7740556"/> <entry entry="-9" weight="0.45294777"/> <entry entry="-10" weight="0.44473386"/> <entry entry="-11" weight="0.19159336"/> <entry entry="-12" weight="0.6630855"/> <entry entry="13" weight="0.6683285"/> <entry entry="-14" weight="0.61947495"/> <entry entry="-15" weight="0.3487469"/> <entry entry="-16" weight="0.50736564"/> <entry entry="-17" weight="0.64639175"/> <entry entry="-18" weight="0.4534204"/> <entry entry="-19" weight="0.45016584"/> <entry entry="20" weight="0.18582162"/> <entry entry="-21" weight="0.2180871"/> <entry entry="-22" weight="0.13574447"/> <entry entry="-23" weight="0.3194044"/> <entry entry="-24" weight="0.7415368"/> <entry entry="-25" weight="0.6597027"/> <entry entry="-26" weight="0.55547315"/> <entry entry="27" weight="0.6958301"/> <entry entry="-28" weight="0.28925902"/> <entry entry="-29" weight="0.8895189"/> <entry entry="-30" weight="0.5418955"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 441 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entry entry="-31" weight="0.4619118"/> <entry entry="-32" weight="0.14856559"/> <entry entry="-33" weight="0.7353481"/> <entry entry="34" weight="0.66844845"/> <entry entry="-35" weight="0.5367346"/> <entry entry="-36" weight="0.5918486"/> <entry entry="-37" weight="0.8931445"/> <entry entry="-38" weight="0.74005544"/> <entry entry="-39" weight="0.660032"/> <entry entry="-40" weight="0.8772229"/> <entry entry="41" weight="0.75198865"/> <entry entry="-42" weight="0.6417098"/> <entry entry="-43" weight="0.75158507"/> <entry entry="-44" weight="0.3025652"/> <entry entry="-45" weight="0.72219396"/> <entry entry="-46" weight="0.5454778"/> <entry entry="-47" weight="0.24441306"/> <entry entry="48" weight="0.2174714"/> <entry entry="-49" weight="0.34096122"/> <entry entry="-50" weight="0.66303355"/> <entry entry="-51" weight="0.57192"/> <entry entry="-52" weight="0.18432593"/> <entry entry="-53" weight="0.42845815"/> <entry entry="-54" weight="0.7797404"/> <entry entry="55" weight="0.031199513"/> <entry entry="-56" weight="0.31531996"/> <entry entry="-57" weight="0.37525418"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="7" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.65045345"/> <entry entry="-2" weight="0.27044204"/> <entry entry="-3" weight="0.28687435"/> <entry entry="4" weight="0.35217994"/> <entry entry="-5" weight="0.4135851"/> <entry entry="-6" weight="0.70238686"/> <entry entry="-7" weight="0.614542"/> <entry entry="-8" weight="0.46586916"/> <entry entry="-9" weight="0.2719544"/> <entry entry="-10" weight="0.68685865"/> <entry entry="-11" weight="0.12618443"/> <entry entry="-12" weight="0.38096023"/> <entry entry="-13" weight="0.4408111"/> <entry entry="-14" weight="0.74658155"/> <entry entry="-15" weight="0.20724155"/> <entry entry="-16" weight="0.31759012"/> <entry entry="-17" weight="0.6727879"/> <entry entry="18" weight="0.5247361"/> <entry entry="-19" weight="0.25795817"/> <entry entry="-20" weight="0.36578363"/> <entry entry="-21" weight="0.42448613"/> <entry entry="-22" weight="0.23257619"/> <entry entry="-23" weight="0.599388"/> <entry entry="-24" weight="0.56854916"/> <entry entry="25" weight="0.81203425"/> <entry entry="-26" weight="0.3039204"/> <entry entry="-27" weight="0.42221314"/> <entry entry="-28" weight="0.5567306"/> <entry entry="-29" weight="0.77919966"/> <entry entry="-30" weight="0.6053847"/> <entry entry="-31" weight="0.38481086"/> <entry entry="32" weight="0.070147194"/> <entry entry="-33" weight="0.6086406"/> <entry entry="-34" weight="0.77233595"/> <entry entry="-35" weight="0.4255682"/> <entry entry="-36" weight="0.3739069"/> <entry entry="-37" weight="0.91370064"/> <entry entry="-38" weight="0.8243662"/> <entry entry="39" weight="0.42566913"/> <entry entry="-40" weight="0.83131784"/> <entry entry="-41" weight="0.59197557"/> <entry entry="-42" weight="0.53231496"/> <entry entry="-43" weight="0.48070806"/> <entry entry="-44" weight="0.17645651"/> <entry entry="-45" weight="0.8798241"/> <entry entry="46" weight="0.4390755"/> <entry entry="-47" weight="0.123005144"/> <entry entry="-48" weight="0.13414617"/> <entry entry="-49" weight="0.6379539"/> <entry entry="-50" weight="0.5474654"/> <entry entry="-51" weight="0.3578719"/> <entry entry="-52" weight="0.096595176"/> <entry entry="-53" weight="0.5593533"/> <entry entry="-54" weight="0.4990533"/> <entry entry="-55" weight="0.03167846"/> <entry entry="-56" weight="0.32392734"/> <entry entry="-57" weight="0.6474187"/> </entries> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 442 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <examplesInClasses> <examplesClassCount class="1.0" count="2"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="8" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.6711149"/> <entry entry="-2" weight="0.13217193"/> <entry entry="-3" weight="0.30311817"/> <entry entry="4" weight="0.3333754"/> <entry entry="-5" weight="0.23788919"/> <entry entry="-6" weight="0.7543818"/> <entry entry="-7" weight="0.63576895"/> <entry entry="-8" weight="0.30693978"/> <entry entry="-9" weight="0.32485148"/> <entry entry="-10" weight="0.9243849"/> <entry entry="11" weight="0.30618286"/> <entry entry="-12" weight="0.27855894"/> <entry entry="-13" weight="0.38526273"/> <entry entry="-14" weight="0.7589376"/> <entry entry="-15" weight="0.30710626"/> <entry entry="-16" weight="0.4409641"/> <entry entry="-17" weight="0.6170359"/> <entry entry="18" weight="0.6503862"/> <entry entry="-19" weight="0.11858011"/> <entry entry="-20" weight="0.39484543"/> <entry entry="-21" weight="0.5845042"/> <entry entry="-22" weight="0.38193423"/> <entry entry="-23" weight="0.690436"/> <entry entry="-24" weight="0.6323353"/> <entry entry="25" weight="0.7843242"/> <entry entry="-26" weight="0.27339703"/> <entry entry="-27" weight="0.2032395"/> <entry entry="-28" weight="0.6310811"/> <entry entry="-29" weight="0.7283938"/> <entry entry="-30" weight="0.42748463"/> <entry entry="-31" weight="0.3195737"/> <entry entry="32" weight="0.16022937"/> <entry entry="-33" weight="0.6866232"/> <entry entry="-34" weight="0.75932795"/> <entry entry="-35" weight="0.4382176"/> <entry entry="-36" weight="0.45154515"/> <entry entry="-37" weight="0.92685395"/> <entry entry="-38" weight="0.82641697"/> <entry entry="-39" weight="0.30500257"/> <entry entry="-40" weight="0.72955614"/> <entry entry="-41" weight="0.53204095"/> <entry entry="-42" weight="0.40421957"/> <entry entry="-43" weight="0.41884917"/> <entry entry="-44" weight="0.09270316"/> <entry entry="-45" weight="0.84957105"/> <entry entry="-46" weight="0.38365522"/> <entry entry="-47" weight="0.29609126"/> <entry entry="-48" weight="0.36190665"/> <entry entry="-49" weight="0.7407195"/> <entry entry="-50" weight="0.46289125"/> <entry entry="-51" weight="0.37220383"/> <entry entry="-52" weight="0.18120539"/> <entry entry="-53" weight="0.53118026"/> <entry entry="-54" weight="0.48194352"/> <entry entry="-55" weight="0.18904115"/> <entry entry="-56" weight="0.4916676"/> <entry entry="-57" weight="0.77231544"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="9" neuronClass="null"> <entries> <entry entry="-1" weight="0.7476748"/> <entry entry="-2" weight="0.08694561"/> <entry entry="-3" weight="0.39226612"/> <entry entry="4" weight="0.35732165"/> <entry entry="-5" weight="0.21395877"/> <entry entry="-6" weight="0.665963"/> <entry entry="-7" weight="0.57241184"/> <entry entry="-8" weight="0.3678345"/> <entry entry="-9" weight="0.25413722"/> <entry entry="-10" weight="0.7945488"/> <entry entry="-11" weight="0.26474"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 443 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entry entry="-12" weight="0.2758323"/> <entry entry="-13" weight="0.2727085"/> <entry entry="-14" weight="0.75738215"/> <entry entry="15" weight="0.36115098"/> <entry entry="-16" weight="0.40663382"/> <entry entry="-17" weight="0.5012547"/> <entry entry="-18" weight="0.56292355"/> <entry entry="-19" weight="0.22525533"/> <entry entry="-20" weight="0.43468705"/> <entry entry="-21" weight="0.4345541"/> <entry entry="22" weight="0.37396774"/> <entry entry="-23" weight="0.6007023"/> <entry entry="-24" weight="0.5794548"/> <entry entry="-25" weight="0.76759934"/> <entry entry="-26" weight="0.34626696"/> <entry entry="-27" weight="0.19613935"/> <entry entry="-28" weight="0.6948836"/> <entry entry="29" weight="0.7842662"/> <entry entry="-30" weight="0.49515182"/> <entry entry="-31" weight="0.35965112"/> <entry entry="-32" weight="0.11093835"/> <entry entry="-33" weight="0.5806552"/> <entry entry="-34" weight="0.84399444"/> <entry entry="-35" weight="0.40945184"/> <entry entry="-36" weight="0.5091549"/> <entry entry="-37" weight="0.9211757"/> <entry entry="-38" weight="0.86094147"/> <entry entry="-39" weight="0.3397054"/> <entry entry="-40" weight="0.6115648"/> <entry entry="41" weight="0.60425425"/> <entry entry="-42" weight="0.4973562"/> <entry entry="-43" weight="0.32040992"/> <entry entry="-44" weight="0.11020539"/> <entry entry="-45" weight="0.84522057"/> <entry entry="-46" weight="0.38927975"/> <entry entry="-47" weight="0.37298876"/> <entry entry="-48" weight="0.37529272"/> <entry entry="-49" weight="0.6733208"/> <entry entry="-50" weight="0.38337147"/> <entry entry="-51" weight="0.28949946"/> <entry entry="-52" weight="0.15879497"/> <entry entry="-53" weight="0.5750031"/> <entry entry="-54" weight="0.5087272"/> <entry entry="-55" weight="0.10956643"/> <entry entry="-56" weight="0.5230465"/> <entry entry="-57" weight="0.8130924"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="10" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.6740594"/> <entry entry="-2" weight="0.33413345"/> <entry entry="-3" weight="0.64834"/> <entry entry="-4" weight="0.5832648"/> <entry entry="-5" weight="0.19975841"/> <entry entry="6" weight="0.46694452"/> <entry entry="-7" weight="0.43366092"/> <entry entry="-8" weight="0.40657198"/> <entry entry="-9" weight="0.36270273"/> <entry entry="-10" weight="0.47393367"/> <entry entry="-11" weight="0.5183089"/> <entry entry="-12" weight="0.67099553"/> <entry entry="13" weight="0.26572526"/> <entry entry="-14" weight="0.67864686"/> <entry entry="-15" weight="0.9333759"/> <entry entry="-16" weight="0.41794798"/> <entry entry="-17" weight="0.38872972"/> <entry entry="-18" weight="0.38909706"/> <entry entry="-19" weight="0.66779006"/> <entry entry="-20" weight="0.39638028"/> <entry entry="-21" weight="0.3770911"/> <entry entry="-22" weight="0.57597995"/> <entry entry="-23" weight="0.43612617"/> <entry entry="-24" weight="0.5312053"/> <entry entry="25" weight="0.40341836"/> <entry entry="-26" weight="0.67113435"/> <entry entry="-27" weight="0.17602906"/> <entry entry="-28" weight="0.9179091"/> <entry entry="-29" weight="0.78087974"/> <entry entry="-30" weight="0.64348525"/> <entry entry="-31" weight="0.54114836"/> <entry entry="-32" weight="0.40268844"/> <entry entry="-33" weight="0.53660953"/> <entry entry="-34" weight="0.84231377"/> <entry entry="-35" weight="0.6007485"/> <entry entry="-36" weight="0.7918919"/> <entry entry="37" weight="0.7822946"/> <entry entry="-38" weight="0.56887376"/> <entry entry="-39" weight="0.7257467"/> <entry entry="-40" weight="0.30158746"/> <entry entry="-41" weight="0.78902555"/> <entry entry="-42" weight="0.57648194"/> <entry entry="-43" weight="0.17291743"/> <entry Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 444 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ entry="-44" weight="0.26169783"/> <entry entry="-45" weight="0.89602727"/> <entry entry="-46" weight="0.5729004"/> <entry entry="-47" weight="0.9092334"/> <entry entry="-48" weight="0.69845"/> <entry entry="-49" weight="0.145417"/> <entry entry="-50" weight="0.26171288"/> <entry entry="51" weight="0.5364832"/> <entry entry="-52" weight="0.21995302"/> <entry entry="-53" weight="0.7351616"/> <entry entry="-54" weight="0.6034008"/> <entry entry="-55" weight="0.40093482"/> <entry entry="-56" weight="0.9158098"/> <entry entry="-57" weight="0.7533376"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="11" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.74924624"/> <entry entry="-2" weight="0.24855395"/> <entry entry="-3" weight="0.71437794"/> <entry entry="4" weight="0.44009966"/> <entry entry="-5" weight="0.25319147"/> <entry entry="-6" weight="0.3118436"/> <entry entry="-7" weight="0.40269005"/> <entry entry="-8" weight="0.6011416"/> <entry entry="-9" weight="0.36686146"/> <entry entry="-10" weight="0.34617004"/> <entry entry="-11" weight="0.41823596"/> <entry entry="-12" weight="0.591143"/> <entry entry="-13" weight="0.30724508"/> <entry entry="-14" weight="0.56254417"/> <entry entry="-15" weight="0.8546159"/> <entry entry="16" weight="0.29093018"/> <entry entry="-17" weight="0.20195657"/> <entry entry="-18" weight="0.2754004"/> <entry entry="-19" weight="0.6188535"/> <entry entry="-20" weight="0.5689237"/> <entry entry="-21" weight="0.21009426"/> <entry entry="-22" weight="0.41164476"/> <entry entry="-23" weight="0.35204282"/> <entry entry="-24" weight="0.4330601"/> <entry entry="-25" weight="0.36288387"/> <entry entry="-26" weight="0.8128796"/> <entry entry="-27" weight="0.22021556"/> <entry entry="28" weight="0.8801797"/> <entry entry="-29" weight="0.87043333"/> <entry entry="-30" weight="0.6582846"/> <entry entry="-31" weight="0.55078685"/> <entry entry="-32" weight="0.3788155"/> <entry entry="-33" weight="0.37657967"/> <entry entry="-34" weight="0.91393787"/> <entry entry="-35" weight="0.54940325"/> <entry entry="-36" weight="0.5823771"/> <entry entry="-37" weight="0.7184359"/> <entry entry="-38" weight="0.50512934"/> <entry entry="-39" weight="0.70920366"/> <entry entry="-40" weight="0.30152538"/> <entry entry="-41" weight="0.85229164"/> <entry entry="-42" weight="0.56056935"/> <entry entry="-43" weight="0.28698438"/> <entry entry="-44" weight="0.34246024"/> <entry entry="-45" weight="0.82025313"/> <entry entry="-46" weight="0.50913393"/> <entry entry="-47" weight="0.83070487"/> <entry entry="-48" weight="0.651222"/> <entry entry="-49" weight="0.25638908"/> <entry entry="50" weight="0.4005928"/> <entry entry="-51" weight="0.38203007"/> <entry entry="-52" weight="0.25170362"/> <entry entry="-53" weight="0.60336876"/> <entry entry="-54" weight="0.5550172"/> <entry entry="-55" weight="0.2445909"/> <entry entry="-56" weight="0.8542425"/> <entry entry="57" weight="0.6350972"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="12" neuronClass="0.0"> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 445 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entries> <entry entry="-1" weight="0.5915879"/> <entry entry="-2" weight="0.48731646"/> <entry entry="-3" weight="0.55646706"/> <entry entry="4" weight="0.40673047"/> <entry entry="-5" weight="0.68459094"/> <entry entry="-6" weight="0.36252457"/> <entry entry="-7" weight="0.27360612"/> <entry entry="-8" weight="0.87504584"/> <entry entry="-9" weight="0.4520819"/> <entry entry="-10" weight="0.4062805"/> <entry entry="11" weight="0.20052007"/> <entry entry="-12" weight="0.6074952"/> <entry entry="-13" weight="0.53885484"/> <entry entry="-14" weight="0.51992446"/> <entry entry="-15" weight="0.4970743"/> <entry entry="-16" weight="0.45360544"/> <entry entry="-17" weight="0.5459"/> <entry entry="-18" weight="0.38589752"/> <entry entry="-19" weight="0.6213362"/> <entry entry="20" weight="0.27916926"/> <entry entry="-21" weight="0.060963456"/> <entry entry="-22" weight="0.10896244"/> <entry entry="-23" weight="0.32699788"/> <entry entry="-24" weight="0.6716241"/> <entry entry="-25" weight="0.64815205"/> <entry entry="-26" weight="0.6629099"/> <entry entry="27" weight="0.57874554"/> <entry entry="-28" weight="0.42051372"/> <entry entry="-29" weight="0.9585512"/> <entry entry="-30" weight="0.62314475"/> <entry entry="-31" weight="0.42891693"/> <entry entry="-32" weight="0.15671559"/> <entry entry="-33" weight="0.63794196"/> <entry entry="-34" weight="0.75570375"/> <entry entry="-35" weight="0.54741424"/> <entry entry="-36" weight="0.71495646"/> <entry entry="-37" weight="0.8871094"/> <entry entry="-38" weight="0.7789102"/> <entry entry="39" weight="0.7113825"/> <entry entry="-40" weight="0.7718964"/> <entry entry="-41" weight="0.9398449"/> <entry entry="-42" weight="0.76864475"/> <entry entry="-43" weight="0.604589"/> <entry entry="-44" weight="0.24322847"/> <entry entry="-45" weight="0.8587304"/> <entry entry="46" weight="0.4581921"/> <entry entry="-47" weight="0.37508062"/> <entry entry="-48" weight="0.3530795"/> <entry entry="-49" weight="0.32257974"/> <entry entry="-50" weight="0.55443776"/> <entry entry="-51" weight="0.48917922"/> <entry entry="-52" weight="0.13857025"/> <entry entry="-53" weight="0.57867664"/> <entry entry="-54" weight="0.7271591"/> <entry entry="-55" weight="0.08389531"/> <entry entry="-56" weight="0.40878257"/> <entry entry="-57" weight="0.52047825"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="4"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="13" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.6270153"/> <entry entry="-2" weight="0.26507032"/> <entry entry="-3" weight="0.2931093"/> <entry entry="4" weight="0.36461502"/> <entry entry="-5" weight="0.43498105"/> <entry entry="-6" weight="0.66168314"/> <entry entry="-7" weight="0.5980439"/> <entry entry="-8" weight="0.46915862"/> <entry entry="-9" weight="0.2821927"/> <entry entry="-10" weight="0.6661231"/> <entry entry="11" weight="0.11460001"/> <entry entry="-12" weight="0.40073246"/> <entry entry="-13" weight="0.39605245"/> <entry entry="-14" weight="0.76377976"/> <entry entry="-15" weight="0.20480503"/> <entry entry="-16" weight="0.31012827"/> <entry entry="-17" weight="0.65399927"/> <entry entry="-18" weight="0.5309178"/> <entry entry="-19" weight="0.27617496"/> <entry entry="-20" weight="0.3750461"/> <entry entry="-21" weight="0.39033228"/> <entry entry="-22" weight="0.20761037"/> <entry entry="-23" weight="0.58931506"/> <entry entry="-24" weight="0.58061117"/> <entry entry="-25" weight="0.79267573"/> <entry entry="-26" weight="0.33012408"/> <entry entry="-27" weight="0.4120209"/> <entry entry="- Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 446 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 28" weight="0.5767143"/> <entry entry="-29" weight="0.80095136"/> <entry entry="-30" weight="0.5902237"/> <entry entry="-31" weight="0.4132612"/> <entry entry="-32" weight="0.090849355"/> <entry entry="-33" weight="0.5694683"/> <entry entry="-34" weight="0.8031853"/> <entry entry="35" weight="0.4470556"/> <entry entry="-36" weight="0.35288107"/> <entry entry="-37" weight="0.9392649"/> <entry entry="-38" weight="0.84563124"/> <entry entry="-39" weight="0.3942761"/> <entry entry="-40" weight="0.7928095"/> <entry entry="-41" weight="0.57485723"/> <entry entry="42" weight="0.5182501"/> <entry entry="-43" weight="0.4460796"/> <entry entry="-44" weight="0.18021925"/> <entry entry="-45" weight="0.83654934"/> <entry entry="-46" weight="0.46728644"/> <entry entry="-47" weight="0.14572081"/> <entry entry="-48" weight="0.13145754"/> <entry entry="-49" weight="0.60746634"/> <entry entry="-50" weight="0.52660596"/> <entry entry="-51" weight="0.34281462"/> <entry entry="-52" weight="0.10704801"/> <entry entry="-53" weight="0.5216965"/> <entry entry="54" weight="0.47415197"/> <entry entry="-55" weight="0.026426835"/> <entry entry="-56" weight="0.31998903"/> <entry entry="-57" weight="0.6292875"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="14" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.65117264"/> <entry entry="-2" weight="0.1739111"/> <entry entry="-3" weight="0.26756114"/> <entry entry="4" weight="0.34317106"/> <entry entry="-5" weight="0.26214805"/> <entry entry="-6" weight="0.7715422"/> <entry entry="-7" weight="0.60673934"/> <entry entry="-8" weight="0.3767063"/> <entry entry="-9" weight="0.29738566"/> <entry entry="-10" weight="0.95514977"/> <entry entry="-11" weight="0.33054566"/> <entry entry="-12" weight="0.2547214"/> <entry entry="-13" weight="0.3139644"/> <entry entry="-14" weight="0.79982597"/> <entry entry="-15" weight="0.33035588"/> <entry entry="-16" weight="0.4496824"/> <entry entry="-17" weight="0.5602297"/> <entry entry="-18" weight="0.67100316"/> <entry entry="-19" weight="0.19591595"/> <entry entry="-20" weight="0.373969"/> <entry entry="21" weight="0.59592575"/> <entry entry="-22" weight="0.39301372"/> <entry entry="-23" weight="0.66624343"/> <entry entry="-24" weight="0.64926547"/> <entry entry="-25" weight="0.75119764"/> <entry entry="-26" weight="0.32457113"/> <entry entry="-27" weight="0.22007848"/> <entry entry="-28" weight="0.65295583"/> <entry entry="-29" weight="0.6746766"/> <entry entry="-30" weight="0.39943597"/> <entry entry="-31" weight="0.36918488"/> <entry entry="-32" weight="0.13438658"/> <entry entry="-33" weight="0.6472377"/> <entry entry="-34" weight="0.7811284"/> <entry entry="-35" weight="0.4655084"/> <entry entry="-36" weight="0.50981796"/> <entry entry="-37" weight="0.9185603"/> <entry entry="38" weight="0.8642246"/> <entry entry="-39" weight="0.31333488"/> <entry entry="-40" weight="0.75006175"/> <entry entry="-41" weight="0.5142043"/> <entry entry="-42" weight="0.4047152"/> <entry entry="-43" weight="0.34666944"/> <entry entry="-44" weight="0.0584912"/> <entry entry="45" weight="0.87648875"/> <entry entry="-46" weight="0.31431344"/> <entry entry="-47" weight="0.3593282"/> <entry entry="-48" weight="0.38604432"/> <entry entry="-49" weight="0.7228821"/> <entry entry="-50" weight="0.47663543"/> <entry entry="-51" weight="0.37063026"/> <entry entry="-52" weight="0.21249613"/> <entry entry="-53" weight="0.49055177"/> <entry entry="-54" weight="0.49497473"/> <entry entry="-55" weight="0.22170414"/> <entry entry="-56" weight="0.49680415"/> <entry Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 447 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ entry="-57" weight="0.74673307"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="3"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="15" neuronClass="null"> <entries> <entry entry="-1" weight="0.6321354"/> <entry entry="-2" weight="0.18796097"/> <entry entry="-3" weight="0.25961918"/> <entry entry="4" weight="0.3541326"/> <entry entry="-5" weight="0.25253385"/> <entry entry="-6" weight="0.7658506"/> <entry entry="-7" weight="0.60347056"/> <entry entry="-8" weight="0.35214207"/> <entry entry="-9" weight="0.30096054"/> <entry entry="-10" weight="0.9409632"/> <entry entry="11" weight="0.34944636"/> <entry entry="-12" weight="0.25908476"/> <entry entry="-13" weight="0.31188118"/> <entry entry="-14" weight="0.7993383"/> <entry entry="-15" weight="0.32678223"/> <entry entry="-16" weight="0.46761817"/> <entry entry="-17" weight="0.5754912"/> <entry entry="18" weight="0.6645785"/> <entry entry="-19" weight="0.2080196"/> <entry entry="-20" weight="0.37772337"/> <entry entry="-21" weight="0.60130894"/> <entry entry="-22" weight="0.4129067"/> <entry entry="-23" weight="0.6632006"/> <entry entry="-24" weight="0.63677615"/> <entry entry="25" weight="0.7438775"/> <entry entry="-26" weight="0.34854484"/> <entry entry="-27" weight="0.20495656"/> <entry entry="-28" weight="0.6653706"/> <entry entry="-29" weight="0.66318524"/> <entry entry="-30" weight="0.4052921"/> <entry entry="-31" weight="0.3838808"/> <entry entry="32" weight="0.13077304"/> <entry entry="-33" weight="0.63411367"/> <entry entry="-34" weight="0.78032786"/> <entry entry="-35" weight="0.45755973"/> <entry entry="-36" weight="0.5168342"/> <entry entry="-37" weight="0.9320531"/> <entry entry="-38" weight="0.8789207"/> <entry entry="39" weight="0.30639184"/> <entry entry="-40" weight="0.7388955"/> <entry entry="-41" weight="0.5030858"/> <entry entry="-42" weight="0.40862742"/> <entry entry="-43" weight="0.34183523"/> <entry entry="-44" weight="0.06327829"/> <entry entry="-45" weight="0.87211573"/> <entry entry="-46" weight="0.3122721"/> <entry entry="-47" weight="0.3662952"/> <entry entry="-48" weight="0.40530482"/> <entry entry="-49" weight="0.72129136"/> <entry entry="-50" weight="0.48041898"/> <entry entry="-51" weight="0.36641473"/> <entry entry="-52" weight="0.2376835"/> <entry entry="-53" weight="0.49272364"/> <entry entry="-54" weight="0.4882468"/> <entry entry="-55" weight="0.24117684"/> <entry entry="56" weight="0.48783758"/> <entry entry="-57" weight="0.73991686"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="16" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.7895915"/> <entry entry="-2" weight="0.21779402"/> <entry entry="-3" weight="0.35888863"/> <entry entry="4" weight="0.48142526"/> <entry entry="-5" weight="0.1158136"/> <entry entry="-6" weight="0.71479255"/> <entry entry="-7" weight="0.66490626"/> <entry entry="-8" weight="0.28303838"/> <entry entry="-9" weight="0.20128351"/> <entry entry="-10" weight="0.7142018"/> <entry entry="11" weight="0.3350197"/> <entry entry="-12" weight="0.38958496"/> <entry entry="-13" weight="0.137167"/> <entry entry="-14" weight="0.81856763"/> <entry entry="-15" weight="0.5535859"/> <entry entry="-16" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 448 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.2538088"/> <entry entry="-17" weight="0.48667568"/> <entry entry="18" weight="0.5058593"/> <entry entry="-19" weight="0.44130242"/> <entry entry="-20" weight="0.4705842"/> <entry entry="-21" weight="0.52139515"/> <entry entry="-22" weight="0.49586934"/> <entry entry="-23" weight="0.63519835"/> <entry entry="-24" weight="0.45645988"/> <entry entry="-25" weight="0.61733764"/> <entry entry="-26" weight="0.40898445"/> <entry entry="-27" weight="0.13356915"/> <entry entry="-28" weight="0.953416"/> <entry entry="-29" weight="0.71362954"/> <entry entry="30" weight="0.63649553"/> <entry entry="-31" weight="0.4795492"/> <entry entry="-32" weight="0.20467418"/> <entry entry="-33" weight="0.45194793"/> <entry entry="-34" weight="0.9078784"/> <entry entry="-35" weight="0.49463102"/> <entry entry="-36" weight="0.50234795"/> <entry entry="-37" weight="0.85875916"/> <entry entry="-38" weight="0.75958973"/> <entry entry="-39" weight="0.4510037"/> <entry entry="-40" weight="0.47921908"/> <entry entry="-41" weight="0.5856287"/> <entry entry="42" weight="0.48025677"/> <entry entry="-43" weight="0.08689697"/> <entry entry="-44" weight="0.12766409"/> <entry entry="-45" weight="0.96213734"/> <entry entry="-46" weight="0.43660605"/> <entry entry="-47" weight="0.557979"/> <entry entry="-48" weight="0.44010407"/> <entry entry="49" weight="0.47725517"/> <entry entry="-50" weight="0.31189463"/> <entry entry="-51" weight="0.32697636"/> <entry entry="-52" weight="0.13437709"/> <entry entry="-53" weight="0.68849987"/> <entry entry="-54" weight="0.38695806"/> <entry entry="-55" weight="0.2590415"/> <entry entry="56" weight="0.68208176"/> <entry entry="-57" weight="0.83484745"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="3"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="17" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.70685625"/> <entry entry="-2" weight="0.32563818"/> <entry entry="-3" weight="0.6480838"/> <entry entry="4" weight="0.5923317"/> <entry entry="-5" weight="0.17180696"/> <entry entry="-6" weight="0.42399096"/> <entry entry="-7" weight="0.4614563"/> <entry entry="-8" weight="0.4521889"/> <entry entry="-9" weight="0.32414946"/> <entry entry="-10" weight="0.4729375"/> <entry entry="11" weight="0.527681"/> <entry entry="-12" weight="0.7050661"/> <entry entry="-13" weight="0.25747964"/> <entry entry="-14" weight="0.69811714"/> <entry entry="-15" weight="0.9222995"/> <entry entry="-16" weight="0.37635568"/> <entry entry="-17" weight="0.35084188"/> <entry entry="-18" weight="0.3882195"/> <entry entry="-19" weight="0.7011436"/> <entry entry="-20" weight="0.39745405"/> <entry entry="-21" weight="0.38037154"/> <entry entry="-22" weight="0.5793441"/> <entry entry="23" weight="0.4357812"/> <entry entry="-24" weight="0.5458028"/> <entry entry="-25" weight="0.36591125"/> <entry entry="-26" weight="0.6664717"/> <entry entry="-27" weight="0.17553121"/> <entry entry="-28" weight="0.9381658"/> <entry entry="-29" weight="0.8141633"/> <entry entry="30" weight="0.62041926"/> <entry entry="-31" weight="0.59011114"/> <entry entry="-32" weight="0.37576842"/> <entry entry="-33" weight="0.50873077"/> <entry entry="-34" weight="0.86040443"/> <entry entry="-35" weight="0.62894243"/> <entry entry="-36" weight="0.7355695"/> <entry entry="37" weight="0.75992304"/> <entry entry="-38" weight="0.64420676"/> <entry entry="-39" weight="0.72355694"/> <entry entry="-40" weight="0.2661214"/> <entry entry="-41" weight="0.8108183"/> <entry entry="-42" weight="0.5892099"/> <entry entry="-43" weight="0.1726237"/> <entry entry="44" weight="0.24807651"/> <entry entry="-45" weight="0.89388883"/> <entry Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 449 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ entry="-46" weight="0.55536485"/> <entry entry="-47" weight="0.9092447"/> <entry entry="-48" weight="0.7460817"/> <entry entry="-49" weight="0.14214116"/> <entry entry="-50" weight="0.23120944"/> <entry entry="-51" weight="0.54401135"/> <entry entry="-52" weight="0.22401933"/> <entry entry="-53" weight="0.6772083"/> <entry entry="-54" weight="0.5538057"/> <entry entry="-55" weight="0.4107085"/> <entry entry="56" weight="0.9176152"/> <entry entry="-57" weight="0.7862929"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="18" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.81545955"/> <entry entry="-2" weight="0.14641272"/> <entry entry="-3" weight="0.45612007"/> <entry entry="4" weight="0.35555184"/> <entry entry="-5" weight="0.4200892"/> <entry entry="-6" weight="0.56002814"/> <entry entry="-7" weight="0.60374486"/> <entry entry="-8" weight="0.524994"/> <entry entry="-9" weight="0.4306695"/> <entry entry="-10" weight="0.91655993"/> <entry entry="-11" weight="0.15775782"/> <entry entry="-12" weight="0.18306981"/> <entry entry="-13" weight="0.2546466"/> <entry entry="-14" weight="0.76144123"/> <entry entry="-15" weight="0.26842684"/> <entry entry="-16" weight="0.343875"/> <entry entry="-17" weight="0.45455438"/> <entry entry="18" weight="0.6289231"/> <entry entry="-19" weight="0.23059632"/> <entry entry="-20" weight="0.55130947"/> <entry entry="-21" weight="0.4664023"/> <entry entry="-22" weight="0.2983616"/> <entry entry="-23" weight="0.7215892"/> <entry entry="-24" weight="0.6644464"/> <entry entry="25" weight="0.7966376"/> <entry entry="-26" weight="0.3034512"/> <entry entry="-27" weight="0.26523823"/> <entry entry="-28" weight="0.5479013"/> <entry entry="-29" weight="0.6487944"/> <entry entry="-30" weight="0.3497134"/> <entry entry="-31" weight="0.38889286"/> <entry entry="32" weight="0.26377943"/> <entry entry="-33" weight="0.56278723"/> <entry entry="-34" weight="0.8704299"/> <entry entry="-35" weight="0.3764738"/> <entry entry="-36" weight="0.3054753"/> <entry entry="-37" weight="0.9464936"/> <entry entry="-38" weight="0.7575083"/> <entry entry="39" weight="0.22439475"/> <entry entry="-40" weight="0.6259353"/> <entry entry="-41" weight="0.6362978"/> <entry entry="-42" weight="0.4977483"/> <entry entry="-43" weight="0.45519382"/> <entry entry="-44" weight="0.19858582"/> <entry entry="-45" weight="0.81662226"/> <entry entry="-46" weight="0.29815438"/> <entry entry="-47" weight="0.28761086"/> <entry entry="-48" weight="0.18334031"/> <entry entry="-49" weight="0.7772087"/> <entry entry="-50" weight="0.41625527"/> <entry entry="51" weight="0.33535215"/> <entry entry="-52" weight="0.22437742"/> <entry entry="-53" weight="0.3988043"/> <entry entry="-54" weight="0.46920693"/> <entry entry="-55" weight="0.13686883"/> <entry entry="-56" weight="0.423251"/> <entry entry="-57" weight="0.65931374"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="19" neuronClass="1.0"> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 450 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entries> <entry entry="-1" weight="0.6856811"/> <entry entry="-2" weight="0.19820605"/> <entry entry="-3" weight="0.44565114"/> <entry entry="4" weight="0.37710518"/> <entry entry="-5" weight="0.17895544"/> <entry entry="-6" weight="0.5688694"/> <entry entry="-7" weight="0.7790667"/> <entry entry="-8" weight="0.40937948"/> <entry entry="-9" weight="0.37425518"/> <entry entry="-10" weight="0.8218027"/> <entry entry="-11" weight="0.2578573"/> <entry entry="-12" weight="0.37550947"/> <entry entry="13" weight="0.23311423"/> <entry entry="-14" weight="0.88786495"/> <entry entry="-15" weight="0.21534106"/> <entry entry="-16" weight="0.26359382"/> <entry entry="-17" weight="0.44310534"/> <entry entry="-18" weight="0.5953935"/> <entry entry="-19" weight="0.31179637"/> <entry entry="20" weight="0.52154005"/> <entry entry="-21" weight="0.6179602"/> <entry entry="-22" weight="0.54147106"/> <entry entry="-23" weight="0.6897883"/> <entry entry="-24" weight="0.70498884"/> <entry entry="-25" weight="0.87402886"/> <entry entry="-26" weight="0.34543493"/> <entry entry="-27" weight="0.11759868"/> <entry entry="-28" weight="0.7056126"/> <entry entry="-29" weight="0.64200103"/> <entry entry="-30" weight="0.48466182"/> <entry entry="-31" weight="0.4478909"/> <entry entry="32" weight="0.35347044"/> <entry entry="-33" weight="0.69393694"/> <entry entry="-34" weight="0.88887155"/> <entry entry="-35" weight="0.5437747"/> <entry entry="-36" weight="0.52148914"/> <entry entry="-37" weight="0.9690064"/> <entry entry="-38" weight="0.8345505"/> <entry entry="39" weight="0.26770127"/> <entry entry="-40" weight="0.762319"/> <entry entry="-41" weight="0.56750727"/> <entry entry="-42" weight="0.3301739"/> <entry entry="-43" weight="0.22894831"/> <entry entry="-44" weight="0.057890225"/> <entry entry="-45" weight="0.8673049"/> <entry entry="-46" weight="0.37047774"/> <entry entry="-47" weight="0.21092083"/> <entry entry="-48" weight="0.3658479"/> <entry entry="-49" weight="0.76525605"/> <entry entry="-50" weight="0.29891905"/> <entry entry="-51" weight="0.24267241"/> <entry entry="-52" weight="0.20738754"/> <entry entry="-53" weight="0.6395329"/> <entry entry="-54" weight="0.2803785"/> <entry entry="-55" weight="0.39768526"/> <entry entry="56" weight="0.331558"/> <entry entry="-57" weight="0.85326463"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="20" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.64641726"/> <entry entry="-2" weight="0.20587195"/> <entry entry="-3" weight="0.3995594"/> <entry entry="4" weight="0.34585947"/> <entry entry="-5" weight="0.1717206"/> <entry entry="-6" weight="0.6193502"/> <entry entry="-7" weight="0.74460137"/> <entry entry="-8" weight="0.38249114"/> <entry entry="-9" weight="0.33727658"/> <entry entry="-10" weight="0.8058316"/> <entry entry="11" weight="0.26964527"/> <entry entry="-12" weight="0.37794006"/> <entry entry="-13" weight="0.24479985"/> <entry entry="-14" weight="0.89809346"/> <entry entry="-15" weight="0.21853708"/> <entry entry="-16" weight="0.27668047"/> <entry entry="-17" weight="0.42156002"/> <entry entry="-18" weight="0.5807172"/> <entry entry="-19" weight="0.29768205"/> <entry entry="-20" weight="0.51065284"/> <entry entry="-21" weight="0.6109182"/> <entry entry="-22" weight="0.524349"/> <entry entry="23" weight="0.64788157"/> <entry entry="-24" weight="0.6727401"/> <entry entry="-25" weight="0.8742862"/> <entry entry="-26" weight="0.36915773"/> <entry entry="-27" weight="0.120353855"/> <entry entry="-28" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 451 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.7281496"/> <entry entry="-29" weight="0.6369024"/> <entry entry="30" weight="0.4960792"/> <entry entry="-31" weight="0.42931694"/> <entry entry="-32" weight="0.32622218"/> <entry entry="-33" weight="0.6647226"/> <entry entry="-34" weight="0.8727139"/> <entry entry="-35" weight="0.56729335"/> <entry entry="-36" weight="0.5675615"/> <entry entry="37" weight="0.93458784"/> <entry entry="-38" weight="0.8387899"/> <entry entry="-39" weight="0.27192086"/> <entry entry="-40" weight="0.7928757"/> <entry entry="-41" weight="0.53565425"/> <entry entry="-42" weight="0.29313794"/> <entry entry="-43" weight="0.1902219"/> <entry entry="44" weight="0.045516018"/> <entry entry="-45" weight="0.8594844"/> <entry entry="-46" weight="0.37142223"/> <entry entry="-47" weight="0.24479191"/> <entry entry="-48" weight="0.3900708"/> <entry entry="-49" weight="0.7542457"/> <entry entry="-50" weight="0.31867468"/> <entry entry="51" weight="0.22740485"/> <entry entry="-52" weight="0.22859842"/> <entry entry="-53" weight="0.65264314"/> <entry entry="-54" weight="0.28243977"/> <entry entry="-55" weight="0.3883467"/> <entry entry="-56" weight="0.3379589"/> <entry entry="-57" weight="0.8666674"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="21" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.648359"/> <entry entry="-2" weight="0.2928867"/> <entry entry="-3" weight="0.35242575"/> <entry entry="-4" weight="0.40930924"/> <entry entry="-5" weight="0.09910603"/> <entry entry="6" weight="0.6487055"/> <entry entry="-7" weight="0.8485182"/> <entry entry="-8" weight="0.2820611"/> <entry entry="-9" weight="0.34690487"/> <entry entry="-10" weight="0.79351294"/> <entry entry="-11" weight="0.3428054"/> <entry entry="-12" weight="0.4690803"/> <entry entry="13" weight="0.23009805"/> <entry entry="-14" weight="0.90832186"/> <entry entry="-15" weight="0.30901808"/> <entry entry="-16" weight="0.17660326"/> <entry entry="-17" weight="0.48834282"/> <entry entry="-18" weight="0.5726885"/> <entry entry="-19" weight="0.3692161"/> <entry entry="20" weight="0.53831404"/> <entry entry="-21" weight="0.7046171"/> <entry entry="-22" weight="0.59050375"/> <entry entry="-23" weight="0.7227464"/> <entry entry="-24" weight="0.6145885"/> <entry entry="-25" weight="0.788109"/> <entry entry="-26" weight="0.39341107"/> <entry entry="27" weight="0.05276105"/> <entry entry="-28" weight="0.878516"/> <entry entry="-29" weight="0.62342364"/> <entry entry="-30" weight="0.550976"/> <entry entry="-31" weight="0.48243508"/> <entry entry="-32" weight="0.41291794"/> <entry entry="-33" weight="0.6318327"/> <entry entry="34" weight="0.89794403"/> <entry entry="-35" weight="0.6342179"/> <entry entry="-36" weight="0.49565235"/> <entry entry="-37" weight="0.9242828"/> <entry entry="-38" weight="0.7718485"/> <entry entry="-39" weight="0.31330383"/> <entry entry="-40" weight="0.7407652"/> <entry entry="41" weight="0.513481"/> <entry entry="-42" weight="0.24454893"/> <entry entry="-43" weight="0.12068685"/> <entry entry="-44" weight="0.04298827"/> <entry entry="-45" weight="0.90930873"/> <entry entry="-46" weight="0.40314704"/> <entry entry="-47" weight="0.31234002"/> <entry entry="-48" weight="0.45239896"/> <entry entry="-49" weight="0.66024536"/> <entry entry="-50" weight="0.3104124"/> <entry entry="-51" weight="0.2729528"/> <entry entry="-52" weight="0.21276952"/> <entry entry="53" weight="0.7054085"/> <entry entry="-54" weight="0.15355077"/> <entry entry="-55" weight="0.5154307"/> <entry entry="-56" weight="0.428338"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 452 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entry entry="-57" weight="0.86321986"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="22" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.83245665"/> <entry entry="-2" weight="0.24336478"/> <entry entry="-3" weight="0.33044547"/> <entry entry="4" weight="0.4905573"/> <entry entry="-5" weight="0.09715753"/> <entry entry="-6" weight="0.73737466"/> <entry entry="-7" weight="0.7107936"/> <entry entry="-8" weight="0.30460048"/> <entry entry="-9" weight="0.1878059"/> <entry entry="-10" weight="0.7108799"/> <entry entry="11" weight="0.3662346"/> <entry entry="-12" weight="0.37738755"/> <entry entry="-13" weight="0.14070934"/> <entry entry="-14" weight="0.8076145"/> <entry entry="-15" weight="0.5397152"/> <entry entry="-16" weight="0.23803098"/> <entry entry="-17" weight="0.50922316"/> <entry entry="-18" weight="0.48166043"/> <entry entry="-19" weight="0.469806"/> <entry entry="-20" weight="0.46856797"/> <entry entry="-21" weight="0.52432656"/> <entry entry="-22" weight="0.5093828"/> <entry entry="23" weight="0.65555286"/> <entry entry="-24" weight="0.4658894"/> <entry entry="-25" weight="0.6271335"/> <entry entry="-26" weight="0.38676476"/> <entry entry="-27" weight="0.16153508"/> <entry entry="-28" weight="0.9728554"/> <entry entry="-29" weight="0.7253048"/> <entry entry="30" weight="0.64337784"/> <entry entry="-31" weight="0.50607413"/> <entry entry="-32" weight="0.18187466"/> <entry entry="-33" weight="0.44280422"/> <entry entry="-34" weight="0.91866803"/> <entry entry="-35" weight="0.5049885"/> <entry entry="-36" weight="0.50357413"/> <entry entry="37" weight="0.85237706"/> <entry entry="-38" weight="0.7840935"/> <entry entry="-39" weight="0.45550665"/> <entry entry="-40" weight="0.47156054"/> <entry entry="-41" weight="0.61548203"/> <entry entry="-42" weight="0.50416213"/> <entry entry="-43" weight="0.09986136"/> <entry entry="-44" weight="0.12517187"/> <entry entry="-45" weight="0.9808408"/> <entry entry="-46" weight="0.4244056"/> <entry entry="-47" weight="0.55180585"/> <entry entry="-48" weight="0.48558307"/> <entry entry="-49" weight="0.5060296"/> <entry entry="-50" weight="0.32181686"/> <entry entry="-51" weight="0.35382664"/> <entry entry="-52" weight="0.14310774"/> <entry entry="-53" weight="0.6842123"/> <entry entry="54" weight="0.3851021"/> <entry entry="-55" weight="0.27701318"/> <entry entry="-56" weight="0.6589355"/> <entry entry="-57" weight="0.84348464"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="23" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.7962454"/> <entry entry="-2" weight="0.3879124"/> <entry entry="-3" weight="0.57823825"/> <entry entry="-4" weight="0.5889453"/> <entry entry="-5" weight="0.14323553"/> <entry entry="6" weight="0.51580495"/> <entry entry="-7" weight="0.5532037"/> <entry entry="-8" weight="0.47189963"/> <entry entry="-9" weight="0.3235078"/> <entry entry="-10" weight="0.48258367"/> <entry entry="-11" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 453 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.6029472"/> <entry entry="-12" weight="0.6442096"/> <entry entry="13" weight="0.27998212"/> <entry entry="-14" weight="0.6460753"/> <entry entry="-15" weight="0.9133547"/> <entry entry="-16" weight="0.37536532"/> <entry entry="-17" weight="0.4475564"/> <entry entry="-18" weight="0.31911808"/> <entry entry="-19" weight="0.7370639"/> <entry entry="20" weight="0.40363485"/> <entry entry="-21" weight="0.37738726"/> <entry entry="-22" weight="0.6074079"/> <entry entry="-23" weight="0.4975898"/> <entry entry="-24" weight="0.5732262"/> <entry entry="-25" weight="0.43241483"/> <entry entry="-26" weight="0.61375564"/> <entry entry="-27" weight="0.2442259"/> <entry entry="-28" weight="0.98011005"/> <entry entry="-29" weight="0.8084537"/> <entry entry="-30" weight="0.67268574"/> <entry entry="-31" weight="0.62338066"/> <entry entry="-32" weight="0.3500199"/> <entry entry="-33" weight="0.5100279"/> <entry entry="-34" weight="0.8789812"/> <entry entry="-35" weight="0.6222449"/> <entry entry="-36" weight="0.79696614"/> <entry entry="37" weight="0.7635978"/> <entry entry="-38" weight="0.6403474"/> <entry entry="-39" weight="0.7464708"/> <entry entry="-40" weight="0.26195526"/> <entry entry="-41" weight="0.85669756"/> <entry entry="-42" weight="0.6420258"/> <entry entry="-43" weight="0.20149523"/> <entry entry="44" weight="0.23729153"/> <entry entry="-45" weight="0.94999534"/> <entry entry="-46" weight="0.55792487"/> <entry entry="-47" weight="0.88076425"/> <entry entry="-48" weight="0.83243436"/> <entry entry="-49" weight="0.23038547"/> <entry entry="-50" weight="0.2785071"/> <entry entry="51" weight="0.6118857"/> <entry entry="-52" weight="0.23035933"/> <entry entry="-53" weight="0.7085845"/> <entry entry="-54" weight="0.5915338"/> <entry entry="-55" weight="0.44515735"/> <entry entry="-56" weight="0.85722876"/> <entry entry="-57" weight="0.79578066"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="24" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.979723"/> <entry entry="-2" weight="0.37441826"/> <entry entry="-3" weight="0.7217533"/> <entry entry="-4" weight="0.5287546"/> <entry entry="-5" weight="0.30484504"/> <entry entry="-6" weight="0.4541388"/> <entry entry="-7" weight="0.5653154"/> <entry entry="-8" weight="0.7267707"/> <entry entry="-9" weight="0.5014846"/> <entry entry="10" weight="0.492617"/> <entry entry="-11" weight="0.45872667"/> <entry entry="-12" weight="0.4932121"/> <entry entry="-13" weight="0.2623518"/> <entry entry="-14" weight="0.494287"/> <entry entry="-15" weight="0.8260258"/> <entry entry="-16" weight="0.2562272"/> <entry entry="17" weight="0.3637733"/> <entry entry="-18" weight="0.20081478"/> <entry entry="-19" weight="0.776883"/> <entry entry="-20" weight="0.6147596"/> <entry entry="-21" weight="0.26390934"/> <entry entry="-22" weight="0.4676029"/> <entry entry="-23" weight="0.4522318"/> <entry entry="24" weight="0.54338205"/> <entry entry="-25" weight="0.523893"/> <entry entry="-26" weight="0.6023549"/> <entry entry="-27" weight="0.35444614"/> <entry entry="-28" weight="0.8542247"/> <entry entry="-29" weight="0.75405777"/> <entry entry="-30" weight="0.5987118"/> <entry entry="31" weight="0.59575707"/> <entry entry="-32" weight="0.39453313"/> <entry entry="-33" weight="0.45958155"/> <entry entry="-34" weight="0.97705704"/> <entry entry="-35" weight="0.4230451"/> <entry entry="-36" weight="0.6263315"/> <entry entry="-37" weight="0.7219764"/> <entry entry="38" weight="0.41193682"/> <entry entry="-39" weight="0.7374467"/> <entry entry="-40" weight="0.36012274"/> <entry entry="-41" weight="0.9334968"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 454 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entry entry="-42" weight="0.75792813"/> <entry entry="-43" weight="0.36962813"/> <entry entry="-44" weight="0.3391709"/> <entry entry="45" weight="0.9415693"/> <entry entry="-46" weight="0.4302547"/> <entry entry="-47" weight="0.7526485"/> <entry entry="-48" weight="0.63327414"/> <entry entry="-49" weight="0.28500742"/> <entry entry="-50" weight="0.39566928"/> <entry entry="-51" weight="0.5283861"/> <entry entry="52" weight="0.16932563"/> <entry entry="-53" weight="0.6220075"/> <entry entry="-54" weight="0.643656"/> <entry entry="-55" weight="0.35492992"/> <entry entry="-56" weight="0.78192204"/> <entry entry="-57" weight="0.5960896"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="25" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.72801244"/> <entry entry="-2" weight="0.27747148"/> <entry entry="-3" weight="0.47750345"/> <entry entry="4" weight="0.47556522"/> <entry entry="-5" weight="0.2228829"/> <entry entry="-6" weight="0.5717865"/> <entry entry="-7" weight="0.8613948"/> <entry entry="-8" weight="0.48705804"/> <entry entry="-9" weight="0.39570644"/> <entry entry="-10" weight="0.79445034"/> <entry entry="-11" weight="0.2429328"/> <entry entry="-12" weight="0.416767"/> <entry entry="13" weight="0.14767703"/> <entry entry="-14" weight="0.9364952"/> <entry entry="-15" weight="0.18120888"/> <entry entry="-16" weight="0.15232454"/> <entry entry="-17" weight="0.3907286"/> <entry entry="-18" weight="0.5195492"/> <entry entry="-19" weight="0.48942125"/> <entry entry="20" weight="0.6024615"/> <entry entry="-21" weight="0.69705987"/> <entry entry="-22" weight="0.61056"/> <entry entry="-23" weight="0.6819058"/> <entry entry="-24" weight="0.66382736"/> <entry entry="-25" weight="0.7907727"/> <entry entry="-26" weight="0.3151461"/> <entry entry="-27" weight="0.20493935"/> <entry entry="-28" weight="0.74055505"/> <entry entry="-29" weight="0.48034352"/> <entry entry="-30" weight="0.48228174"/> <entry entry="-31" weight="0.6155314"/> <entry entry="-32" weight="0.40908802"/> <entry entry="-33" weight="0.5636561"/> <entry entry="34" weight="0.955076"/> <entry entry="-35" weight="0.47510558"/> <entry entry="-36" weight="0.38319352"/> <entry entry="-37" weight="0.90706825"/> <entry entry="-38" weight="0.7322002"/> <entry entry="-39" weight="0.28435135"/> <entry entry="-40" weight="0.71086156"/> <entry entry="-41" weight="0.5015967"/> <entry entry="-42" weight="0.37782815"/> <entry entry="-43" weight="0.17984454"/> <entry entry="-44" weight="0.14847493"/> <entry entry="-45" weight="0.8946935"/> <entry entry="46" weight="0.36036974"/> <entry entry="-47" weight="0.23623858"/> <entry entry="-48" weight="0.25577998"/> <entry entry="-49" weight="0.69366837"/> <entry entry="-50" weight="0.29398102"/> <entry entry="-51" weight="0.28572726"/> <entry entry="-52" weight="0.25454712"/> <entry entry="-53" weight="0.54329693"/> <entry entry="-54" weight="0.2775549"/> <entry entry="-55" weight="0.46731448"/> <entry entry="-56" weight="0.3231492"/> <entry entry="-57" weight="0.74507385"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="3"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 455 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="26" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.6776711"/> <entry entry="-2" weight="0.3008679"/> <entry entry="-3" weight="0.42056343"/> <entry entry="-4" weight="0.51069796"/> <entry entry="-5" weight="0.13376707"/> <entry entry="6" weight="0.6098981"/> <entry entry="-7" weight="0.8690349"/> <entry entry="-8" weight="0.35596532"/> <entry entry="-9" weight="0.3582592"/> <entry entry="-10" weight="0.81596965"/> <entry entry="-11" weight="0.3184706"/> <entry entry="-12" weight="0.4849788"/> <entry entry="13" weight="0.15869617"/> <entry entry="-14" weight="0.9635642"/> <entry entry="-15" weight="0.25466657"/> <entry entry="-16" weight="0.18853408"/> <entry entry="-17" weight="0.48869458"/> <entry entry="-18" weight="0.5900889"/> <entry entry="-19" weight="0.45305124"/> <entry entry="20" weight="0.5303769"/> <entry entry="-21" weight="0.7343004"/> <entry entry="-22" weight="0.658035"/> <entry entry="-23" weight="0.7340176"/> <entry entry="-24" weight="0.6832236"/> <entry entry="-25" weight="0.7854242"/> <entry entry="-26" weight="0.30112725"/> <entry entry="27" weight="0.12976071"/> <entry entry="-28" weight="0.81425995"/> <entry entry="-29" weight="0.5514507"/> <entry entry="-30" weight="0.5047028"/> <entry entry="-31" weight="0.57436377"/> <entry entry="-32" weight="0.43136072"/> <entry entry="-33" weight="0.633669"/> <entry entry="34" weight="0.92287785"/> <entry entry="-35" weight="0.57729954"/> <entry entry="-36" weight="0.47095844"/> <entry entry="-37" weight="0.9344516"/> <entry entry="-38" weight="0.80134493"/> <entry entry="-39" weight="0.29858494"/> <entry entry="-40" weight="0.6859464"/> <entry entry="41" weight="0.5058414"/> <entry entry="-42" weight="0.32410347"/> <entry entry="-43" weight="0.10162784"/> <entry entry="-44" weight="0.092387676"/> <entry entry="-45" weight="0.9084744"/> <entry entry="-46" weight="0.43018407"/> <entry entry="-47" weight="0.28343335"/> <entry entry="-48" weight="0.3629976"/> <entry entry="-49" weight="0.62816024"/> <entry entry="-50" weight="0.231691"/> <entry entry="-51" weight="0.31339186"/> <entry entry="-52" weight="0.2285988"/> <entry entry="53" weight="0.6224544"/> <entry entry="-54" weight="0.21427488"/> <entry entry="-55" weight="0.52391577"/> <entry entry="-56" weight="0.38696513"/> <entry entry="-57" weight="0.8396728"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="27" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.57029796"/> <entry entry="-2" weight="0.32523394"/> <entry entry="-3" weight="0.35915685"/> <entry entry="4" weight="0.44383872"/> <entry entry="-5" weight="0.06065868"/> <entry entry="-6" weight="0.70103335"/> <entry entry="-7" weight="0.85310334"/> <entry entry="-8" weight="0.32115644"/> <entry entry="-9" weight="0.27648115"/> <entry entry="-10" weight="0.71921855"/> <entry entry="-11" weight="0.2988317"/> <entry entry="-12" weight="0.4637889"/> <entry entry="-13" weight="0.20789208"/> <entry entry="-14" weight="0.9849377"/> <entry entry="-15" weight="0.22645311"/> <entry entry="16" weight="0.24221842"/> <entry entry="-17" weight="0.5342216"/> <entry entry="-18" weight="0.5621196"/> <entry entry="-19" weight="0.42705905"/> <entry entry="-20" weight="0.5417601"/> <entry entry="-21" weight="0.6810891"/> <entry entry="-22" weight="0.6528734"/> <entry entry="- Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 456 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 23" weight="0.6600247"/> <entry entry="-24" weight="0.61472714"/> <entry entry="-25" weight="0.7502464"/> <entry entry="-26" weight="0.29553467"/> <entry entry="-27" weight="0.17752045"/> <entry entry="-28" weight="0.8286956"/> <entry entry="-29" weight="0.5532056"/> <entry entry="30" weight="0.5645825"/> <entry entry="-31" weight="0.5660215"/> <entry entry="-32" weight="0.41034442"/> <entry entry="-33" weight="0.5818306"/> <entry entry="-34" weight="0.9064228"/> <entry entry="-35" weight="0.68054897"/> <entry entry="-36" weight="0.5560749"/> <entry entry="37" weight="0.8705281"/> <entry entry="-38" weight="0.87046653"/> <entry entry="-39" weight="0.32738715"/> <entry entry="-40" weight="0.6578324"/> <entry entry="-41" weight="0.45273116"/> <entry entry="-42" weight="0.3071906"/> <entry entry="-43" weight="0.101924755"/> <entry entry="-44" weight="0.13974911"/> <entry entry="-45" weight="0.8748197"/> <entry entry="-46" weight="0.4036441"/> <entry entry="-47" weight="0.31389213"/> <entry entry="-48" weight="0.46808037"/> <entry entry="-49" weight="0.58914655"/> <entry entry="-50" weight="0.24698251"/> <entry entry="-51" weight="0.2827888"/> <entry entry="-52" weight="0.25353652"/> <entry entry="-53" weight="0.6366536"/> <entry entry="54" weight="0.17351109"/> <entry entry="-55" weight="0.49414667"/> <entry entry="-56" weight="0.33221063"/> <entry entry="-57" weight="0.87135553"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="4"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="28" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.61600804"/> <entry entry="-2" weight="0.32006374"/> <entry entry="-3" weight="0.3720814"/> <entry entry="4" weight="0.41826105"/> <entry entry="-5" weight="0.059526555"/> <entry entry="-6" weight="0.6796674"/> <entry entry="-7" weight="0.87415624"/> <entry entry="-8" weight="0.33226728"/> <entry entry="-9" weight="0.29274863"/> <entry entry="-10" weight="0.723819"/> <entry entry="11" weight="0.30745757"/> <entry entry="-12" weight="0.45835277"/> <entry entry="-13" weight="0.24059437"/> <entry entry="-14" weight="0.93363917"/> <entry entry="-15" weight="0.26617187"/> <entry entry="-16" weight="0.21921283"/> <entry entry="-17" weight="0.5569169"/> <entry entry="18" weight="0.55857277"/> <entry entry="-19" weight="0.39095145"/> <entry entry="-20" weight="0.58314604"/> <entry entry="-21" weight="0.6338564"/> <entry entry="-22" weight="0.61819214"/> <entry entry="-23" weight="0.7184525"/> <entry entry="-24" weight="0.639066"/> <entry entry="25" weight="0.77694905"/> <entry entry="-26" weight="0.31189248"/> <entry entry="-27" weight="0.13696519"/> <entry entry="-28" weight="0.8432896"/> <entry entry="-29" weight="0.5924717"/> <entry entry="-30" weight="0.5811357"/> <entry entry="-31" weight="0.54381377"/> <entry entry="32" weight="0.4453077"/> <entry entry="-33" weight="0.59506226"/> <entry entry="-34" weight="0.9304504"/> <entry entry="-35" weight="0.69448864"/> <entry entry="-36" weight="0.54293346"/> <entry entry="-37" weight="0.90070343"/> <entry entry="-38" weight="0.838452"/> <entry entry="39" weight="0.33263302"/> <entry entry="-40" weight="0.6470656"/> <entry entry="-41" weight="0.50354683"/> <entry entry="-42" weight="0.31870675"/> <entry entry="-43" weight="0.11891217"/> <entry entry="-44" weight="0.11644391"/> <entry entry="-45" weight="0.875152"/> <entry entry="46" weight="0.40680778"/> <entry entry="-47" weight="0.3039239"/> <entry entry="-48" weight="0.49809265"/> <entry entry="-49" weight="0.62092716"/> <entry entry="-50" weight="0.27373055"/> <entry entry="-51" weight="0.28028303"/> <entry entry="-52" weight="0.21271865"/> <entry Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 457 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ entry="-53" weight="0.6512835"/> <entry entry="-54" weight="0.13419807"/> <entry entry="-55" weight="0.49267554"/> <entry entry="-56" weight="0.36138716"/> <entry entry="-57" weight="0.87548184"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="29" neuronClass="null"> <entries> <entry entry="-1" weight="0.3804492"/> <entry entry="-2" weight="0.6698118"/> <entry entry="-3" weight="0.3666246"/> <entry entry="-4" weight="0.57466924"/> <entry entry="-5" weight="0.16422111"/> <entry entry="6" weight="0.77593106"/> <entry entry="-7" weight="0.6497349"/> <entry entry="-8" weight="0.48345783"/> <entry entry="-9" weight="0.372392"/> <entry entry="-10" weight="0.6806629"/> <entry entry="-11" weight="0.6338525"/> <entry entry="-12" weight="0.60633016"/> <entry entry="-13" weight="0.44792518"/> <entry entry="-14" weight="0.8155137"/> <entry entry="15" weight="0.7392467"/> <entry entry="-16" weight="0.6101677"/> <entry entry="-17" weight="0.81325126"/> <entry entry="-18" weight="0.5970614"/> <entry entry="-19" weight="0.6469066"/> <entry entry="-20" weight="0.4468521"/> <entry entry="-21" weight="0.5871618"/> <entry entry="22" weight="0.68374205"/> <entry entry="-23" weight="0.6652399"/> <entry entry="-24" weight="0.7427405"/> <entry entry="-25" weight="0.3804385"/> <entry entry="-26" weight="0.42659956"/> <entry entry="-27" weight="0.3814577"/> <entry entry="-28" weight="0.79196715"/> <entry entry="29" weight="0.47215706"/> <entry entry="-30" weight="0.44135875"/> <entry entry="-31" weight="0.70542115"/> <entry entry="-32" weight="0.5713888"/> <entry entry="-33" weight="0.6187372"/> <entry entry="-34" weight="0.80772924"/> <entry entry="-35" weight="0.8961601"/> <entry entry="36" weight="0.84139943"/> <entry entry="-37" weight="0.7245549"/> <entry entry="-38" weight="0.77842087"/> <entry entry="-39" weight="0.7044751"/> <entry entry="-40" weight="0.39666384"/> <entry entry="-41" weight="0.5924439"/> <entry entry="-42" weight="0.5172558"/> <entry entry="43" weight="0.3294707"/> <entry entry="-44" weight="0.3231422"/> <entry entry="-45" weight="0.8801754"/> <entry entry="-46" weight="0.32420412"/> <entry entry="-47" weight="0.8447402"/> <entry entry="-48" weight="0.94276077"/> <entry entry="-49" weight="0.17405955"/> <entry entry="-50" weight="0.39305526"/> <entry entry="-51" weight="0.77849865"/> <entry entry="-52" weight="0.37028605"/> <entry entry="-53" weight="0.4077565"/> <entry entry="-54" weight="0.37355912"/> <entry entry="55" weight="0.70100343"/> <entry entry="-56" weight="0.6364194"/> <entry entry="-57" weight="0.6551463"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="30" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.5497866"/> <entry entry="-2" weight="0.51017326"/> <entry entry="-3" weight="0.6652093"/> <entry entry="4" weight="0.65005535"/> <entry entry="-5" weight="0.21378882"/> <entry entry="-6" weight="0.25197464"/> <entry entry="-7" weight="0.8550203"/> <entry entry="-8" weight="0.46235755"/> <entry entry="-9" weight="0.5418829"/> <entry entry="-10" weight="0.6260581"/> <entry entry="11" weight="0.21216783"/> <entry entry="-12" weight="0.866245"/> <entry Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 458 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ entry="-13" weight="0.47272307"/> <entry entry="-14" weight="0.47880456"/> <entry entry="-15" weight="0.413934"/> <entry entry="-16" weight="0.13779631"/> <entry entry="-17" weight="0.5543422"/> <entry entry="18" weight="0.47477794"/> <entry entry="-19" weight="0.5939042"/> <entry entry="-20" weight="0.51545113"/> <entry entry="-21" weight="0.7751178"/> <entry entry="-22" weight="0.7018045"/> <entry entry="-23" weight="0.33425307"/> <entry entry="-24" weight="0.81474966"/> <entry entry="-25" weight="0.82718945"/> <entry entry="-26" weight="0.52286965"/> <entry entry="-27" weight="0.30139667"/> <entry entry="-28" weight="0.7169807"/> <entry entry="-29" weight="0.6585155"/> <entry entry="30" weight="0.3354477"/> <entry entry="-31" weight="0.5867507"/> <entry entry="-32" weight="0.7354624"/> <entry entry="-33" weight="0.8053365"/> <entry entry="-34" weight="0.9752619"/> <entry entry="-35" weight="0.30260283"/> <entry entry="-36" weight="0.47738037"/> <entry entry="-37" weight="0.9008166"/> <entry entry="-38" weight="0.5721144"/> <entry entry="-39" weight="0.5291626"/> <entry entry="-40" weight="0.40104225"/> <entry entry="-41" weight="0.8232177"/> <entry entry="42" weight="0.6877458"/> <entry entry="-43" weight="0.48131937"/> <entry entry="-44" weight="0.5838696"/> <entry entry="-45" weight="0.590658"/> <entry entry="-46" weight="0.2963248"/> <entry entry="-47" weight="0.32481074"/> <entry entry="-48" weight="0.35837123"/> <entry entry="-49" weight="0.32149172"/> <entry entry="-50" weight="0.0982018"/> <entry entry="-51" weight="0.5498457"/> <entry entry="-52" weight="0.4885724"/> <entry entry="-53" weight="0.43802217"/> <entry entry="54" weight="0.63805336"/> <entry entry="-55" weight="0.86822605"/> <entry entry="-56" weight="0.33160266"/> <entry entry="-57" weight="0.5502513"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="31" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.61916006"/> <entry entry="-2" weight="0.3382686"/> <entry entry="-3" weight="0.30272907"/> <entry entry="4" weight="0.49398577"/> <entry entry="-5" weight="0.13574117"/> <entry entry="-6" weight="0.6005313"/> <entry entry="-7" weight="0.9485615"/> <entry entry="-8" weight="0.2698043"/> <entry entry="-9" weight="0.35043746"/> <entry entry="-10" weight="0.71867895"/> <entry entry="-11" weight="0.1342834"/> <entry entry="-12" weight="0.53149796"/> <entry entry="13" weight="0.256085"/> <entry entry="-14" weight="0.67631274"/> <entry entry="-15" weight="0.22209705"/> <entry entry="-16" weight="0.057286445"/> <entry entry="-17" weight="0.6128353"/> <entry entry="-18" weight="0.5300689"/> <entry entry="-19" weight="0.29432884"/> <entry entry="20" weight="0.55574787"/> <entry entry="-21" weight="0.69976175"/> <entry entry="-22" weight="0.5761349"/> <entry entry="-23" weight="0.57355124"/> <entry entry="-24" weight="0.5377871"/> <entry entry="-25" weight="0.84032065"/> <entry entry="-26" weight="0.3701409"/> <entry entry="27" weight="0.15695369"/> <entry entry="-28" weight="0.88526756"/> <entry entry="-29" weight="0.6799295"/> <entry entry="-30" weight="0.45692176"/> <entry entry="-31" weight="0.47660315"/> <entry entry="-32" weight="0.42061922"/> <entry entry="-33" weight="0.6136538"/> <entry entry="34" weight="0.98536026"/> <entry entry="-35" weight="0.3101017"/> <entry entry="-36" weight="0.33597046"/> <entry entry="-37" weight="0.87617314"/> <entry entry="-38" weight="0.7393187"/> <entry entry="-39" weight="0.33700603"/> <entry entry="-40" weight="0.57448274"/> <entry entry="-41" weight="0.5712104"/> <entry entry="-42" weight="0.54706377"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 459 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <entry entry="-43" weight="0.25225803"/> <entry entry="-44" weight="0.38462025"/> <entry entry="-45" weight="0.75007653"/> <entry entry="-46" weight="0.2845614"/> <entry entry="-47" weight="0.1590155"/> <entry entry="-48" weight="0.2944684"/> <entry entry="-49" weight="0.59818184"/> <entry entry="-50" weight="0.2504217"/> <entry entry="51" weight="0.25781924"/> <entry entry="-52" weight="0.32241452"/> <entry entry="-53" weight="0.58992845"/> <entry entry="-54" weight="0.34086427"/> <entry entry="-55" weight="0.5543686"/> <entry entry="-56" weight="0.33498657"/> <entry entry="-57" weight="0.654921"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="32" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.5550679"/> <entry entry="-2" weight="0.30064535"/> <entry entry="-3" weight="0.350149"/> <entry entry="-4" weight="0.43676752"/> <entry entry="-5" weight="0.15910059"/> <entry entry="6" weight="0.66071755"/> <entry entry="-7" weight="0.8962509"/> <entry entry="-8" weight="0.35844487"/> <entry entry="-9" weight="0.36515757"/> <entry entry="-10" weight="0.6198789"/> <entry entry="-11" weight="0.25350708"/> <entry entry="-12" weight="0.51485753"/> <entry entry="-13" weight="0.23081768"/> <entry entry="-14" weight="0.8944181"/> <entry entry="-15" weight="0.12575881"/> <entry entry="-16" weight="0.1442217"/> <entry entry="-17" weight="0.5013409"/> <entry entry="18" weight="0.5010468"/> <entry entry="-19" weight="0.27421367"/> <entry entry="-20" weight="0.59789556"/> <entry entry="-21" weight="0.5710261"/> <entry entry="-22" weight="0.60818875"/> <entry entry="-23" weight="0.7473167"/> <entry entry="-24" weight="0.5433496"/> <entry entry="25" weight="0.7539845"/> <entry entry="-26" weight="0.3295044"/> <entry entry="-27" weight="0.06390699"/> <entry entry="-28" weight="0.8591409"/> <entry entry="-29" weight="0.6034475"/> <entry entry="-30" weight="0.49393135"/> <entry entry="-31" weight="0.56335247"/> <entry entry="-32" weight="0.44436514"/> <entry entry="-33" weight="0.5776615"/> <entry entry="-34" weight="0.90742457"/> <entry entry="-35" weight="0.5262253"/> <entry entry="-36" weight="0.47024855"/> <entry entry="37" weight="0.7658118"/> <entry entry="-38" weight="0.7642909"/> <entry entry="-39" weight="0.342183"/> <entry entry="-40" weight="0.7553618"/> <entry entry="-41" weight="0.4630877"/> <entry entry="-42" weight="0.3859327"/> <entry entry="-43" weight="0.09794644"/> <entry entry="44" weight="0.25394022"/> <entry entry="-45" weight="0.7974598"/> <entry entry="-46" weight="0.39761296"/> <entry entry="-47" weight="0.13129476"/> <entry entry="-48" weight="0.48710793"/> <entry entry="-49" weight="0.7052608"/> <entry entry="-50" weight="0.28353885"/> <entry entry="51" weight="0.19314149"/> <entry entry="-52" weight="0.2924592"/> <entry entry="-53" weight="0.76866794"/> <entry entry="-54" weight="0.08755084"/> <entry entry="-55" weight="0.5642251"/> <entry entry="-56" weight="0.3889171"/> <entry entry="-57" weight="0.78411835"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="3"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 460 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ id="33" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.645871"/> <entry entry="-2" weight="0.4213917"/> <entry entry="-3" weight="0.20176657"/> <entry entry="-4" weight="0.5478845"/> <entry entry="-5" weight="0.33645758"/> <entry entry="6" weight="0.6472796"/> <entry entry="-7" weight="0.93553036"/> <entry entry="-8" weight="0.29320508"/> <entry entry="-9" weight="0.21377787"/> <entry entry="-10" weight="0.5271768"/> <entry entry="-11" weight="0.23530708"/> <entry entry="-12" weight="0.30717796"/> <entry entry="-13" weight="0.13980992"/> <entry entry="-14" weight="0.8503622"/> <entry entry="-15" weight="0.0766845"/> <entry entry="-16" weight="0.32923064"/> <entry entry="-17" weight="0.6457639"/> <entry entry="18" weight="0.40468735"/> <entry entry="-19" weight="0.15996379"/> <entry entry="-20" weight="0.539448"/> <entry entry="-21" weight="0.5225402"/> <entry entry="-22" weight="0.57053035"/> <entry entry="-23" weight="0.60309577"/> <entry entry="-24" weight="0.4543767"/> <entry entry="25" weight="0.61199933"/> <entry entry="-26" weight="0.36048347"/> <entry entry="-27" weight="0.04089351"/> <entry entry="-28" weight="0.9208307"/> <entry entry="-29" weight="0.71252733"/> <entry entry="-30" weight="0.48727688"/> <entry entry="-31" weight="0.38942575"/> <entry entry="-32" weight="0.26154464"/> <entry entry="-33" weight="0.6311238"/> <entry entry="-34" weight="0.7799008"/> <entry entry="-35" weight="0.618937"/> <entry entry="-36" weight="0.3701908"/> <entry entry="37" weight="0.77309746"/> <entry entry="-38" weight="0.8616898"/> <entry entry="-39" weight="0.36275935"/> <entry entry="-40" weight="0.718952"/> <entry entry="-41" weight="0.32335198"/> <entry entry="-42" weight="0.5195858"/> <entry entry="-43" weight="0.2087346"/> <entry entry="44" weight="0.30901214"/> <entry entry="-45" weight="0.6347734"/> <entry entry="-46" weight="0.37398726"/> <entry entry="-47" weight="0.24148472"/> <entry entry="-48" weight="0.54062593"/> <entry entry="-49" weight="0.82667065"/> <entry entry="-50" weight="0.30944395"/> <entry entry="-51" weight="0.11312976"/> <entry entry="-52" weight="0.18048033"/> <entry entry="-53" weight="0.64995146"/> <entry entry="-54" weight="0.053611893"/> <entry entry="-55" weight="0.57694066"/> <entry entry="-56" weight="0.5281312"/> <entry entry="-57" weight="0.78929293"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="34" neuronClass="null"> <entries> <entry entry="-1" weight="0.47271794"/> <entry entry="-2" weight="0.68912923"/> <entry entry="-3" weight="0.40577853"/> <entry entry="4" weight="0.6615682"/> <entry entry="-5" weight="0.49985456"/> <entry entry="-6" weight="0.43179467"/> <entry entry="-7" weight="0.82055587"/> <entry entry="-8" weight="0.45866144"/> <entry entry="-9" weight="0.25923353"/> <entry entry="-10" weight="0.3143031"/> <entry entry="11" weight="0.43421212"/> <entry entry="-12" weight="0.45489183"/> <entry entry="-13" weight="0.27188337"/> <entry entry="-14" weight="0.81342155"/> <entry entry="-15" weight="0.2250878"/> <entry entry="-16" weight="0.6326172"/> <entry entry="-17" weight="0.6413959"/> <entry entry="18" weight="0.33274737"/> <entry entry="-19" weight="0.32537138"/> <entry entry="-20" weight="0.4369872"/> <entry entry="-21" weight="0.50882524"/> <entry entry="-22" weight="0.7040434"/> <entry entry="-23" weight="0.36637092"/> <entry entry="-24" weight="0.6449618"/> <entry entry="25" weight="0.4351295"/> <entry entry="-26" weight="0.56466544"/> <entry Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 461 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ entry="-27" weight="0.08902261"/> <entry entry="-28" weight="0.84203446"/> <entry entry="-29" weight="0.731174"/> <entry entry="-30" weight="0.42507264"/> <entry entry="-31" weight="0.42714897"/> <entry entry="-32" weight="0.42678237"/> <entry entry="-33" weight="0.8918242"/> <entry entry="-34" weight="0.5768895"/> <entry entry="-35" weight="0.9230958"/> <entry entry="-36" weight="0.6092769"/> <entry entry="37" weight="0.7063888"/> <entry entry="-38" weight="0.8102529"/> <entry entry="-39" weight="0.6243952"/> <entry entry="-40" weight="0.69690055"/> <entry entry="-41" weight="0.37241107"/> <entry entry="-42" weight="0.5621257"/> <entry entry="-43" weight="0.33346352"/> <entry entry="44" weight="0.4264422"/> <entry entry="-45" weight="0.39535654"/> <entry entry="-46" weight="0.39473113"/> <entry entry="-47" weight="0.49243248"/> <entry entry="-48" weight="0.9025186"/> <entry entry="-49" weight="0.6503519"/> <entry entry="-50" weight="0.24783637"/> <entry entry="51" weight="0.305431"/> <entry entry="-52" weight="0.26538414"/> <entry entry="-53" weight="0.59406435"/> <entry entry="-54" weight="0.12819856"/> <entry entry="-55" weight="0.9384205"/> <entry entry="-56" weight="0.68699276"/> <entry entry="-57" weight="0.7526452"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="35" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.6226771"/> <entry entry="-2" weight="0.769322"/> <entry entry="-3" weight="0.3175314"/> <entry entry="-4" weight="0.59271955"/> <entry entry="-5" weight="0.5635487"/> <entry entry="6" weight="0.64567983"/> <entry entry="-7" weight="0.8198336"/> <entry entry="-8" weight="0.58694303"/> <entry entry="-9" weight="0.24586773"/> <entry entry="-10" weight="0.25926352"/> <entry entry="-11" weight="0.34906518"/> <entry entry="-12" weight="0.19623542"/> <entry entry="-13" weight="0.32939005"/> <entry entry="-14" weight="0.5815435"/> <entry entry="-15" weight="0.3526262"/> <entry entry="-16" weight="0.7771092"/> <entry entry="-17" weight="0.92418325"/> <entry entry="18" weight="0.14552769"/> <entry entry="-19" weight="0.2994281"/> <entry entry="-20" weight="0.61028063"/> <entry entry="-21" weight="0.21392712"/> <entry entry="-22" weight="0.4930079"/> <entry entry="-23" weight="0.35368103"/> <entry entry="-24" weight="0.49647394"/> <entry entry="-25" weight="0.34200943"/> <entry entry="-26" weight="0.46055532"/> <entry entry="-27" weight="0.43414858"/> <entry entry="-28" weight="0.806582"/> <entry entry="-29" weight="0.6434057"/> <entry entry="30" weight="0.45341298"/> <entry entry="-31" weight="0.41201124"/> <entry entry="-32" weight="0.4056309"/> <entry entry="-33" weight="0.60268235"/> <entry entry="-34" weight="0.66690695"/> <entry entry="-35" weight="0.91879576"/> <entry entry="-36" weight="0.5561767"/> <entry entry="37" weight="0.5609104"/> <entry entry="-38" weight="0.7470572"/> <entry entry="-39" weight="0.7271975"/> <entry entry="-40" weight="0.43882418"/> <entry entry="-41" weight="0.4125568"/> <entry entry="-42" weight="0.78502214"/> <entry entry="-43" weight="0.62093663"/> <entry entry="-44" weight="0.6683423"/> <entry entry="-45" weight="0.3822497"/> <entry entry="-46" weight="0.27857408"/> <entry entry="-47" weight="0.66059625"/> <entry entry="-48" weight="0.98050314"/> <entry entry="-49" weight="0.6188675"/> <entry entry="-50" weight="0.462206"/> <entry entry="-51" weight="0.39165008"/> <entry entry="-52" weight="0.21240072"/> <entry entry="-53" weight="0.33941177"/> <entry entry="-54" weight="0.25946498"/> <entry entry="-55" weight="0.6926752"/> <entry entry="-56" weight="0.5651705"/> <entry entry="-57" weight="0.5199944"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 462 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ </entries> <examplesInClasses> <examplesClassCount class="1.0" count="4"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="36" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.5051719"/> <entry entry="-2" weight="0.73273194"/> <entry entry="-3" weight="0.3445073"/> <entry entry="4" weight="0.6510578"/> <entry entry="-5" weight="0.34966147"/> <entry entry="-6" weight="0.47263262"/> <entry entry="-7" weight="0.893939"/> <entry entry="-8" weight="0.38211754"/> <entry entry="-9" weight="0.31925917"/> <entry entry="-10" weight="0.44375235"/> <entry entry="-11" weight="0.19209422"/> <entry entry="-12" weight="0.52886003"/> <entry entry="-13" weight="0.4439469"/> <entry entry="-14" weight="0.37262356"/> <entry entry="-15" weight="0.46308017"/> <entry entry="-16" weight="0.44266048"/> <entry entry="-17" weight="0.93657064"/> <entry entry="-18" weight="0.37902308"/> <entry entry="-19" weight="0.35845482"/> <entry entry="-20" weight="0.51336247"/> <entry entry="-21" weight="0.57379794"/> <entry entry="-22" weight="0.5882125"/> <entry entry="23" weight="0.21230847"/> <entry entry="-24" weight="0.58669645"/> <entry entry="-25" weight="0.5891893"/> <entry entry="-26" weight="0.5452958"/> <entry entry="-27" weight="0.35904804"/> <entry entry="-28" weight="0.84887135"/> <entry entry="-29" weight="0.7703278"/> <entry entry="30" weight="0.37507287"/> <entry entry="-31" weight="0.39346486"/> <entry entry="-32" weight="0.50311"/> <entry entry="-33" weight="0.8007201"/> <entry entry="-34" weight="0.8236731"/> <entry entry="-35" weight="0.48847967"/> <entry entry="-36" weight="0.43534452"/> <entry entry="-37" weight="0.767222"/> <entry entry="-38" weight="0.6986876"/> <entry entry="39" weight="0.68984246"/> <entry entry="-40" weight="0.28408548"/> <entry entry="-41" weight="0.63956255"/> <entry entry="-42" weight="0.90940994"/> <entry entry="-43" weight="0.65629923"/> <entry entry="-44" weight="0.78691864"/> <entry entry="-45" weight="0.40754557"/> <entry entry="-46" weight="0.14302126"/> <entry entry="-47" weight="0.5020496"/> <entry entry="-48" weight="0.6594658"/> <entry entry="-49" weight="0.3482146"/> <entry entry="-50" weight="0.26798132"/> <entry entry="51" weight="0.5032027"/> <entry entry="-52" weight="0.3718285"/> <entry entry="-53" weight="0.30563593"/> <entry entry="-54" weight="0.5407718"/> <entry entry="-55" weight="0.8287838"/> <entry entry="-56" weight="0.4948436"/> <entry entry="-57" weight="0.44277543"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="37" neuronClass="null"> <entries> <entry entry="-1" weight="0.41154906"/> <entry entry="-2" weight="0.5442487"/> <entry entry="-3" weight="0.52465844"/> <entry entry="4" weight="0.6388369"/> <entry entry="-5" weight="0.21931674"/> <entry entry="-6" weight="0.2828248"/> <entry entry="-7" weight="0.9007026"/> <entry entry="-8" weight="0.4082709"/> <entry entry="-9" weight="0.60778165"/> <entry entry="-10" weight="0.49653298"/> <entry entry="-11" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 463 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.2018622"/> <entry entry="-12" weight="0.9097403"/> <entry entry="13" weight="0.47492835"/> <entry entry="-14" weight="0.3900826"/> <entry entry="-15" weight="0.34520423"/> <entry entry="-16" weight="0.10092909"/> <entry entry="-17" weight="0.6219027"/> <entry entry="-18" weight="0.41342413"/> <entry entry="-19" weight="0.4866255"/> <entry entry="20" weight="0.49227464"/> <entry entry="-21" weight="0.70709515"/> <entry entry="-22" weight="0.70985633"/> <entry entry="-23" weight="0.30719888"/> <entry entry="-24" weight="0.6855194"/> <entry entry="-25" weight="0.7281815"/> <entry entry="-26" weight="0.59644103"/> <entry entry="27" weight="0.22388315"/> <entry entry="-28" weight="0.79391855"/> <entry entry="-29" weight="0.74222624"/> <entry entry="-30" weight="0.31875637"/> <entry entry="-31" weight="0.5507308"/> <entry entry="-32" weight="0.74601376"/> <entry entry="-33" weight="0.782318"/> <entry entry="34" weight="0.9744477"/> <entry entry="-35" weight="0.2494914"/> <entry entry="-36" weight="0.55538565"/> <entry entry="-37" weight="0.8044559"/> <entry entry="-38" weight="0.5571419"/> <entry entry="-39" weight="0.5430303"/> <entry entry="-40" weight="0.48100716"/> <entry entry="41" weight="0.7517346"/> <entry entry="-42" weight="0.71933514"/> <entry entry="-43" weight="0.47350878"/> <entry entry="-44" weight="0.6743231"/> <entry entry="-45" weight="0.54960144"/> <entry entry="-46" weight="0.30789137"/> <entry entry="-47" weight="0.2042294"/> <entry entry="48" weight="0.4865533"/> <entry entry="-49" weight="0.36429322"/> <entry entry="-50" weight="0.16693154"/> <entry entry="-51" weight="0.42018193"/> <entry entry="-52" weight="0.5165991"/> <entry entry="-53" weight="0.5816766"/> <entry entry="-54" weight="0.5300634"/> <entry entry="55" weight="0.9360256"/> <entry entry="-56" weight="0.33276638"/> <entry entry="-57" weight="0.46635738"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="38" neuronClass="null"> <entries> <entry entry="-1" weight="0.28966445"/> <entry entry="-2" weight="0.5530942"/> <entry entry="-3" weight="0.5094442"/> <entry entry="-4" weight="0.51532316"/> <entry entry="-5" weight="0.2006435"/> <entry entry="6" weight="0.405358"/> <entry entry="-7" weight="0.87476593"/> <entry entry="-8" weight="0.4277806"/> <entry entry="-9" weight="0.4896566"/> <entry entry="-10" weight="0.4317306"/> <entry entry="-11" weight="0.19499946"/> <entry entry="-12" weight="0.8578581"/> <entry entry="-13" weight="0.51834124"/> <entry entry="-14" weight="0.48541704"/> <entry entry="-15" weight="0.3263374"/> <entry entry="-16" weight="0.14560561"/> <entry entry="-17" weight="0.5912787"/> <entry entry="-18" weight="0.46227562"/> <entry entry="-19" weight="0.38840872"/> <entry entry="-20" weight="0.5179972"/> <entry entry="-21" weight="0.6608622"/> <entry entry="-22" weight="0.6907402"/> <entry entry="-23" weight="0.3206717"/> <entry entry="-24" weight="0.64643353"/> <entry entry="25" weight="0.78084266"/> <entry entry="-26" weight="0.5962004"/> <entry entry="-27" weight="0.24059296"/> <entry entry="-28" weight="0.8169786"/> <entry entry="-29" weight="0.7042095"/> <entry entry="-30" weight="0.3614744"/> <entry entry="-31" weight="0.58666295"/> <entry entry="32" weight="0.68928695"/> <entry entry="-33" weight="0.8055154"/> <entry entry="-34" weight="0.89637774"/> <entry entry="-35" weight="0.35157937"/> <entry entry="-36" weight="0.55197054"/> <entry entry="-37" weight="0.7076509"/> <entry entry="-38" weight="0.58896613"/> <entry entry="39" weight="0.6236091"/> <entry entry="-40" weight="0.51415265"/> <entry entry="-41" weight="0.7222489"/> <entry entry="-42" weight="0.68011093"/> <entry entry="-43" weight="0.39835867"/> <entry entry="-44" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 464 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.72867143"/> <entry entry="-45" weight="0.47800124"/> <entry entry="-46" weight="0.2114915"/> <entry entry="-47" weight="0.20520505"/> <entry entry="-48" weight="0.5960392"/> <entry entry="-49" weight="0.34151354"/> <entry entry="-50" weight="0.18947625"/> <entry entry="-51" weight="0.44011205"/> <entry entry="-52" weight="0.58823955"/> <entry entry="-53" weight="0.6242529"/> <entry entry="-54" weight="0.50001395"/> <entry entry="-55" weight="0.9382123"/> <entry entry="56" weight="0.3518415"/> <entry entry="-57" weight="0.46744984"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="39" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.4029321"/> <entry entry="-2" weight="0.6892429"/> <entry entry="-3" weight="0.357571"/> <entry entry="-4" weight="0.638586"/> <entry entry="-5" weight="0.6015097"/> <entry entry="-6" weight="0.43217203"/> <entry entry="-7" weight="0.8620798"/> <entry entry="8" weight="0.5515534"/> <entry entry="-9" weight="0.3435554"/> <entry entry="-10" weight="0.15540247"/> <entry entry="-11" weight="0.33596414"/> <entry entry="-12" weight="0.45850152"/> <entry entry="-13" weight="0.25832742"/> <entry entry="-14" weight="0.7386346"/> <entry entry="15" weight="0.05860064"/> <entry entry="-16" weight="0.5539477"/> <entry entry="-17" weight="0.588501"/> <entry entry="-18" weight="0.19488458"/> <entry entry="-19" weight="0.2467924"/> <entry entry="-20" weight="0.5005346"/> <entry entry="-21" weight="0.38884073"/> <entry entry="22" weight="0.681135"/> <entry entry="-23" weight="0.2970165"/> <entry entry="-24" weight="0.49573824"/> <entry entry="-25" weight="0.37306258"/> <entry entry="-26" weight="0.61350316"/> <entry entry="-27" weight="0.1119991"/> <entry entry="-28" weight="0.825759"/> <entry entry="29" weight="0.71925354"/> <entry entry="-30" weight="0.36827388"/> <entry entry="-31" weight="0.44472352"/> <entry entry="-32" weight="0.40681598"/> <entry entry="-33" weight="0.7860757"/> <entry entry="-34" weight="0.6163522"/> <entry entry="-35" weight="0.77358246"/> <entry entry="36" weight="0.5723055"/> <entry entry="-37" weight="0.5522317"/> <entry entry="-38" weight="0.734137"/> <entry entry="-39" weight="0.61935997"/> <entry entry="-40" weight="0.7904732"/> <entry entry="-41" weight="0.29760545"/> <entry entry="-42" weight="0.66533023"/> <entry entry="-43" weight="0.38032687"/> <entry entry="-44" weight="0.59056896"/> <entry entry="-45" weight="0.33338207"/> <entry entry="-46" weight="0.344482"/> <entry entry="-47" weight="0.34843618"/> <entry entry="48" weight="0.88076097"/> <entry entry="-49" weight="0.7462249"/> <entry entry="-50" weight="0.33780125"/> <entry entry="-51" weight="0.16231516"/> <entry entry="-52" weight="0.3389485"/> <entry entry="-53" weight="0.639755"/> <entry entry="-54" weight="0.103424706"/> <entry entry="55" weight="0.94055855"/> <entry entry="-56" weight="0.6304933"/> <entry entry="-57" weight="0.6007773"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="40" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.40877306"/> <entry entry="-2" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 465 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.6886667"/> <entry entry="-3" weight="0.36097282"/> <entry entry="4" weight="0.6287234"/> <entry entry="-5" weight="0.6059488"/> <entry entry="-6" weight="0.44118583"/> <entry entry="-7" weight="0.8696511"/> <entry entry="-8" weight="0.55887586"/> <entry entry="-9" weight="0.3384382"/> <entry entry="-10" weight="0.1583643"/> <entry entry="11" weight="0.33793297"/> <entry entry="-12" weight="0.454022"/> <entry entry="-13" weight="0.2546571"/> <entry entry="-14" weight="0.7338038"/> <entry entry="-15" weight="0.070402846"/> <entry entry="-16" weight="0.5575661"/> <entry entry="-17" weight="0.5902662"/> <entry entry="18" weight="0.19560127"/> <entry entry="-19" weight="0.23778015"/> <entry entry="-20" weight="0.50502145"/> <entry entry="-21" weight="0.3766383"/> <entry entry="-22" weight="0.6706749"/> <entry entry="-23" weight="0.31079367"/> <entry entry="-24" weight="0.50834763"/> <entry entry="-25" weight="0.38251618"/> <entry entry="-26" weight="0.6033898"/> <entry entry="-27" weight="0.11584527"/> <entry entry="-28" weight="0.83300686"/> <entry entry="-29" weight="0.7131045"/> <entry entry="30" weight="0.37670875"/> <entry entry="-31" weight="0.45041487"/> <entry entry="-32" weight="0.41338554"/> <entry entry="-33" weight="0.78361714"/> <entry entry="-34" weight="0.6132528"/> <entry entry="-35" weight="0.7839715"/> <entry entry="-36" weight="0.5723536"/> <entry entry="37" weight="0.5568043"/> <entry entry="-38" weight="0.73238397"/> <entry entry="-39" weight="0.6229792"/> <entry entry="-40" weight="0.78018934"/> <entry entry="-41" weight="0.3044488"/> <entry entry="-42" weight="0.66419876"/> <entry entry="-43" weight="0.37153018"/> <entry entry="-44" weight="0.58758134"/> <entry entry="-45" weight="0.33190554"/> <entry entry="-46" weight="0.35338578"/> <entry entry="-47" weight="0.34822208"/> <entry entry="-48" weight="0.8913719"/> <entry entry="49" weight="0.7521174"/> <entry entry="-50" weight="0.3375739"/> <entry entry="-51" weight="0.17079638"/> <entry entry="-52" weight="0.33733234"/> <entry entry="-53" weight="0.6372009"/> <entry entry="-54" weight="0.10600536"/> <entry entry="-55" weight="0.937383"/> <entry entry="56" weight="0.6235602"/> <entry entry="-57" weight="0.5997557"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="41" neuronClass="null"> <entries> <entry entry="-1" weight="0.5255994"/> <entry entry="-2" weight="0.6974773"/> <entry entry="-3" weight="0.4111729"/> <entry entry="-4" weight="0.5729753"/> <entry entry="-5" weight="0.72114515"/> <entry entry="-6" weight="0.7136898"/> <entry entry="-7" weight="0.68581796"/> <entry entry="8" weight="0.58767635"/> <entry entry="-9" weight="0.12370596"/> <entry entry="-10" weight="0.17003079"/> <entry entry="-11" weight="0.34128666"/> <entry entry="-12" weight="0.20131765"/> <entry entry="-13" weight="0.37972352"/> <entry entry="-14" weight="0.6953396"/> <entry entry="15" weight="0.2139277"/> <entry entry="-16" weight="0.8350423"/> <entry entry="-17" weight="0.74667996"/> <entry entry="-18" weight="0.30751455"/> <entry entry="-19" weight="0.14476362"/> <entry entry="-20" weight="0.48906544"/> <entry entry="-21" weight="0.32153094"/> <entry entry="-22" weight="0.4354459"/> <entry entry="-23" weight="0.44947892"/> <entry entry="-24" weight="0.50154924"/> <entry entry="-25" weight="0.4714693"/> <entry entry="-26" weight="0.45759177"/> <entry entry="27" weight="0.34041733"/> <entry entry="-28" weight="0.7711767"/> <entry entry="-29" weight="0.62476903"/> <entry entry="-30" weight="0.3702611"/> <entry entry="-31" weight="0.50869685"/> <entry entry="-32" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 466 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ weight="0.25869328"/> <entry entry="-33" weight="0.65742147"/> <entry entry="-34" weight="0.38953573"/> <entry entry="-35" weight="0.81668663"/> <entry entry="-36" weight="0.38799638"/> <entry entry="-37" weight="0.38539082"/> <entry entry="-38" weight="0.7421551"/> <entry entry="39" weight="0.778838"/> <entry entry="-40" weight="0.55465376"/> <entry entry="-41" weight="0.31639338"/> <entry entry="-42" weight="0.77459526"/> <entry entry="-43" weight="0.48490646"/> <entry entry="-44" weight="0.83395034"/> <entry entry="-45" weight="0.13998006"/> <entry entry="-46" weight="0.2139687"/> <entry entry="-47" weight="0.44356006"/> <entry entry="-48" weight="0.930434"/> <entry entry="-49" weight="0.7133509"/> <entry entry="-50" weight="0.41104624"/> <entry entry="51" weight="0.47450587"/> <entry entry="-52" weight="0.45632672"/> <entry entry="-53" weight="0.5330336"/> <entry entry="-54" weight="0.2569347"/> <entry entry="-55" weight="0.82319033"/> <entry entry="-56" weight="0.7461829"/> <entry entry="-57" weight="0.53999996"/> </entries> <examplesInClasses/> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="42" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.41558588"/> <entry entry="-2" weight="0.6343569"/> <entry entry="-3" weight="0.32397225"/> <entry entry="4" weight="0.7292081"/> <entry entry="-5" weight="0.3484071"/> <entry entry="-6" weight="0.32136986"/> <entry entry="-7" weight="0.8355115"/> <entry entry="-8" weight="0.3182866"/> <entry entry="-9" weight="0.59593433"/> <entry entry="-10" weight="0.52024376"/> <entry entry="-11" weight="0.18249524"/> <entry entry="-12" weight="0.80300486"/> <entry entry="-13" weight="0.5243186"/> <entry entry="-14" weight="0.26913083"/> <entry entry="-15" weight="0.46948445"/> <entry entry="-16" weight="0.16322732"/> <entry entry="-17" weight="0.81158507"/> <entry entry="-18" weight="0.38546324"/> <entry entry="-19" weight="0.4091"/> <entry entry="-20" weight="0.4433497"/> <entry entry="-21" weight="0.7356043"/> <entry entry="-22" weight="0.62865746"/> <entry entry="23" weight="0.41538924"/> <entry entry="-24" weight="0.5786637"/> <entry entry="-25" weight="0.5523783"/> <entry entry="-26" weight="0.6102914"/> <entry entry="-27" weight="0.2928409"/> <entry entry="-28" weight="0.73679185"/> <entry entry="-29" weight="0.6914959"/> <entry entry="30" weight="0.15360473"/> <entry entry="-31" weight="0.5395323"/> <entry entry="-32" weight="0.6443835"/> <entry entry="-33" weight="0.6490706"/> <entry entry="-34" weight="0.9758582"/> <entry entry="-35" weight="0.045082193"/> <entry entry="-36" weight="0.47085938"/> <entry entry="-37" weight="0.6645075"/> <entry entry="-38" weight="0.47859162"/> <entry entry="-39" weight="0.58985674"/> <entry entry="-40" weight="0.32832664"/> <entry entry="-41" weight="0.76390797"/> <entry entry="-42" weight="0.95101684"/> <entry entry="-43" weight="0.6944449"/> <entry entry="-44" weight="0.85909903"/> <entry entry="-45" weight="0.49074847"/> <entry entry="-46" weight="0.19564109"/> <entry entry="-47" weight="0.22332504"/> <entry entry="-48" weight="0.44340837"/> <entry entry="-49" weight="0.38384762"/> <entry entry="-50" weight="0.32788497"/> <entry entry="-51" weight="0.4892669"/> <entry entry="52" weight="0.5067467"/> <entry entry="-53" weight="0.4957213"/> <entry entry="-54" weight="0.56702745"/> <entry entry="-55" weight="0.8365951"/> <entry entry="-56" weight="0.47100526"/> <entry entry="-57" weight="0.2572744"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="1"/> <examplesClassCount class="0.0" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 467 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="43" neuronClass="0.0"> <entries> <entry entry="-1" weight="0.34301138"/> <entry entry="-2" weight="0.54405487"/> <entry entry="-3" weight="0.5230446"/> <entry entry="-4" weight="0.54724324"/> <entry entry="-5" weight="0.24152188"/> <entry entry="-6" weight="0.35345367"/> <entry entry="-7" weight="0.8810695"/> <entry entry="-8" weight="0.3973383"/> <entry entry="9" weight="0.5275016"/> <entry entry="-10" weight="0.45858842"/> <entry entry="-11" weight="0.20558059"/> <entry entry="-12" weight="0.8659147"/> <entry entry="-13" weight="0.5163107"/> <entry entry="-14" weight="0.43728969"/> <entry entry="-15" weight="0.35350138"/> <entry entry="-16" weight="0.116749555"/> <entry entry="-17" weight="0.5957086"/> <entry entry="-18" weight="0.47128493"/> <entry entry="-19" weight="0.3691346"/> <entry entry="-20" weight="0.4874617"/> <entry entry="-21" weight="0.7095426"/> <entry entry="-22" weight="0.6778865"/> <entry entry="-23" weight="0.35387388"/> <entry entry="-24" weight="0.65704167"/> <entry entry="-25" weight="0.8027575"/> <entry entry="-26" weight="0.6259255"/> <entry entry="-27" weight="0.21064693"/> <entry entry="-28" weight="0.80870515"/> <entry entry="-29" weight="0.7436787"/> <entry entry="-30" weight="0.3243318"/> <entry entry="-31" weight="0.5559448"/> <entry entry="-32" weight="0.68928885"/> <entry entry="-33" weight="0.8130546"/> <entry entry="-34" weight="0.8851049"/> <entry entry="-35" weight="0.30753362"/> <entry entry="-36" weight="0.5162866"/> <entry entry="-37" weight="0.71495616"/> <entry entry="-38" weight="0.55384725"/> <entry entry="-39" weight="0.59382033"/> <entry entry="-40" weight="0.50927126"/> <entry entry="-41" weight="0.74617994"/> <entry entry="-42" weight="0.692585"/> <entry entry="-43" weight="0.43000436"/> <entry entry="-44" weight="0.7243985"/> <entry entry="-45" weight="0.449433"/> <entry entry="46" weight="0.22950271"/> <entry entry="-47" weight="0.15790059"/> <entry entry="-48" weight="0.5500142"/> <entry entry="-49" weight="0.38500577"/> <entry entry="-50" weight="0.20092928"/> <entry entry="-51" weight="0.43069473"/> <entry entry="-52" weight="0.58240813"/> <entry entry="-53" weight="0.6612136"/> <entry entry="-54" weight="0.48583996"/> <entry entry="-55" weight="0.9500002"/> <entry entry="-56" weight="0.3920443"/> <entry entry="-57" weight="0.45205396"/> </entries> <examplesInClasses> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="44" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.38946038"/> <entry entry="-2" weight="0.6715472"/> <entry entry="-3" weight="0.36345193"/> <entry entry="4" weight="0.6558391"/> <entry entry="-5" weight="0.36764544"/> <entry entry="-6" weight="0.37736243"/> <entry entry="-7" weight="0.9231527"/> <entry entry="-8" weight="0.32092488"/> <entry entry="-9" weight="0.34438437"/> <entry entry="-10" weight="0.34806085"/> <entry entry="-11" weight="0.19120021"/> <entry entry="-12" weight="0.68313044"/> <entry entry="-13" weight="0.43142086"/> <entry entry="-14" weight="0.42225608"/> <entry entry="-15" weight="0.302018"/> <entry entry="- Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 468 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 16" weight="0.33101797"/> <entry entry="-17" weight="0.77265465"/> <entry entry="-18" weight="0.3764537"/> <entry entry="-19" weight="0.26485255"/> <entry entry="-20" weight="0.43651816"/> <entry entry="-21" weight="0.6279143"/> <entry entry="-22" weight="0.6682754"/> <entry entry="23" weight="0.19080055"/> <entry entry="-24" weight="0.56089234"/> <entry entry="-25" weight="0.63463247"/> <entry entry="-26" weight="0.62662333"/> <entry entry="-27" weight="0.19753923"/> <entry entry="-28" weight="0.8884669"/> <entry entry="-29" weight="0.8480844"/> <entry entry="30" weight="0.34787717"/> <entry entry="-31" weight="0.3880155"/> <entry entry="-32" weight="0.5174606"/> <entry entry="-33" weight="0.8667385"/> <entry entry="-34" weight="0.7702405"/> <entry entry="-35" weight="0.46233702"/> <entry entry="-36" weight="0.4735215"/> <entry entry="37" weight="0.72837865"/> <entry entry="-38" weight="0.70044065"/> <entry entry="-39" weight="0.63561064"/> <entry entry="-40" weight="0.45576495"/> <entry entry="-41" weight="0.58415407"/> <entry entry="-42" weight="0.81565285"/> <entry entry="-43" weight="0.5110678"/> <entry entry="44" weight="0.7691705"/> <entry entry="-45" weight="0.31094006"/> <entry entry="-46" weight="0.21425723"/> <entry entry="-47" weight="0.3209833"/> <entry entry="-48" weight="0.6573215"/> <entry entry="-49" weight="0.4590911"/> <entry entry="-50" weight="0.19846968"/> <entry entry="51" weight="0.35637373"/> <entry entry="-52" weight="0.46152866"/> <entry entry="-53" weight="0.53066504"/> <entry entry="-54" weight="0.4473855"/> <entry entry="-55" weight="0.9626266"/> <entry entry="-56" weight="0.51531744"/> <entry entry="-57" weight="0.49782953"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="45" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.43721467"/> <entry entry="-2" weight="0.67242014"/> <entry entry="-3" weight="0.39935666"/> <entry entry="4" weight="0.64406466"/> <entry entry="-5" weight="0.6108569"/> <entry entry="-6" weight="0.42539835"/> <entry entry="-7" weight="0.87295055"/> <entry entry="-8" weight="0.5420718"/> <entry entry="-9" weight="0.34176004"/> <entry entry="-10" weight="0.14880207"/> <entry entry="-11" weight="0.3265804"/> <entry entry="-12" weight="0.46871638"/> <entry entry="-13" weight="0.26468176"/> <entry entry="-14" weight="0.7031592"/> <entry entry="-15" weight="0.06959276"/> <entry entry="16" weight="0.56162155"/> <entry entry="-17" weight="0.619864"/> <entry entry="-18" weight="0.19224696"/> <entry entry="-19" weight="0.20957673"/> <entry entry="-20" weight="0.5017303"/> <entry entry="-21" weight="0.37234312"/> <entry entry="-22" weight="0.6619732"/> <entry entry="23" weight="0.32852593"/> <entry entry="-24" weight="0.5011715"/> <entry entry="-25" weight="0.3996432"/> <entry entry="-26" weight="0.592081"/> <entry entry="-27" weight="0.1124104"/> <entry entry="-28" weight="0.8221793"/> <entry entry="-29" weight="0.7330737"/> <entry entry="30" weight="0.3573472"/> <entry entry="-31" weight="0.42652702"/> <entry entry="-32" weight="0.4280763"/> <entry entry="-33" weight="0.7825725"/> <entry entry="-34" weight="0.6011021"/> <entry entry="-35" weight="0.77868795"/> <entry entry="-36" weight="0.55167377"/> <entry entry="-37" weight="0.5365429"/> <entry entry="-38" weight="0.7253597"/> <entry entry="-39" weight="0.6223666"/> <entry entry="-40" weight="0.7587089"/> <entry entry="-41" weight="0.31603193"/> <entry entry="42" weight="0.6774991"/> <entry entry="-43" weight="0.398548"/> <entry Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 469 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ entry="-44" weight="0.6160074"/> <entry entry="-45" weight="0.29137927"/> <entry entry="-46" weight="0.35870138"/> <entry entry="-47" weight="0.3188495"/> <entry entry="-48" weight="0.88599503"/> <entry entry="49" weight="0.763651"/> <entry entry="-50" weight="0.3162631"/> <entry entry="-51" weight="0.16343157"/> <entry entry="-52" weight="0.33494693"/> <entry entry="-53" weight="0.66912985"/> <entry entry="-54" weight="0.09110618"/> <entry entry="-55" weight="0.94880986"/> <entry entry="-56" weight="0.62705594"/> <entry entry="-57" weight="0.60559225"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="3"/> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" id="46" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.4210028"/> <entry entry="-2" weight="0.73683965"/> <entry entry="-3" weight="0.24668698"/> <entry entry="4" weight="0.66215664"/> <entry entry="-5" weight="0.7511178"/> <entry entry="-6" weight="0.63942254"/> <entry entry="-7" weight="0.8113778"/> <entry entry="-8" weight="0.5637071"/> <entry entry="-9" weight="0.3141629"/> <entry entry="-10" weight="0.101924084"/> <entry entry="-11" weight="0.3366951"/> <entry entry="-12" weight="0.36075348"/> <entry entry="13" weight="0.3070796"/> <entry entry="-14" weight="0.60199016"/> <entry entry="-15" weight="0.1283476"/> <entry entry="-16" weight="0.6610238"/> <entry entry="-17" weight="0.76642007"/> <entry entry="-18" weight="0.18453214"/> <entry entry="-19" weight="0.08692372"/> <entry entry="-20" weight="0.50455374"/> <entry entry="-21" weight="0.24567202"/> <entry entry="-22" weight="0.5252993"/> <entry entry="-23" weight="0.42813212"/> <entry entry="-24" weight="0.35379422"/> <entry entry="-25" weight="0.28283352"/> <entry entry="-26" weight="0.53858"/> <entry entry="-27" weight="0.20420098"/> <entry entry="-28" weight="0.8627158"/> <entry entry="-29" weight="0.6932837"/> <entry entry="30" weight="0.2748738"/> <entry entry="-31" weight="0.4635614"/> <entry entry="-32" weight="0.3135466"/> <entry entry="-33" weight="0.63366854"/> <entry entry="-34" weight="0.5264165"/> <entry entry="-35" weight="0.6500539"/> <entry entry="-36" weight="0.44398803"/> <entry entry="37" weight="0.33687037"/> <entry entry="-38" weight="0.6844778"/> <entry entry="-39" weight="0.73130137"/> <entry entry="-40" weight="0.67838866"/> <entry entry="-41" weight="0.2690524"/> <entry entry="-42" weight="0.8647926"/> <entry entry="-43" weight="0.47574338"/> <entry entry="44" weight="0.8459545"/> <entry entry="-45" weight="0.24237463"/> <entry entry="-46" weight="0.26038098"/> <entry entry="-47" weight="0.3717643"/> <entry entry="-48" weight="0.9582332"/> <entry entry="-49" weight="0.7464392"/> <entry entry="-50" weight="0.45778215"/> <entry entry="51" weight="0.284795"/> <entry entry="-52" weight="0.43219995"/> <entry entry="-53" weight="0.6125516"/> <entry entry="-54" weight="0.1540944"/> <entry entry="-55" weight="0.8938903"/> <entry entry="-56" weight="0.76619434"/> <entry entry="-57" weight="0.42958945"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> <examplesClassCount class="0.0" count="1"/> </examplesInClasses> </neuron> <neuron class="com.jcortex.kohonen.KohonenNeuron" distanceFunction="com.jcortex.distanceFunctions.EuclideanDistanceFunction" Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 470 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ id="47" neuronClass="1.0"> <entries> <entry entry="-1" weight="0.52408934"/> <entry entry="-2" weight="0.6971202"/> <entry entry="-3" weight="0.4098035"/> <entry entry="-4" weight="0.5725161"/> <entry entry="-5" weight="0.7152734"/> <entry entry="-6" weight="0.7092463"/> <entry entry="-7" weight="0.68527174"/> <entry entry="8" weight="0.58476853"/> <entry entry="-9" weight="0.117359385"/> <entry entry="-10" weight="0.1739245"/> <entry entry="-11" weight="0.33544305"/> <entry entry="-12" weight="0.2001091"/> <entry entry="-13" weight="0.3741799"/> <entry entry="-14" weight="0.697037"/> <entry entry="15" weight="0.2164286"/> <entry entry="-16" weight="0.8415456"/> <entry entry="-17" weight="0.7466216"/> <entry entry="-18" weight="0.30453232"/> <entry entry="-19" weight="0.14367566"/> <entry entry="-20" weight="0.4870588"/> <entry entry="-21" weight="0.3225785"/> <entry entry="22" weight="0.4378786"/> <entry entry="-23" weight="0.45607194"/> <entry entry="-24" weight="0.5093627"/> <entry entry="-25" weight="0.4701772"/> <entry entry="-26" weight="0.45666432"/> <entry entry="-27" weight="0.34322512"/> <entry entry="-28" weight="0.7695832"/> <entry entry="29" weight="0.6216408"/> <entry entry="-30" weight="0.37506688"/> <entry entry="-31" weight="0.5070194"/> <entry entry="-32" weight="0.2618038"/> <entry entry="-33" weight="0.65508974"/> <entry entry="-34" weight="0.38900152"/> <entry entry="-35" weight="0.82006353"/> <entry entry="-36" weight="0.3859446"/> <entry entry="-37" weight="0.38652593"/> <entry entry="-38" weight="0.7467995"/> <entry entry="-39" weight="0.7794996"/> <entry entry="-40" weight="0.5540877"/> <entry entry="41" weight="0.31743288"/> <entry entry="-42" weight="0.7722806"/> <entry entry="-43" weight="0.48622003"/> <entry entry="-44" weight="0.83085114"/> <entry entry="-45" weight="0.14015049"/> <entry entry="-46" weight="0.22134873"/> <entry entry="-47" weight="0.44380814"/> <entry entry="-48" weight="0.9283865"/> <entry entry="-49" weight="0.71271205"/> <entry entry="-50" weight="0.4052436"/> <entry entry="-51" weight="0.46858916"/> <entry entry="-52" weight="0.45324844"/> <entry entry="-53" weight="0.5307816"/> <entry entry="-54" weight="0.2643035"/> <entry entry="-55" weight="0.8209216"/> <entry entry="-56" weight="0.74950635"/> <entry entry="-57" weight="0.5443636"/> </entries> <examplesInClasses> <examplesClassCount class="1.0" count="2"/> <examplesClassCount class="0.0" count="2"/> </examplesInClasses> </neuron> <teacher analysisWindow="10" avgDistanceAccepted="0.05" class="com.jcortex.kohonen.DefaultKohonenTeacher" constantVariation="1.0E-4" learningRate="0.4" maxIterations="500" neighbourhoodRadius="1"/> </neuralNetwork> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 471 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Modelo de Red Perceptrón Configuración de la Red y del Maestro: Red Perceptón simple con dos entradas, Linear Basis Function como función de red y una función umbral. Esquema de la red entrenada: Causas de parada del entrenamiento: Razones de parada de los analizadores aglutinados: { ....Error de Entrenamiento (Cuadrático Medio) no ha encontrado razones hasta ahora para detener el entrenamiento. ....Detenido porque Error de Validación (Cuadrático Medio) no decrecía suficientemente bien. a[o] = 0.19980265; a[m] = 0.19980265; a[n] = 0.19980265 ....Variación de Pesos (Media Abs.) no ha encontrado razones hasta ahora para detener el entrenamiento. } Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 472 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Resultados de los estadísticos: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 473 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ El entrenamiento se detuvo a causa de la tendencia constante del error de validación. Esta parada tiene lugar en la iteración 10, ya que en los parámetros del maestro por defecto, se ha indicado que el tamaño de la ventana de estudio es de 10. (Para más información ver 5.6.4. Modelo Perceptrón > d. Maestro DefaultPerceptronTeacher) Archivo de ejemplos: aFuncion2Variables.txt (ver…) Nodo de configuración XML generado: <neuralNetwork class="com.jcortex.feedForward.PerceptronNeuralNetwork" inputTranslator="com.jcortex.translators.TransparentInputTranslator" neuronCount="1" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" sensorCount="2"> <neuron activationFunction="com.jcortex.activationFunctions.StepFunction" activationParamsCount="1" class="com.jcortex.feedForward.FeedForwardNeuron" id="0" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="0.5"/> </parameters> <entries> <entry id="-1" weight="-28.797607"/> <entry id="-2" weight="20.38462"/> </entries> </neuron> <firstNeurons size="1"> <neuronRef id="0"/> </firstNeurons> <endNeurons size="1"> <neuronRef id="0"/> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 474 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ </endNeurons> <teacher acceptableError="0.05" analysisWindow="10" class="com.jcortex.feedForward.DefaultPerceptronTeacher" constantVariation="1.0E-4" learningRate="0.5" maxIterations="500" validationPercent="0.2"/> </neuralNetwork> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 475 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Modelo de Redes Perceptrón Multicapa Configuración de la Red y del Maestro: Red Perceptrón Multicapa formada por dos capas de 2 y 1 neuronas. Todas las capas usan la Linear Basis Function como función de red, y una sigmoidal como función de activación. En la configuración del maestro hubo que bajar el error aceptable a una cifra muy baja ya que el entrenamiento terminaba enseguida por haber alcanzado este umbral. Esquema de la red entrenada: Causas de parada del entrenamiento: Razones de parada de los analizadores aglutinados: { ....Error de Entrenamiento (Cuadrático Medio) no ha encontrado razones hasta ahora para detener el entrenamiento. Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 476 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ ....Detenido porque Error de Validación (Cuadrático Medio) no decrecía suficientemente bien. a[o] = 0.5487105; a[m] = 0.5487105; a[n] = 0.6852519 ....Variación de Pesos (Media Abs.) no ha encontrado razones hasta ahora para detener el entrenamiento. } Resultados de los estadísticos: Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 477 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Está claro porqué la causa de parada del entrenamiento propuesto como ejemplo de un Perceptrón Multicapa es el sobreaprendizaje. Se puede apreciar como la gráfica del error de validación comienza a crecer desde el primer momento, lo que indica que la red no está siendo capaz de generalizar correctamente el conocimiento aprendido. Archivo de ejemplos: aFuncion2Variables.txt (ver…) Nodo de configuración XML generado: <neuralNetwork class="com.jcortex.backPropagation.MultilayerPerceptronNeuralNetwork" inputTranslator="com.jcortex.translators.TransparentInputTranslator" neuronCount="3" outputTranslator="com.jcortex.translators.TransparentOutputTranslator" sensorCount="2"> <layers count="2"> <layer ix="0" size="2"/> <layer ix="1" size="1"/> </layers> <neuron activationFunction="com.jcortex.activationFunctions.SigmoidalFunction" activationParamsCount="1" class="com.jcortex.backPropagation.BackPropagationNeuron" id="0" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="1.0"/> </parameters> <entries> <entry id="-1" weight="-3.11482"/> <entry id="-2" weight="2.8287375"/> </entries> </neuron> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 478 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ <neuron activationFunction="com.jcortex.activationFunctions.SigmoidalFunction" activationParamsCount="1" class="com.jcortex.backPropagation.BackPropagationNeuron" id="1" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="1.0"/> </parameters> <entries> <entry id="-1" weight="7.708614"/> <entry id="-2" weight="-7.584787"/> </entries> </neuron> <neuron activationFunction="com.jcortex.activationFunctions.SigmoidalFunction" activationParamsCount="1" class="com.jcortex.backPropagation.BackPropagationNeuron" id="2" networkFunction="com.jcortex.networkFunctions.LinearBasisFunction"> <parameters count="1"> <parameter ix="0" value="1.0"/> </parameters> <entries> <entry id="1" weight="-8.249389"/> <entry id="0" weight="7.265858"/> </entries> </neuron> <firstNeurons size="2"> <neuronRef id="0"/> <neuronRef id="1"/> </firstNeurons> <endNeurons size="1"> <neuronRef id="2"/> </endNeurons> <teacher acceptableError="5.0E-4" analysisWindow="10" class="com.jcortex.backPropagation.DefaultMultilayerPerceptronTeacher" constantVariation="1.0E-4" learningRate="0.3" maxIterations="500" validationPercent="0.3"/> </neuralNetwork> Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 479 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ Archivo de ejemplos aFuncion2variables.txt # Funcion de 2 variables para las pruebas con JCortex @structure float[] @input X @input Y float float @output F(X,Y) float @data 0.0556, 0.1312, 0.4812, 0.0823, 0.6290, 0.4420, 0.1844, 0.9158, 0.8084, 0.5660, 0.1441, 0.6787, 0.0545, 0.8848, 0.6918, 0.7764, 0.1382, 0.7322, 0.1312, 0.7525, 0.4966, 0.2214, 0.3665, 0.6788, 0.0815, 0.0416, 0.8055, 0.7239, 0.3891, 0.7579, 0.7604, 0.0858, 0.6515, 0.7204, 0.1126, 0.9194, 0.6770, 0.0579, 0.3928, 0.0133, 0.7970, 0.3492, 0.6032, 0.8413, 0.2673, 0.7760, 0.4325, 0.2461, 0.3030, 0.0093, 0.2719, 0.7860, 0.9740, 0.9945, 0.0329, 0.3245, 0.0628, 0.9562, 0.2049, 0.1341, 0.9937, 0.7424, 0.4112, 0.7231, 0.2401, 0.6585, 0.9494, 0.7732, 0.7280, 0.3666, 0.8400, 0.3917, 0.2743, 0.7793, 0.2166, 0.4703, 0.2167, 0.9149, 0.4153, 0.2401, 0.3494, 0.8844, 0.1808, 0.9959, 0.9981 0.9827 -0.1283 0.9935 -0.2687 -0.1086 0.9990 -0.0085 -0.2180 0.9692 0.9715 0.9095 -0.0018 -0.2832 -0.0434 0.9613 0.9998 -0.0980 0.9745 -0.5300 -0.2028 0.9754 -0.0879 -0.4323 0.9900 0.9981 -0.5534 -0.2623 0.9391 -0.2925 -0.2071 0.9929 -0.1407 -0.3323 0.9997 -0.7454 -0.2775 0.9998 -0.1368 0.9997 -0.1436 0.8997 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 480 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.1874, 0.8461, 0.6856, 0.1973, 0.6394, 0.1956, 0.6954, 0.0443, 0.1326, 0.2344, 0.2651, 0.3510, 0.3796, 0.5894, 0.8827, 0.3007, 0.1004, 0.5354, 0.0604, 0.2770, 0.1163, 0.9658, 0.0814, 0.1377, 0.9377, 0.5980, 0.4171, 0.8560, 0.9288, 0.1668, 0.8096, 0.4424, 0.3050, 0.8490, 0.7959, 0.7523, 0.4710, 0.5425, 0.1478, 0.4828, 0.4227, 0.3427, 0.6875, 0.3497, 0.6308, 0.0004, 0.5609, 0.7706, 0.3954, 0.7799, 0.6537, 0.7913, 0.4198, 0.6419, 0.0048, 0.6143, 0.7403, 0.0968, 0.4294, 0.9973, 0.5198, 0.5313, 0.1039, 0.5529, 0.3643, 0.2704, 0.0024, 0.7584, 0.6890, 0.0094, 0.7793, 0.9979, 0.9639, 0.0494, 0.4775, 0.1076, 0.0200, 0.4976, 0.7571, 0.1294, 0.9735, 0.4143, 0.7924, 0.4761, 0.4874, 0.6727, 0.5217, 0.2875, 0.2349, 0.2657, 0.1498, 0.2733, 0.1634, 0.5407, 0.2273, 0.2964, 0.9673, 0.2398, 0.2633, 0.1645, 0.8381, 0.3346, 0.8742, 0.8953, 0.9514, 0.5914, 0.0913, 0.4133, 0.5613, 0.4070, 0.9761, 0.6781, 0.5294, 0.5872, 0.8110, 0.5255, 0.2656, 0.9436, 0.9543 -0.4257 -0.3562 -0.0205 -0.3462 0.9978 -0.1869 -0.0001 0.9863 0.9774 -0.0025 0.9551 0.8918 0.9042 -0.0436 0.9944 1.0000 -0.0107 0.9986 0.9648 1.0000 0.9999 0.9985 0.9838 -0.4318 -0.2874 0.9774 -0.4319 -0.2639 0.9997 -0.2135 -0.0662 -0.0832 -0.1383 -0.4172 -0.1701 -0.1392 0.8956 0.9996 -0.1268 -0.0695 0.9429 -0.2280 0.9335 0.9448 1.0000 0.9994 -0.0703 0.9999 -0.4239 -0.2630 0.9575 0.9766 -0.3333 1.0000 0.9710 -0.3793 0.9995 0.9041 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 481 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.7000, 0.7033, 0.5180, 0.3717, 0.4887, 0.3037, 0.9000, 0.4388, 0.9542, 0.2405, 0.1151, 0.6243, 0.7817, 0.8805, 0.0003, 0.8407, 0.6118, 0.0443, 0.9256, 0.2726, 0.2549, 0.5510, 0.8587, 0.1738, 0.5505, 0.8637, 0.5417, 0.8489, 0.9753, 0.5276, 0.8818, 0.5574, 0.4229, 0.7090, 0.0658, 0.0039, 0.0254, 0.8833, 0.9418, 0.8390, 0.5057, 0.1643, 0.8661, 0.7649, 0.9689, 0.0070, 0.1463, 0.9634, 0.5888, 0.3306, 0.0627, 0.0312, 0.9529, 0.7348, 0.2863, 0.7409, 0.5178, 0.2790, 0.4560, 0.0593, 0.5987, 0.9972, 0.6725, 0.2400, 0.8008, 0.6060, 0.5082, 0.5847, 0.9432, 0.5779, 0.2717, 0.6603, 0.5242, 0.1637, 0.4078, 0.8584, 0.6927, 0.0995, 0.3837, 0.0201, 0.2357, 0.0809, 0.9200, 0.0097, 0.4785, 0.0463, 0.1500, 0.1471, 0.2155, 0.5606, 0.4395, 0.2379, 0.4170, 0.8552, 0.6630, 0.5877, 0.3409, 0.1933, 0.3001, 0.9581, 0.5524, 0.0308, 0.1667, 0.9232, 0.0346, 0.1137, 0.4475, 0.7149, 0.7007, 0.8029, 0.7655, 0.8115, 0.1228, 0.9005, 0.8102, 0.1806, 0.0844, 0.8643, -0.0415 -0.4087 0.8793 0.9751 -0.1170 0.9548 -0.5188 0.9981 -0.5294 0.9434 0.9943 -0.1688 -0.4935 -0.4453 1.0000 -0.3362 0.9548 0.9984 -0.0919 0.9982 -0.0051 -0.1295 -0.0694 0.9665 -0.0053 -0.4016 -0.0251 -0.1270 -0.1430 -0.1135 -0.4745 -0.2425 -0.1004 -0.2914 0.9946 1.0000 0.9996 -0.2966 -0.1811 -0.2492 0.8971 0.9919 -0.0266 -0.1272 -0.7799 1.0000 -0.0166 -0.4178 0.9890 0.9702 0.9957 0.9990 -0.6985 -0.0901 0.9388 0.9947 -0.0934 -0.0236 0.9315 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 482 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.4904, 0.8287, 0.9494, 0.5043, 0.9508, 0.1269, 0.4842, 0.7497, 0.7206, 0.1875, 0.3071, 0.4039, 0.8824, 0.2292, 0.4755, 0.8135, 0.8245, 0.9833, 0.6669, 0.5167, 0.3119, 0.8552, 0.9638, 0.8805, 0.9559, 0.1191, 0.2860, 0.0884, 0.7959, 0.9748, 0.7702, 0.2484, 0.9281, 0.2083, 0.2533, 0.5040, 0.5853, 0.5312, 0.3455, 0.2147, 0.5617, 0.4839, 0.5651, 0.4518, 0.7056, 0.4205, 0.2811, 0.6671, 0.6964, 0.3680, 0.5307, 0.7107, 0.0996, 0.8925, 0.4097, 0.2494, 0.0874, 0.7759, 0.5895, 0.3447, 0.1643, 0.5279, 0.8998, 0.0031, 0.9239, 0.3199, 0.1393, 0.1384, 0.4479, 0.7003, 0.0035, 0.2765, 0.6471, 0.4238, 0.9955, 0.3395, 0.5154, 0.3941, 0.5771, 0.8529, 0.1764, 0.4613, 0.1992, 0.5760, 0.6006, 0.4690, 0.8132, 0.9856, 0.3779, 0.6879, 0.4003, 0.5146, 0.4360, 0.4625, 0.1183, 0.9693, 0.0840, 0.4159, 0.5647, 0.6123, 0.3700, 0.2278, 0.1282, 0.6790, 0.1085, 0.9973, 0.6814, 0.5768, 0.2278, 0.8303, 0.4301, 0.5350, 0.9396, 0.4044, 0.9986, 0.2986, 0.0415, 0.1507, -0.1683 -0.1357 -0.4805 0.9215 -0.0029 0.9796 -0.1543 -0.1042 -0.0995 0.9952 0.9710 -0.0014 -0.2416 0.9817 -0.2001 0.9565 -0.2763 -0.4854 -0.2598 0.9981 0.9436 -0.1503 -0.4301 -0.1745 -0.5233 0.9934 0.9945 0.9918 0.9548 -0.3601 -0.5054 0.9972 -0.4596 0.9955 0.9944 -0.0596 0.9007 -0.0446 0.9988 0.9887 0.9984 -0.1781 -0.1284 -0.0579 -0.4610 -0.0456 0.9200 0.9998 -0.3910 -0.0837 0.9499 -0.3010 0.9962 0.9965 -0.1649 0.9310 0.9993 -0.0322 -0.0887 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 483 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.3771, 0.5694, 0.2341, 0.0776, 0.1908, 0.6570, 0.0529, 0.3610, 0.4251, 0.8197, 0.3809, 0.9702, 0.6123, 0.1551, 0.4317, 0.9544, 0.0811, 0.4869, 0.1511, 0.9882, 0.5846, 0.8344, 0.9321, 0.1534, 0.3801, 0.3024, 0.2583, 0.2440, 0.0148, 0.4455, 0.7432, 0.9348, 0.8942, 0.0570, 0.6241, 0.6550, 0.9271, 0.3649, 0.2453, 0.7562, 0.9981, 0.2569, 0.2764, 0.5287, 0.1183, 0.2201, 0.6206, 0.1067, 0.2818, 0.2772, 0.0822, 0.5442, 0.6835, 0.0237, 0.0780, 0.2960, 0.5547, 0.1442, 0.3150, 0.4414, 0.0959, 0.9099, 0.2014, 0.5587, 0.2698, 0.0677, 0.1092, 0.8033, 0.9882, 0.6728, 0.6768, 0.3980, 0.8551, 0.1257, 0.9610, 0.0421, 0.2637, 0.7393, 0.1149, 0.0284, 0.1651, 0.8362, 0.4106, 0.2193, 0.2149, 0.9966, 0.9277, 0.2726, 0.4042, 0.2021, 0.5243, 0.1198, 0.3561, 0.6081, 0.3511, 0.5289, 0.3541, 0.8148, 0.3912, 0.3881, 0.7305, 0.4271, 0.9445, 0.7165, 0.9599, 0.3011, 0.7139, 0.1607, 0.5079, 0.4601, 0.0676, 0.4822, 0.8979, 0.8016, 0.4586, 0.1699, 0.7485, 0.2045, 0.9988 -0.0546 0.9504 0.9998 0.9902 -0.1763 1.0000 -0.0394 0.9487 0.9621 0.9754 -0.6105 -0.2413 0.9765 -0.0542 0.9999 -0.0034 -0.1280 0.9843 -0.1133 -0.0166 -0.1373 -0.7029 0.9969 -0.0833 -0.0649 0.9281 0.9448 1.0000 -0.1791 -0.1496 -0.4707 -0.1069 0.9994 -0.3705 -0.2279 -0.4710 -0.1289 0.9612 -0.2915 -0.3778 0.9705 0.9965 0.9049 0.9900 0.9475 -0.1858 0.9916 -0.0453 0.9918 0.9981 -0.0368 -0.3237 0.9991 0.9936 0.9954 -0.0941 0.9849 -0.0644 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 484 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.3145, 0.5817, 0.5684, 0.1317, 0.9653, 0.6643, 0.9853, 0.8087, 0.7695, 0.4184, 0.5137, 0.2775, 0.8133, 0.8062, 0.0115, 0.5815, 0.5698, 0.8035, 0.0337, 0.7666, 0.7017, 0.1253, 0.2310, 0.7299, 0.5312, 0.9808, 0.9574, 0.0522, 0.7055, 0.8256, 0.0827, 0.5229, 0.3546, 0.1544, 0.7993, 0.9257, 0.8904, 0.1682, 0.1793, 0.9728, 0.7913, 0.5167, 0.7006, 0.9296, 0.4063, 0.8972, 0.4100, 0.3123, 0.0629, 0.6267, 0.8751, 0.0593, 0.1109, 0.6450, 0.1820, 0.3267, 0.9231, 0.3638, 0.8449, 0.1688, 0.4152, 0.6947, 0.7447, 0.1972, 0.6100, 0.9887, 0.7570, 0.0718, 0.1568, 0.3124, 0.3388, 0.3458, 0.7107, 0.4468, 0.7176, 0.8438, 0.4672, 0.7589, 0.9624, 0.8403, 0.6083, 0.9267, 0.9522, 0.0428, 0.7096, 0.6089, 0.3548, 0.6503, 0.9021, 0.5112, 0.4013, 0.4069, 0.3661, 0.7245, 0.3866, 0.9572, 0.8392, 0.0449, 0.4181, 0.8093, 0.8163, 0.0174, 0.9526, 0.5666, 0.0719, 0.2059, 0.9752, 0.2787, 0.0368, 0.5168, 0.7437, 0.9796, 0.5118, 0.9513, 0.0961, 0.0872, 0.6686, 0.4469, -0.0531 -0.2392 0.9897 0.9870 -0.1892 -0.3942 1.0000 -0.5747 -0.0552 -0.0655 -0.1598 0.9994 -0.2775 -0.5422 0.9999 0.9875 0.9516 -0.3666 0.9988 0.9553 0.9812 0.9927 0.9488 0.9478 -0.0228 -0.6412 -0.5505 0.9995 -0.4429 0.9920 0.9975 -0.2083 0.9993 0.9979 -0.5473 -0.3503 0.9929 0.9746 -0.0081 -0.3956 0.9996 0.9525 -0.0122 0.9991 0.9915 -0.0645 -0.0843 0.9155 0.9996 -0.0231 -0.4369 0.9967 0.9815 -0.3241 0.9611 -0.0314 -0.0804 0.9755 -0.3686 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 485 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.1612, 0.4929, 0.8525, 0.5564, 0.7229, 0.6709, 0.0115, 0.4005, 0.1485, 0.6381, 0.0654, 0.0667, 0.8449, 0.1593, 0.5892, 0.6121, 0.1267, 0.8267, 0.4503, 0.7626, 0.0396, 0.5120, 0.5613, 0.7533, 0.8430, 0.6585, 0.1321, 0.1267, 0.9141, 0.1477, 0.9654, 0.5920, 0.5078, 0.0323, 0.0042, 0.1457, 0.2573, 0.1451, 0.9206, 0.0472, 0.4841, 0.5249, 0.5311, 0.3223, 0.7896, 0.0382, 0.2181, 0.3108, 0.9407, 0.2789, 0.4211, 0.3746, 0.0785, 0.2300, 0.0509, 0.6159, 0.1619, 0.7006, 0.6846, 0.1420, 0.6617, 0.0323, 0.0015, 0.1006, 0.7014, 0.5859, 0.2804, 0.8994, 0.2578, 0.2050, 0.7846, 0.7882, 0.9014, 0.7503, 0.8469, 0.7189, 0.5780, 0.0381, 0.7777, 0.5805, 0.5605, 0.3785, 0.8924, 0.0146, 0.3608, 0.0084, 0.3200, 0.7937, 0.1079, 0.6627, 0.4384, 0.6418, 0.6970, 0.7667, 0.3634, 0.2241, 0.0394, 0.4999, 0.1158, 0.9172, 0.1111, 0.0362, 0.8602, 0.0173, 0.4355, 0.4669, 0.2083, 0.6189, 0.4971, 0.7569, 0.8883, 0.9926, 0.4083, 0.7613, 0.4162, 0.5476, 0.7401, 0.4848, -0.0229 0.9862 -0.0275 -0.0008 -0.0726 0.9992 0.9999 -0.1121 0.9752 -0.1638 0.9998 0.9954 -0.6178 0.9722 0.9820 0.9590 0.9888 -0.4599 -0.0171 0.9997 0.9991 0.9988 -0.2109 0.9781 -0.0123 -0.2353 -0.0011 0.9988 -0.6635 -0.0159 -0.5970 -0.2567 0.9908 0.9991 1.0000 0.9980 -0.0576 -0.0057 -0.4441 1.0000 0.9133 -0.0583 -0.0192 0.9405 -0.0136 0.9995 0.9941 -0.0647 -0.5498 0.9926 0.9603 0.9268 0.9897 0.9966 0.9974 -0.2536 0.9922 0.9985 -0.3258 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 486 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.1690, 0.9128, 0.3085, 0.9131, 0.3805, 0.2862, 0.9896, 0.9495, 0.3488, 0.8826, 0.4592, 0.7560, 0.0424, 0.4995, 0.1947, 0.2894, 0.4885, 0.8378, 0.0852, 0.3592, 0.2767, 0.2210, 0.8255, 0.9362, 0.4020, 0.5367, 0.1419, 0.6746, 0.1263, 0.3397, 0.5783, 0.5576, 0.3958, 0.9253, 0.5615, 0.6986, 0.5739, 0.5600, 0.8708, 0.9179, 0.3557, 0.3180, 0.9360, 0.1199, 0.8188, 0.5273, 0.6784, 0.1162, 0.4714, 0.6419, 0.9296, 0.9106, 0.7530, 0.4705, 0.6485, 0.5287, 0.4633, 0.0317, 0.1361, 0.4219, 0.0715, 0.7872, 0.9717, 0.9529, 0.9166, 0.5366, 0.8393, 0.5895, 0.3901, 0.0911, 0.7371, 0.5831, 0.8011, 0.4691, 0.2817, 0.5368, 0.6843, 0.3808, 0.2094, 0.0445, 0.2269, 0.2074, 0.5019, 0.5314, 0.1634, 0.8364, 0.8607, 0.2294, 0.6004, 0.7669, 0.8670, 0.9454, 0.6549, 0.8197, 0.0573, 0.1292, 0.5411, 0.4910, 0.1688, 0.2673, 0.5524, 0.3649, 0.8581, 0.0551, 0.3756, 0.4197, 0.5877, 0.8160, 0.0036, 0.7752, 0.4306, 0.4107, 0.8678, 0.5377, 0.0283, 0.2231, 0.9376, 0.4664, 0.9963 -0.0653 0.9567 0.9943 0.9066 0.9356 -0.5064 -0.7152 0.9859 -0.3376 -0.0418 -0.5288 0.9990 0.9549 0.9943 -0.0814 0.9989 -0.5424 0.9987 -0.0752 -0.0123 1.0000 -0.1703 -0.4528 0.9946 -0.0876 0.9806 0.9686 0.9997 0.9844 0.9763 0.9411 0.9068 -0.5696 0.9582 -0.0400 -0.0741 -0.2984 -0.4147 -0.1543 -0.0949 0.9889 -0.3349 0.9844 -0.0451 -0.1968 -0.2809 0.9940 0.9477 -0.0023 -0.6599 -0.3822 -0.3043 0.9309 -0.3417 -0.0150 -0.1032 0.9984 0.9960 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 487 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.7138, 0.6412, 0.5610, 0.3629, 0.6469, 0.8696, 0.2483, 0.1316, 0.3551, 0.4599, 0.0968, 0.4318, 0.2634, 0.6717, 0.4499, 0.7962, 0.1176, 0.7068, 0.2724, 0.4480, 0.6095, 0.2024, 0.5881, 0.7085, 0.5133, 0.3844, 0.8918, 0.0811, 0.9782, 0.4573, 0.2206, 0.6191, 0.7719, 0.9473, 0.6152, 0.9520, 0.2688, 0.1365, 0.6847, 0.7017, 0.7688, 0.3576, 0.0457, 0.1681, 0.9959, 0.9787, 0.6167, 0.9754, 0.9524, 0.5074, 0.8136, 0.1969, 0.8090, 0.5923, 0.8696, 0.0667, 0.0702, 0.6576, 0.3236, 0.1236, 0.9435, 0.2701, 0.7459, 0.2159, 0.8951, 0.0752, 0.1516, 0.3905, 0.4161, 0.4484, 0.2700, 0.8289, 0.2829, 0.9840, 0.9204, 0.4153, 0.3697, 0.7747, 0.4132, 0.6265, 0.2833, 0.1283, 0.1821, 0.0791, 0.3655, 0.8229, 0.6752, 0.0466, 0.0155, 0.1548, 0.4847, 0.1503, 0.2001, 0.5826, 0.0909, 0.6959, 0.3485, 0.8999, 0.5455, 0.5226, 0.8553, 0.5393, 0.7499, 0.4692, 0.0511, 0.6664, 0.6973, 0.9674, 0.9559, 0.2814, 0.7953, 0.2408, 0.3454, 0.4656, 0.6173, 0.7753, 0.5439, 0.1286, -0.0881 0.9258 -0.1509 0.9616 -0.1392 0.9990 -0.0187 1.0000 0.9997 -0.1902 0.9977 -0.1163 0.9560 -0.1889 0.8867 0.9805 0.9975 -0.2583 0.9628 -0.1840 0.9998 0.9995 -0.0754 -0.1287 -0.0406 -0.1400 -0.6697 0.9954 -0.0456 -0.0071 -0.0341 -0.2956 -0.1158 -0.1884 -0.3508 -0.0864 0.9737 0.9983 0.9569 -0.3735 -0.3910 0.9373 0.9990 0.9809 -0.4504 -0.0500 0.9981 -0.6290 0.9996 0.8982 -0.2270 0.9724 -0.1936 -0.2031 -0.3939 0.9973 0.9951 -0.3500 -0.0416 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 488 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.6021, 0.4013, 0.9640, 0.4845, 0.7102, 0.0489, 0.9200, 0.9862, 0.2934, 0.5691, 0.6307, 0.1741, 0.0040, 0.9573, 0.7412, 0.8641, 0.1558, 0.6669, 0.7484, 0.6254, 0.1705, 0.8779, 0.5101, 0.4680, 0.5282, 0.5035, 0.5519, 0.2359, 0.6189, 0.1848, 0.8424, 0.0040, 0.7968, 0.3360, 0.2026, 0.8880, 0.0401, 0.8720, 0.1585, 0.5963, 0.3667, 0.0795, 0.1252, 0.5747, 0.1077, 0.1397, 0.9883, 0.3371, 0.6652, 0.3120, 0.9743, 0.7704, 0.0486, 0.4305, 0.4741, 0.4463, 0.7586, 0.4761, 0.7433, 0.7112, 0.8142, 0.9122, 0.1815, 0.4623, 0.6492, 0.4007, 0.1496, 0.6222, 0.7439, 0.6275, 0.9049, 0.2218, 0.5508, 0.3075, 0.1143, 0.7160, 0.6425, 0.9972, 0.8136, 0.8178, 0.1144, 0.9651, 0.6402, 0.9497, 0.6747, 0.3282, 0.1595, 0.3856, 0.8893, 0.1372, 0.9764, 0.9434, 0.0059, 0.2964, 0.3710, 0.6490, 0.6201, 0.8393, 0.2564, 0.5627, 0.7619, 0.6148, 0.9424, 0.1729, 0.7264, 0.4693, 0.7244, 0.8898, 0.2074, 0.8500, 0.0675, 0.6785, 0.9221, 0.5163, 0.6473, 0.3273, 0.7491, 0.2100, 0.9914 0.9456 -0.7704 -0.0878 -0.3224 0.9983 -0.3604 -0.1470 0.9814 0.9803 -0.3855 0.9678 1.0000 -0.5032 -0.2259 -0.0986 0.9848 -0.4154 0.9315 0.9724 0.9757 -0.1003 0.8942 0.9870 0.9025 0.9852 -0.1802 -0.0376 -0.2364 0.9663 -0.1153 1.0000 0.9728 -0.0020 0.9993 -0.3235 0.9988 -0.5147 0.9768 -0.1523 0.9897 0.9941 0.9925 0.9120 0.9999 0.9866 -0.4474 0.9661 0.9557 -0.0647 -0.7366 -0.0519 0.9981 0.9117 0.9992 0.9839 -0.2458 0.9664 -0.1554 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 489 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.4064, 0.5348, 0.3929, 0.4207, 0.4944, 0.0841, 0.9658, 0.3075, 0.4276, 0.9684, 0.3007, 0.5039, 0.6586, 0.9197, 0.0647, 0.3496, 0.0017, 0.6279, 0.6578, 0.1344, 0.6727, 0.2470, 0.9627, 0.0664, 0.5438, 0.9074, 0.2507, 0.0171, 0.3732, 0.7345, 0.7321, 0.4511, 0.5573, 0.8488, 0.1956, 0.2006, 0.6545, 0.1098, 0.1171, 0.7794, 0.3988, 0.8681, 0.0671, 0.8848, 0.5382, 0.9543, 0.7462, 0.6759, 0.4777, 0.4749, 0.9414, 0.2366, 0.5348, 0.3967, 0.1329, 0.5801, 0.2293, 0.3760, 0.7931, 0.6239, 0.2979, 0.6204, 0.0319, 0.4081, 0.8749, 0.0313, 0.1366, 0.1660, 0.0110, 0.9556, 0.9358, 0.3179, 0.5955, 0.5961, 0.6152, 0.2926, 0.2990, 0.5215, 0.7235, 0.1789, 0.8333, 0.8900, 0.9907, 0.3954, 0.4577, 0.2271, 0.7192, 0.2395, 0.7742, 0.2582, 0.3103, 0.9314, 0.8038, 0.9963, 0.9781, 0.5809, 0.6059, 0.7290, 0.6765, 0.1495, 0.3635, 0.1594, 0.6607, 0.2318, 0.1731, 0.9046, 0.4343, 0.0774, 0.7106, 0.3756, 0.1129, 0.3822, 0.0572, 0.5089, 0.8993, 0.0612, 0.8831, 0.6939, 0.9844 -0.1587 0.9841 -0.0134 -0.2004 0.9912 -0.0303 -0.0420 -0.0709 -0.0107 0.9235 0.9068 -0.2078 -0.5207 0.9976 0.9828 1.0000 -0.1866 -0.3363 0.9875 -0.1200 0.9584 -0.7558 0.9925 -0.2133 -0.4035 -0.0569 0.9997 -0.0893 0.9983 -0.1879 -0.1395 0.9143 -0.6306 0.9513 0.9518 -0.3711 0.9941 0.9898 -0.5032 -0.0596 -0.3103 0.9999 -0.5518 -0.1244 -0.1644 0.9722 -0.2893 -0.0370 0.9750 -0.3463 -0.0267 -0.2029 -0.0227 0.9950 0.9322 -0.0140 0.9282 -0.5230 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 490 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.0933, 0.4377, 0.8780, 0.5792, 0.6731, 0.6586, 0.9095, 0.6548, 0.3261, 0.3596, 0.0582, 0.5863, 0.3648, 0.9059, 0.4810, 0.5304, 0.4900, 0.4622, 0.8227, 0.3827, 0.9069, 0.7108, 0.1285, 0.8795, 0.0519, 0.2969, 0.9220, 0.9795, 0.1283, 0.0464, 0.6549, 0.7651, 0.4406, 0.4498, 0.9505, 0.5737, 0.4269, 0.8970, 0.2185, 0.1517, 0.4560, 0.0404, 0.1674, 0.2922, 0.8217, 0.6691, 0.3139, 0.2542, 0.7797, 0.9765, 0.2078, 0.4223, 0.9967, 0.5410, 0.1117, 0.3212, 0.1598, 0.6218, 0.6338, 0.7950, 0.1977, 0.0744, 0.5794, 0.2577, 0.8612, 0.7115, 0.4955, 0.2259, 0.8655, 0.5628, 0.2135, 0.6511, 0.2493, 0.0923, 0.3281, 0.6793, 0.2666, 0.3826, 0.0905, 0.2774, 0.6827, 0.6748, 0.6071, 0.3688, 0.9425, 0.3066, 0.4813, 0.0766, 0.2808, 0.6839, 0.9072, 0.0142, 0.9760, 0.9555, 0.6800, 0.6679, 0.4300, 0.4344, 0.3303, 0.5418, 0.0900, 0.3195, 0.6586, 0.5164, 0.6582, 0.1978, 0.5654, 0.7107, 0.8259, 0.1042, 0.8558, 0.4112, 0.4071, 0.0343, 0.9761, 0.9453, 0.4527, 0.1021, 0.9914 -0.0864 -0.0653 1.0000 -0.1726 0.9646 -0.6029 -0.3188 -0.0736 0.9345 0.9983 -0.1248 0.9783 -0.2239 -0.0444 -0.1732 0.9828 -0.1229 -0.3096 -0.0346 -0.2489 -0.4665 0.9902 -0.5089 0.9995 0.9274 -0.2790 -0.4542 -0.0098 0.9998 0.9993 0.9764 -0.0062 0.8900 1.0000 0.9926 0.9789 -0.3762 0.9956 0.9985 0.9969 1.0000 0.9987 0.9772 -0.4117 -0.4263 -0.0620 0.9875 -0.5262 -0.7219 -0.0217 0.9337 -0.3985 -0.2184 -0.0038 0.9128 0.9687 -0.2778 -0.0647 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 491 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.1916, 0.8970, 0.8505, 0.2622, 0.7841, 0.7667, 0.1005, 0.5374, 0.3827, 0.0690, 0.2643, 0.5386, 0.0679, 0.3989, 0.4280, 0.5929, 0.0801, 0.0676, 0.7952, 0.3103, 0.3207, 0.5933, 0.4919, 0.3098, 0.4161, 0.4425, 0.4391, 0.9508, 0.0786, 0.2858, 0.2410, 0.9398, 0.2200, 0.3011, 0.2198, 0.0366, 0.0504, 0.1235, 0.8296, 0.8239, 0.1033, 0.3692, 0.9232, 0.7145, 0.2420, 0.1666, 0.0383, 0.2945, 0.8302, 0.3557, 0.9930, 0.7880, 0.8221, 0.2736, 0.7156, 0.0531, 0.8877, 0.9359, 0.9109, 0.4829, 0.6730, 0.3475, 0.5651, 0.7176, 0.4265, 0.2197, 0.3384, 0.6301, 0.7003, 0.9179, 0.9356, 0.7923, 0.6772, 0.0413, 0.6087, 0.0136, 0.6984, 0.2367, 0.2637, 0.1949, 0.3031, 0.4883, 0.2780, 0.8960, 0.3369, 0.3717, 0.7256, 0.8348, 0.8180, 0.7392, 0.5289, 0.3712, 0.0296, 0.8893, 0.3617, 0.8054, 0.9968, 0.9187, 0.0843, 0.0709, 0.3835, 0.5665, 0.0158, 0.5735, 0.7604, 0.0678, 0.3174, 0.6841, 0.1366, 0.5239, 0.3587, 0.2437, 0.7608, 0.1923, 0.0870, 0.4211, 0.0980, 0.5995, 0.9938 -0.5677 -0.2912 0.9874 -0.5334 -0.3212 0.9997 -0.1809 0.9821 0.9962 0.9409 0.9099 0.9952 0.9755 -0.0177 0.9998 -0.0011 0.9964 -0.1871 -0.0817 -0.0625 -0.1788 -0.2379 -0.0860 0.9213 -0.1485 -0.1625 -0.6365 0.9929 0.9541 0.9713 -0.4768 0.9978 -0.0089 0.9570 0.9997 0.9971 0.9768 0.9891 -0.0694 -0.0073 0.9999 -0.4995 -0.0113 0.9872 0.9805 1.0000 0.9999 -0.5379 -0.0486 -0.4971 -0.2789 -0.1990 0.9647 -0.1372 1.0000 -0.3651 -0.0916 -0.5193 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 492 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.7026, 0.0920, 0.0052, 0.6549, 0.4051, 0.5833, 0.3927, 0.0470, 0.3099, 0.3459, 0.2954, 0.9946, 0.9112, 0.2716, 0.4729, 0.3164, 0.6998, 0.2705, 0.8059, 0.5067, 0.0349, 0.2224, 0.1350, 0.9509, 0.5028, 0.4437, 0.3699, 0.2329, 0.8970, 0.9092, 0.1559, 0.4847, 0.5116, 0.0406, 0.1183, 0.3702, 0.7902, 0.4163, 0.0160, 0.4584, 0.5339, 0.3559, 0.6183, 0.7533, 0.6401, 0.0345, 0.3037, 0.9809, 0.1155, 0.5567, 0.9249, 0.3600, 0.9563, 0.4287, 0.5394, 0.2990, 0.5797, 0.4268, 0.7535, 0.0825, 0.4662, 0.6592, 0.0717, 0.2696, 0.3192, 0.6814, 0.0577, 0.2861, 0.0230, 0.9698, 0.5190, 0.9351, 0.2171, 0.0448, 0.1305, 0.0201, 0.8176, 0.0529, 0.5011, 0.7108, 0.5143, 0.6958, 0.6283, 0.5584, 0.9179, 0.0760, 0.9047, 0.8903, 0.0238, 0.5364, 0.3586, 0.8716, 0.8111, 0.4441, 0.5283, 0.8713, 0.6700, 0.7379, 0.4615, 0.9155, 0.5704, 0.7444, 0.2199, 0.0302, 0.6048, 0.1540, 0.2647, 0.1383, 0.8185, 0.3122, 0.6643, 0.8646, 0.3481, 0.2491, 0.3736, 0.1266, 0.1700, 0.9995, -0.0580 0.9976 1.0000 -0.0469 -0.1090 -0.1851 0.9744 1.0000 -0.0885 -0.0080 0.9217 -0.4936 0.9991 -0.0589 -0.0212 -0.0413 -0.0141 0.9565 -0.0426 -0.2512 0.9989 0.9916 0.9886 -0.5625 0.9984 0.9128 -0.0281 0.9514 -0.7164 -0.0216 0.9930 -0.1730 0.9329 0.9980 0.9970 0.9932 0.9918 0.9778 0.9997 1.0000 0.9181 0.9884 0.9879 -0.1649 -0.0194 0.9992 -0.0467 -0.2567 1.0000 0.9578 -0.2848 0.9761 -0.7357 -0.1487 -0.1340 0.9990 -0.0733 -0.0725 0.9321 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 493 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.9519, 0.5169, 0.2833, 0.4862, 0.0874, 0.2813, 0.6169, 0.4922, 0.0651, 0.7438, 0.0179, 0.8235, 0.2928, 0.7907, 0.6660, 0.0177, 0.7563, 0.4223, 0.0749, 0.3753, 0.5473, 0.6362, 0.2678, 0.7592, 0.8469, 0.8160, 0.7047, 0.4858, 0.9847, 0.7190, 0.0270, 0.1514, 0.8211, 0.5186, 0.7033, 0.0530, 0.0496, 0.4303, 0.7340, 0.7098, 0.5575, 0.6937, 0.6076, 0.2909, 0.3387, 0.3215, 0.7447, 0.6646, 0.6225, 0.9227, 0.9888, 0.8476, 0.3609, 0.5282, 0.1681, 0.5727, 0.7598, 0.7885, 0.2540, 0.9726, 0.3519, 0.8995, 0.0199, 0.1145, 0.9773, 0.3535, 0.3556, 0.1286, 0.4208, 0.9920, 0.5223, 0.0613, 0.4007, 0.4514, 0.5216, 0.3072, 0.5556, 0.1216, 0.1427, 0.4802, 0.9272, 0.4418, 0.4937, 0.0166, 0.0530, 0.0358, 0.3658, 0.2229, 0.6980, 0.2758, 0.1884, 0.1786, 0.4542, 0.4275, 0.3481, 0.0782, 0.0033, 0.5268, 0.9882, 0.7932, 0.9867, 0.7549, 0.2986, 0.3642, 0.1627, 0.5120, 0.4307, 0.8603, 0.5676, 0.4979, 0.3165, 0.7826, 0.0106, 0.8100, 0.2852, 0.5346, 0.4002, 0.2099, 0.9992 -0.1809 0.9397 -0.0097 1.0000 0.9243 -0.2163 -0.1741 1.0000 -0.3079 0.9994 -0.4169 -0.0179 -0.3116 -0.2962 0.9998 -0.2303 0.9937 1.0000 -0.0535 -0.2598 0.9322 0.9957 -0.3661 -0.0141 -0.0432 -0.0252 -0.1768 -0.2177 -0.4811 0.9999 0.9999 -0.1462 -0.2334 -0.2962 0.9995 1.0000 -0.0014 -0.3771 0.9229 0.9657 0.9185 0.9840 1.0000 0.9999 -0.0523 -0.3721 -0.2824 0.9565 -0.5001 -0.4727 -0.2651 0.9540 -0.0056 0.9768 -0.1626 -0.3951 -0.3103 -0.0533 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 494 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.5304, 0.0506, 0.5210, 0.8044, 0.2288, 0.3685, 0.6508, 0.8532, 0.8103, 0.5931, 0.7378, 0.1797, 0.9820, 0.6625, 0.4127, 0.0993, 0.9807, 0.1656, 0.3651, 0.1269, 0.8801, 0.6876, 0.7738, 0.2109, 0.3691, 0.9957, 0.8463, 0.9487, 0.3303, 0.1955, 0.5798, 0.2975, 0.6629, 0.1604, 0.8322, 0.7402, 0.3561, 0.6058, 0.2693, 0.5123, 0.2033, 0.5035, 0.1888, 0.6441, 0.8200, 0.8072, 0.9093, 0.9114, 0.9387, 0.1675, 0.6192, 0.2982, 0.5941, 0.1339, 0.4931, 0.1459, 0.2087, 0.9620, 0.5485, 0.6626, 0.1486, 0.8235, 0.9847, 0.4395, 0.2989, 0.5061, 0.6931, 0.0294, 0.7858, 0.3858, 0.7218, 0.4198, 0.3823, 0.7427, 0.5167, 0.9343, 0.0310, 0.1367, 0.3636, 0.0250, 0.3427, 0.3692, 0.1642, 0.7088, 0.5965, 0.9435, 0.4234, 0.4983, 0.8910, 0.4349, 0.6084, 0.5739, 0.8520, 0.7308, 0.2830, 0.7831, 0.2720, 0.5831, 0.0742, 0.2327, 0.4243, 0.4544, 0.9464, 0.4427, 0.0529, 0.2840, 0.1574, 0.4531, 0.9882, 0.6300, 0.7683, 0.2379, 0.4069, 0.3247, 0.3205, 0.3126, 0.1511, 0.1913, 0.9902 1.0000 0.9507 0.9582 0.9954 -0.1099 -0.3234 -0.5575 -0.0238 0.9740 -0.2808 0.9811 -0.4006 -0.2506 0.9631 0.9966 -0.7934 -0.0051 -0.0499 0.9982 -0.0220 -0.2335 -0.2818 -0.0346 0.9687 -0.5597 0.9865 -0.3910 0.9938 0.9633 -0.2495 0.9829 -0.3713 0.9755 -0.5714 -0.2080 0.9541 -0.1640 0.9857 -0.0380 0.9999 -0.2120 0.9950 0.9251 -0.3551 -0.0427 -0.2554 -0.1429 -0.4126 0.9624 0.9999 0.9610 -0.1408 0.9973 -0.1594 0.9987 0.9991 -0.1448 -0.1048 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 495 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.8975, 0.8505, 0.0526, 0.1084, 0.1502, 0.2670, 0.8225, 0.2870, 0.0321, 0.6565, 0.5753, 0.4973, 0.7428, 0.2304, 0.4199, 0.9172, 0.7643, 0.0158, 0.4530, 0.1290, 0.0081, 0.0775, 0.2453, 0.5941, 0.8728, 0.4401, 0.7329, 0.9256, 0.9399, 0.4568, 0.6483, 0.9048, 0.6198, 0.5871, 0.6419, 0.3703, 0.7761, 0.2592, 0.9506, 0.7186, 0.0386, 0.2803, 0.7964, 0.7739, 0.4528, 0.7642, 0.4642, 0.4984, 0.3138, 0.6258, 0.8486, 0.5625, 0.3371, 0.2043, 0.3867, 0.4733, 0.4981, 0.6200, 0.0650, 0.0960, 0.6785, 0.3033, 0.1022, 0.6903, 0.7808, 0.0682, 0.6275, 0.1772, 0.4605, 0.7579, 0.0890, 0.0252, 0.9390, 0.5175, 0.4852, 0.3189, 0.3333, 0.1202, 0.1479, 0.5232, 0.0890, 0.9615, 0.9147, 0.4794, 0.8242, 0.6805, 0.2487, 0.0745, 0.4766, 0.6734, 0.2948, 0.2823, 0.2694, 0.4548, 0.6124, 0.9584, 0.9433, 0.6797, 0.4990, 0.2222, 0.7201, 0.9146, 0.8046, 0.7788, 0.6605, 0.1779, 0.6656, 0.4595, 0.1671, 0.4320, 0.5037, 0.7310, 0.6358, 0.6343, 0.5725, 0.1382, 0.6277, 0.1639, -0.0861 -0.5456 0.9997 -0.0111 0.9869 0.9626 -0.0560 0.9810 1.0000 -0.2978 0.9780 -0.0442 -0.0187 0.9472 0.9966 -0.4305 -0.2413 0.9999 -0.0544 1.0000 1.0000 1.0000 0.9389 0.9283 -0.4063 0.9434 -0.4783 -0.2281 -0.0699 0.9998 0.9995 -0.2635 -0.1741 -0.1575 -0.2878 0.9840 0.9602 0.9378 -0.6021 -0.3510 0.9999 0.9698 0.9823 0.9989 0.9567 -0.4836 -0.0825 0.9861 0.9958 -0.1044 -0.3585 -0.2796 0.9649 0.9845 0.9817 0.9956 -0.0688 1.0000 0.9999 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 496 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.7234, 0.7481, 0.2169, 0.6759, 0.9965, 0.7576, 0.1973, 0.9203, 0.7023, 0.3538, 0.9740, 0.5465, 0.7876, 0.6176, 0.3125, 0.0800, 0.4042, 0.5200, 0.3079, 0.4382, 0.0435, 0.7052, 0.4427, 0.0248, 0.9488, 0.7157, 0.3340, 0.2059, -0.2241 -0.0598 0.9967 -0.3443 -0.3020 -0.3259 -0.0086 -0.6044 -0.3059 -0.0088 -0.7981 0.9829 -0.2600 -0.1268 Archivo de ejemplos aNumbers.txt # An example for a Hopfield Network for JCortex # The structure can be: # -> "float[]" for a float array, # -> "Object[]" for an Object array. @structure float[] @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input N11 N12 N13 N14 N15 N16 N17 N18 N19 N11 N11 N12 N13 N14 N15 N16 N17 N18 N19 N21 N21 N22 N23 N24 float float float float float float float float float float float float float float float float float float float float float float float float @output NUM float @data -1,-1,1,-1,-1,1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,1,1,1,1 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 497 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ -1,1,1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,1,-1,-1,1,-1,-1,1,1,1,1,2 -1,1,1,-1,1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,1,-1,1,1,-1,1,1,-1,3 -1,-1,1,-1,-1,1,1,-1,1,-1,1,-1,1,1,1,1,-1,-1,1,-1,-1,-1,1,-1,4 1,1,1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,5 -1,1,1,-1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,6 1,1,1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,-1,7 -1,1,1,-1,1,-1,-1,1,-1,1,1,-1,1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,8 -1,1,1,-1,1,-1,-1,1,1,-1,-1,1,-1,1,1,1,-1,-1,-1,1,-1,-1,1,-1,9 -1,1,1,-1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,-1 Archivo de ejemplos aPromoters.txt # Conjunto de ejemplos para JCortex # Nombre Original: Promotor Gene Sequences # http://www.ics.uci.edu/~mlearn/databases/molecular-biology/promoter-gene-sequences/ @structure float[] @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input float float float float float float float float float float float float float float float float float float float float float float float float float float float float float float float float float G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12 G13 G14 G15 G16 G17 G18 G19 G20 G21 G22 G23 G24 G25 G26 G27 G28 G29 G30 G31 G32 G33 Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 498 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input @input G34 G35 G36 G37 G38 G39 G40 G41 G42 G43 G44 G45 G46 G47 G48 G49 G50 G51 G52 G53 G54 G55 G56 G57 float float float float float float float float float float float float float float float float float float float float float float float float @output promoter @data 1.00, 1.00, 1.00, 0.66, 1.00, 1.00, 1.00, 0.66, 0.33, 0.00, 0.66, 0.66, 1.00, 0.66, 0.66, 0.00, 1.00, 0.66, 0.00, 0.33, 1.00, 1.00, 0.00, 0.66, 0.66, 0.00, 1.00, 0.33, 0.00, 1.00, 0.00, 1.00, 0.00, 0.33, 1 0.66, 1.00, 0.66, 1.00, 1 1.00, 1.00, 1.00, 0.33, 1 0.00, 0.33, 0.66, 0.00, 1 0.33, 1.00, 0.00, 0.33, 1 0.66, 0.66, 0.66, 0.66, 1 float 0.33, 0.66, 0.00, 0.66, 1.00, 0.33, 0.66, 0.33, 0.00, 0.66, 1.00, 0.66, 0.66, 1.00, 0.00, 0.66, 0.33, 1.00, 1.00, 0.66, 0.00, 0.33, 0.66, 0.33, 0.00, 0.66, 1.00, 1.00, 1.00, 0.66, 0.00, 1.00, 0.00, 1.00, 1.00, 0.66, 0.33, 0.66, 0.00, 1.00, 0.66, 0.66, 0.00, 0.33, 0.33, 1.00, 1.00, 0.66, 0.33, 0.66, 1.00, 0.00, 1.00, 1.00, 0.66, 0.00, 0.00, 0.33, 1.00, 0.33, 1.00, 0.00, 0.33, 0.66, 0.33, 0.33, 0.66, 0.33, 0.33, 0.66, 1.00, 0.00, 1.00, 0.33, 1.00, 1.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.66, 0.33, 0.66, 0.33, 0.00, 0.00, 0.33, 0.00, 1.00, 0.00, 0.33, 0.66, 1.00, 1.00, 0.00, 0.00, 0.66, 1.00, 1.00, 0.33, 0.33, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.33, 0.66, 1.00, 0.66, 0.33, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 1.00, 0.33, 0.00, 0.33, 0.00, 0.33, 0.00, 1.00, 1.00, 0.33, 0.33, 1.00, 0.33, 0.66, 1.00, 0.00, 0.00, 0.66, 0.00, 1.00, 1.00, 0.33, 1.00, 0.66, 0.00, 1.00, 1.00, 0.00, 0.66, 0.00, 0.66, 0.00, 1.00, 0.33, 1.00, 0.66, 0.00, 1.00, 0.66, 1.00, 0.66, 0.00, 0.00, 0.66, 0.00, 0.00, 1.00, 1.00, 1.00, 0.33, 0.66, 0.66, 0.66, 0.00, 1.00, 1.00, 1.00, 0.00, 0.66, 1.00, 1.00, 0.00, 1.00, 0.66, 0.00, 0.33, 0.00, 0.33, 0.66, 1.00, 0.66, 0.66, 0.00, 0.66, 0.00, 0.00, 0.00, 0.33, 1.00, 0.33, 0.33, 0.33, 0.00, 0.66, 0.33, 1.00, 0.00, 0.00, 0.00, 0.33, 1.00, 0.00, 0.33, 0.33, 1.00, 0.00, 1.00, 0.66, 0.00, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 0.66, 0.33, 0.33, 0.00, 0.66, 1.00, 1.00, 0.00, 1.00, 0.00, 0.66, 1.00, 0.00, 0.66, 0.66, 1.00, 0.00, 0.66, 0.00, 0.00, 0.66, 0.66, 0.00, 1.00, 1.00, 0.33, 0.00, 0.00, 0.33, 0.00, 0.66, 0.00, 0.33, 0.00, 0.00, 0.00, 0.66, 0.66, 0.66, 0.66, 1.00, 0.66, 0.66, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.66, 1.00, 0.00, 0.00, 0.66, 0.66, 0.33, 0.66, 0.00, 0.33, 1.00, 0.66, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 499 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.33, 1.00, 1.00, 0.33, 1.00, 1.00, 1.00, 0.66, 1.00, 0.00, 0.33, 0.66, 0.66, 0.66, 1.00, 1.00, 1.00, 1.00, 0.66, 0.00, 0.66, 1.00, 0.66, 0.66, 0.66, 0.33, 1.00, 0.66, 0.00, 0.33, 0.66, 1.00, 0.66, 0.66, 0.00, 0.33, 1.00, 0.66, 0.66, 0.00, 1.00, 1.00, 1.00, 0.66, 0.00, 0.00, 1.00, 0.66, 0.66, 0.33, 0.00, 1.00, 0.33, 0.66, 0.00, 0.00, 1.00, 0.66, 0.00, 0.00, 1.00, 0.66, 0.00, 1 1.00, 1.00, 0.33, 0.66, 1 0.66, 0.33, 1.00, 0.33, 1 1.00, 1.00, 0.00, 0.33, 1 0.33, 1.00, 0.66, 0.33, 1 0.33, 1.00, 0.66, 0.33, 1 0.00, 1.00, 0.66, 0.33, 1 1.00, 1.00, 0.00, 0.33, 1 1.00, 1.00, 0.00, 0.33, 1 0.00, 1.00, 0.66, 0.33, 1 1.00, 1.00, 0.66, 0.33, 1 0.00, 0.00, 0.00, 0.66, 0.66, 1.00, 0.00, 0.66, 0.66, 0.00, 1.00, 0.33, 0.66, 0.00, 0.66, 0.33, 0.66, 0.66, 0.00, 0.33, 0.66, 0.33, 0.33, 0.00, 1.00, 0.33, 0.66, 1.00, 0.66, 0.00, 0.33, 0.33, 0.66, 1.00, 0.00, 0.00, 0.00, 0.33, 1.00, 1.00, 0.66, 1.00, 0.00, 0.66, 0.66, 0.33, 0.66, 0.00, 0.00, 0.33, 1.00, 0.00, 1.00, 0.66, 0.00, 0.33, 0.33, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.33, 0.33, 0.33, 0.33, 0.00, 0.00, 0.00, 1.00, 0.66, 0.00, 0.00, 0.66, 1.00, 0.33, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.66, 0.33, 1.00, 0.00, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 0.00, 1.00, 0.33, 0.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.33, 0.00, 1.00, 0.33, 1.00, 1.00, 1.00, 0.00, 0.66, 0.66, 0.00, 0.66, 1.00, 0.00, 0.00, 0.66, 0.66, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.33, 0.00, 1.00, 1.00, 0.66, 0.00, 0.66, 0.00, 1.00, 0.00, 0.66, 0.33, 0.33, 1.00, 1.00, 1.00, 0.33, 0.33, 1.00, 1.00, 0.66, 0.00, 0.66, 1.00, 1.00, 0.33, 0.33, 0.00, 0.33, 1.00, 0.33, 0.00, 0.00, 0.33, 0.00, 0.00, 0.66, 0.33, 0.33, 1.00, 0.66, 0.33, 0.33, 1.00, 0.33, 1.00, 0.00, 1.00, 0.33, 0.00, 0.33, 0.33, 0.66, 1.00, 1.00, 0.33, 0.66, 0.00, 0.66, 1.00, 0.00, 0.00, 0.00, 0.33, 0.00, 1.00, 0.33, 0.00, 0.66, 0.00, 0.00, 0.00, 0.00, 0.00, 0.33, 0.00, 0.33, 0.66, 0.00, 0.00, 1.00, 0.66, 0.33, 0.00, 0.33, 0.33, 0.33, 1.00, 1.00, 0.66, 0.33, 0.00, 0.66, 1.00, 0.33, 0.00, 1.00, 0.00, 0.66, 0.00, 0.00, 1.00, 0.33, 1.00, 0.66, 1.00, 0.66, 0.66, 0.33, 0.00, 0.33, 0.33, 0.66, 1.00, 0.33, 1.00, 0.66, 0.00, 0.66, 0.66, 0.00, 0.00, 0.33, 0.00, 0.33, 0.00, 0.33, 0.00, 1.00, 0.66, 0.00, 0.00, 0.33, 0.33, 0.33, 1.00, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 1.00, 0.33, 0.00, 0.00, 0.33, 0.00, 0.00, 0.00, 0.66, 0.66, 0.00, 1.00, 0.33, 0.66, 0.66, 0.00, 0.66, 0.66, 0.00, 1.00, 0.00, 1.00, 0.66, 0.66, 0.66, 0.33, 1.00, 0.00, 0.33, 0.00, 0.66, 1.00, 0.33, 0.00, 0.33, 0.33, 1.00, 0.00, 0.00, 0.33, 0.33, 0.00, 0.00, 0.33, 0.33, 0.00, 0.00, 1.00, 0.66, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.66, 0.00, 1.00, 0.00, 0.00, 0.33, 1.00, 1.00, 0.66, 0.66, 0.66, 0.00, 0.66, 0.33, 0.33, 0.33, 0.33, 0.00, 0.66, 1.00, 0.33, 0.00, 0.66, 0.33, 1.00, 1.00, 0.33, 0.33, 0.33, 1.00, 0.33, 0.33, 0.33, 1.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.00, 1.00, 1.00, 0.33, 1.00, 0.33, 0.33, 0.66, 0.00, 0.66, 1.00, 0.66, 0.00, 0.00, 0.00, 0.00, 1.00, 0.33, 1.00, 0.66, 0.00, 0.66, 0.00, 1.00, 0.33, 0.33, 1.00, 0.33, 1.00, 0.33, 0.00, 0.00, 0.33, 0.00, 1.00, 0.66, 0.33, 0.33, 1.00, 0.66, 0.33, 0.33, 1.00, 0.33, 1.00, 0.00, 1.00, 0.33, 0.00, 0.33, 1.00, 0.66, 1.00, 1.00, 0.33, 0.66, 0.00, 0.66, 0.66, 0.00, 0.00, 0.00, 0.33, 0.00, 1.00, 0.33, 0.66, 0.66, 0.00, 0.00, 0.33, 0.00, 0.00, 0.33, 0.00, 0.33, 0.66, 0.00, 0.00, 1.00, 0.66, 0.33, 0.00, 0.33, 0.33, 0.33, 0.66, 1.00, 0.66, 0.66, 0.00, 0.66, 1.00, 0.33, 0.00, 1.00, 0.00, 0.33, 0.00, 0.00, 1.00, 0.66, 1.00, 0.66, 1.00, 0.33, 0.66, 0.33, 0.00, 0.66, 0.33, 0.66, 1.00, 0.33, 0.66, 0.66, 0.00, 0.66, 0.33, 1.00, 0.33, 0.33, 0.00, 0.33, 1.00, 0.33, 1.00, 1.00, 0.33, 1.00, 1.00, 1.00, 0.33, 0.33, 1.00, 0.33, 0.33, 0.33, 1.00, 0.33, 1.00, 0.00, 1.00, 1.00, 0.00, 1.00, 0.33, 0.66, 1.00, 0.33, 0.33, 0.00, 0.00, 0.66, 0.66, 0.66, 0.00, 0.00, 0.33, 0.33, 1.00, 0.33, 0.00, 0.66, 0.66, 0.33, 0.33, 0.00, 1.00, 0.33, 0.00, 0.33, 0.66, 1.00, 0.00, 0.00, 1.00, 0.33, 1.00, 0.00, 0.00, 0.66, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.33, 0.00, 0.00, 1.00, 0.00, 0.33, 0.00, 0.33, 0.66, 1.00, 1.00, 1.00, 0.00, 0.33, 0.66, 1.00, 0.00, 1.00, 1.00, 0.66, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 500 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.33, 1.00, 1.00, 1.00, 0.66, 0.66, 0.66, 1.00, 0.66, 1.00, 1.00, 0.66, 0.66, 0.66, 1.00, 0.66, 0.00, 1.00, 1.00, 1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.66, 0.33, 1.00, 0.33, 0.00, 1.00, 1.00, 0.00, 0.66, 1.00, 1.00, 0.66, 1.00, 0.33, 0.33, 1.00, 0.33, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.66, 0.00, 1.00, 0.33, 1.00, 0.66, 1.00, 1.00, 1.00, 1 0.33, 1.00, 0.33, 0.33, 1 0.33, 0.66, 1.00, 1.00, 1 0.00, 0.33, 0.33, 0.00, 1 0.00, 1.00, 1.00, 0.00, 1 0.33, 1.00, 0.33, 0.00, 1 0.33, 1.00, 0.66, 0.00, 1 0.00, 1.00, 0.00, 0.00, 1 1.00, 1.00, 0.00, 1.00, 1 0.00, 0.33, 0.66, 0.66, 1 0.33, 1.00, 0.00, 1.00, 1 0.33, 1.00, 0.00, 1.00, 1 0.66, 1.00, 1.00, 1.00, 1.00, 0.00, 0.66, 0.33, 0.00, 1.00, 0.33, 0.00, 0.33, 1.00, 0.33, 0.00, 0.00, 1.00, 0.33, 0.33, 0.66, 0.66, 0.33, 0.66, 0.33, 0.00, 0.66, 1.00, 0.66, 1.00, 0.33, 0.00, 0.66, 0.00, 1.00, 0.00, 0.33, 1.00, 1.00, 0.33, 0.66, 0.66, 0.33, 0.00, 0.33, 0.00, 0.33, 0.33, 0.66, 1.00, 0.33, 0.00, 0.66, 0.66, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.33, 1.00, 0.66, 1.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 1.00, 0.00, 1.00, 1.00, 0.00, 0.33, 0.33, 0.33, 0.66, 0.66, 0.00, 1.00, 0.00, 0.33, 0.00, 0.66, 0.33, 0.66, 1.00, 0.33, 0.00, 1.00, 0.66, 0.33, 0.33, 1.00, 0.33, 0.66, 0.66, 0.66, 0.00, 0.33, 0.66, 0.33, 0.33, 0.00, 1.00, 0.66, 0.33, 0.00, 0.00, 0.33, 0.00, 0.00, 1.00, 0.33, 1.00, 0.00, 0.66, 0.33, 0.33, 0.33, 0.66, 0.66, 0.66, 0.33, 0.33, 0.66, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, 1.00, 1.00, 0.66, 0.66, 0.66, 0.33, 0.00, 0.00, 0.00, 0.66, 1.00, 1.00, 0.00, 0.33, 0.33, 0.00, 0.00, 0.00, 1.00, 0.00, 0.33, 1.00, 0.66, 0.33, 0.66, 1.00, 0.66, 0.33, 1.00, 0.00, 0.33, 0.00, 0.33, 0.66, 0.33, 1.00, 0.00, 0.00, 0.66, 1.00, 1.00, 0.00, 0.00, 0.00, 0.33, 0.00, 0.33, 0.00, 0.66, 0.66, 0.33, 1.00, 0.33, 0.66, 1.00, 1.00, 1.00, 0.66, 0.66, 0.66, 0.66, 0.00, 0.00, 1.00, 0.00, 0.33, 0.00, 0.00, 0.00, 0.00, 0.33, 0.33, 0.00, 0.00, 1.00, 0.66, 1.00, 1.00, 0.00, 0.33, 0.66, 1.00, 0.66, 0.00, 0.00, 0.00, 1.00, 0.00, 0.66, 0.00, 1.00, 0.66, 0.33, 1.00, 0.00, 1.00, 1.00, 0.33, 0.00, 1.00, 0.66, 0.00, 0.33, 0.33, 0.33, 0.66, 1.00, 0.00, 0.66, 0.00, 1.00, 0.00, 0.66, 0.33, 1.00, 0.66, 0.00, 0.00, 0.66, 0.66, 0.00, 1.00, 1.00, 0.33, 0.66, 1.00, 1.00, 0.66, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.33, 0.33, 0.00, 0.00, 0.00, 0.66, 0.00, 0.00, 0.00, 0.33, 0.33, 0.33, 0.66, 0.33, 0.33, 0.00, 0.66, 0.66, 0.00, 0.66, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.33, 0.66, 0.00, 0.00, 1.00, 0.66, 0.00, 0.66, 1.00, 0.33, 1.00, 0.66, 1.00, 0.00, 1.00, 1.00, 0.00, 1.00, 1.00, 0.33, 0.00, 0.00, 1.00, 0.00, 0.33, 0.66, 0.00, 0.33, 0.33, 0.33, 0.66, 0.66, 0.00, 0.00, 1.00, 1.00, 0.00, 0.33, 0.33, 0.00, 0.00, 0.00, 0.00, 0.00, 0.66, 0.00, 1.00, 0.00, 0.00, 0.66, 0.00, 0.33, 1.00, 1.00, 0.00, 0.33, 1.00, 0.33, 1.00, 0.00, 1.00, 1.00, 0.33, 0.00, 0.00, 0.00, 0.66, 0.00, 0.66, 0.33, 0.00, 1.00, 0.66, 0.00, 0.33, 1.00, 1.00, 0.33, 1.00, 0.66, 0.33, 0.66, 0.33, 0.00, 1.00, 0.33, 0.33, 0.33, 1.00, 0.66, 1.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.00, 0.33, 0.66, 0.33, 0.33, 0.00, 0.33, 0.66, 0.66, 0.00, 0.00, 0.66, 1.00, 1.00, 0.33, 1.00, 0.00, 1.00, 0.33, 1.00, 1.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.66, 0.00, 0.66, 1.00, 0.33, 0.66, 0.33, 0.00, 0.00, 0.66, 0.66, 0.33, 0.66, 0.33, 0.00, 0.00, 1.00, 0.00, 0.33, 1.00, 0.00, 1.00, 0.66, 0.00, 1.00, 0.00, 0.00, 0.33, 0.00, 0.00, 0.66, 0.33, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.66, 1.00, 0.00, 0.00, 0.33, 1.00, 0.00, 0.00, 0.33, 0.66, 0.66, 0.00, 0.33, 0.00, 0.33, 1.00, 0.00, 0.66, 0.33, 0.66, 0.66, 1.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.66, 0.00, 0.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.00, 0.00, 0.33, 0.66, 1.00, 0.33, 0.33, 0.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.33, 0.33, 0.00, 0.66, 0.66, 1.00, 0.00, 0.00, 0.00, 0.00, 0.33, 0.66, 0.66, 1.00, 0.66, 0.33, 0.00, 0.66, 1.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.66, 0.33, 0.33, 0.00, 0.00, 0.00, 0.00, 1.00, 0.33, 0.66, 0.33, 0.33, 1.00, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.33, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 501 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 1.00, 1.00, 0.33, 1.00, 0.00, 1.00, 0.66, 0.00, 1.00, 0.00, 1.00, 1.00, 0.00, 0.66, 0.33, 1.00, 0.66, 1.00, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 0.00, 1.00, 1.00, 0.33, 1.00, 0.33, 1.00, 0.33, 1.00, 1.00, 0.66, 1.00, 0.00, 0.33, 1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.66, 1.00, 0.00, 0.66, 1.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.33, 1 1.00, 1.00, 0.33, 0.33, 1 1.00, 1.00, 0.00, 1.00, 1 1.00, 1.00, 0.00, 0.66, 1 0.00, 1.00, 0.66, 0.00, 1 1.00, 1.00, 1.00, 0.66, 1 0.33, 1.00, 1.00, 0.66, 1 0.33, 1.00, 0.33, 1.00, 1 0.33, 0.00, 0.00, 0.66, 1 1.00, 1.00, 0.66, 0.00, 1 0.66, 1.00, 0.00, 0.33, 1 0.00, 0.00, 0.00, 1.00, 1 0.00, 1.00, 0.00, 0.33, 0.00, 0.66, 0.33, 0.00, 1.00, 0.00, 0.00, 0.33, 1.00, 0.66, 0.66, 0.66, 0.33, 0.33, 1.00, 0.00, 0.33, 0.33, 1.00, 0.66, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 1.00, 1.00, 0.33, 0.33, 1.00, 0.66, 0.00, 1.00, 0.33, 1.00, 1.00, 1.00, 0.00, 0.66, 1.00, 0.00, 0.66, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 0.00, 1.00, 1.00, 0.66, 0.33, 1.00, 0.00, 0.00, 0.66, 1.00, 1.00, 0.00, 0.00, 0.00, 0.33, 0.00, 0.66, 0.33, 1.00, 0.00, 1.00, 0.00, 0.66, 0.00, 0.33, 0.00, 0.00, 0.66, 0.66, 0.00, 0.00, 0.00, 0.33, 0.00, 0.33, 0.66, 0.66, 0.00, 1.00, 1.00, 1.00, 0.66, 0.66, 0.00, 0.00, 1.00, 0.00, 0.00, 0.66, 0.66, 0.00, 0.00, 0.66, 0.33, 0.33, 0.66, 0.66, 0.66, 0.66, 0.00, 0.33, 0.33, 0.00, 0.00, 0.66, 0.66, 0.33, 0.33, 0.33, 0.33, 0.00, 0.33, 0.66, 0.00, 0.00, 0.33, 0.33, 0.00, 0.66, 1.00, 0.33, 0.33, 0.66, 0.33, 0.66, 0.66, 0.66, 1.00, 0.00, 0.33, 0.33, 0.00, 0.00, 0.66, 0.66, 1.00, 0.66, 0.66, 0.33, 0.00, 0.33, 0.66, 0.66, 0.33, 1.00, 0.00, 0.66, 0.33, 0.33, 0.00, 1.00, 1.00, 0.66, 0.00, 0.33, 1.00, 0.33, 0.00, 0.00, 0.00, 0.33, 0.00, 0.66, 1.00, 0.66, 0.33, 0.33, 0.00, 1.00, 1.00, 0.33, 0.00, 1.00, 0.00, 1.00, 0.66, 0.00, 0.00, 0.66, 0.00, 1.00, 0.33, 1.00, 1.00, 0.00, 0.00, 0.33, 0.33, 0.33, 0.66, 0.33, 0.00, 0.66, 0.66, 0.66, 0.66, 0.33, 0.33, 0.33, 1.00, 0.66, 0.00, 0.00, 0.33, 0.33, 0.00, 1.00, 1.00, 0.66, 1.00, 0.66, 0.33, 0.33, 1.00, 0.00, 0.33, 1.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.33, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 1.00, 0.33, 0.66, 1.00, 0.00, 0.66, 0.00, 0.66, 0.66, 0.33, 0.00, 0.00, 1.00, 0.66, 0.33, 0.33, 1.00, 0.00, 1.00, 0.66, 0.66, 0.33, 0.00, 0.33, 0.00, 0.66, 1.00, 0.33, 0.00, 0.33, 0.00, 0.33, 0.00, 1.00, 0.33, 0.33, 0.00, 0.66, 0.66, 0.66, 0.00, 0.33, 0.33, 0.33, 0.66, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 0.00, 0.33, 0.66, 0.66, 0.00, 0.66, 0.66, 0.66, 0.00, 0.33, 1.00, 0.00, 1.00, 0.66, 1.00, 0.33, 0.33, 0.66, 0.66, 0.00, 0.66, 0.33, 1.00, 0.33, 0.33, 0.66, 0.00, 0.33, 0.33, 1.00, 1.00, 1.00, 0.33, 0.33, 0.00, 1.00, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 1.00, 1.00, 0.00, 0.33, 1.00, 0.33, 0.00, 0.00, 0.33, 0.66, 0.00, 1.00, 0.66, 0.33, 0.66, 0.33, 1.00, 0.33, 0.33, 0.33, 1.00, 0.33, 0.66, 0.66, 1.00, 0.00, 0.66, 0.33, 0.00, 1.00, 1.00, 0.66, 1.00, 0.00, 0.66, 0.33, 1.00, 1.00, 1.00, 0.33, 1.00, 0.33, 1.00, 0.33, 1.00, 0.33, 0.00, 1.00, 1.00, 1.00, 1.00, 0.33, 1.00, 1.00, 0.00, 0.66, 0.33, 0.66, 0.00, 0.00, 0.33, 0.66, 0.00, 0.66, 0.66, 0.33, 0.66, 0.33, 0.33, 0.00, 0.33, 0.33, 0.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.66, 0.66, 0.00, 0.66, 0.66, 0.33, 1.00, 1.00, 0.33, 0.33, 1.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.00, 0.00, 1.00, 0.66, 0.66, 1.00, 1.00, 0.66, 0.00, 0.33, 0.33, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.33, 1.00, 0.00, 0.00, 0.66, 1.00, 0.33, 0.33, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.33, 0.00, 0.66, 0.33, 0.33, 0.00, 0.66, 1.00, 0.33, 1.00, 0.33, 0.00, 0.00, 0.66, 0.66, 0.33, 0.33, 0.33, 0.66, 0.00, 0.66, 0.33, 1.00, 0.00, 1.00, 1.00, 1.00, 0.00, 0.33, 0.33, 0.00, 0.00, 0.33, 0.66, 0.33, 1.00, 0.33, 0.33, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.66, 0.33, 0.00, 0.00, 0.33, 0.66, 1.00, 0.33, 0.33, 0.00, 1.00, 0.33, 0.00, 1.00, 1.00, 0.33, 1.00, 0.33, 0.66, 0.00, 1.00, 1.00, 0.00, 0.33, 0.33, 0.66, 0.66, 0.66, 1.00, 0.33, 0.66, 0.33, 0.00, 1.00, 0.00, 0.33, 0.66, 0.66, 1.00, 0.00, 1.00, 1.00, 0.00, 0.33, 0.33, 1.00, 1.00, 0.33, 0.33, 0.33, 0.00, 0.66, 1.00, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 502 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.33, 1.00, 0.33, 1.00, 0.33, 0.33, 0.66, 0.66, 0.66, 0.66, 1.00, 0.33, 1.00, 0.33, 1.00, 0.33, 0.00, 1.00, 0.33, 0.00, 0.66, 0.33, 1.00, 0.00, 1.00, 0.66, 1.00, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 0.66, 1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.66, 0.33, 1.00, 0.00, 0.33, 1.00, 1.00, 0.33, 1.00, 0.66, 0.66, 1.00, 0.66, 1.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1 1.00, 1.00, 0.66, 1.00, 1 0.33, 1.00, 0.00, 1.00, 1 0.00, 0.33, 0.66, 1.00, 1 0.00, 1.00, 0.33, 1.00, 1 1.00, 1.00, 0.00, 1.00, 1 0.00, 1.00, 0.66, 1.00, 1 0.66, 1.00, 0.00, 0.33, 1 0.00, 1.00, 1.00, 1.00, 1 0.33, 1.00, 0.00, 1.00, 1 0.66, 1.00, 0.00, 1.00, 1 0.33, 1.00, 1.00, 1.00, 1 1.00, 0.00, 0.66, 0.00, 0.00, 0.00, 0.00, 0.33, 1.00, 1.00, 0.00, 1.00, 0.33, 0.00, 1.00, 1.00, 0.33, 0.33, 0.33, 0.00, 0.33, 1.00, 1.00, 1.00, 1.00, 0.00, 0.66, 0.33, 1.00, 0.66, 0.00, 0.00, 1.00, 0.33, 0.33, 0.00, 0.33, 0.66, 0.66, 0.33, 1.00, 0.66, 0.33, 1.00, 0.33, 0.00, 1.00, 0.33, 0.33, 1.00, 1.00, 1.00, 0.00, 0.33, 1.00, 0.33, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 1.00, 0.00, 0.33, 0.00, 0.00, 0.33, 0.33, 0.33, 1.00, 1.00, 0.33, 0.33, 0.66, 0.00, 1.00, 1.00, 1.00, 1.00, 0.66, 1.00, 1.00, 1.00, 1.00, 0.33, 1.00, 0.33, 0.00, 1.00, 1.00, 0.66, 0.00, 0.33, 1.00, 0.66, 0.00, 0.33, 1.00, 1.00, 0.33, 0.00, 0.66, 0.66, 0.33, 0.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.66, 0.66, 0.00, 0.33, 1.00, 0.00, 0.00, 0.66, 0.66, 1.00, 1.00, 0.00, 0.00, 0.33, 0.33, 0.00, 0.00, 1.00, 1.00, 0.00, 0.33, 1.00, 0.00, 0.33, 0.00, 0.66, 0.00, 0.66, 1.00, 1.00, 0.33, 1.00, 0.33, 0.66, 0.00, 1.00, 0.66, 1.00, 1.00, 1.00, 0.00, 1.00, 0.00, 1.00, 1.00, 0.00, 0.33, 0.00, 0.33, 0.66, 0.66, 1.00, 1.00, 0.00, 0.66, 0.33, 0.66, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.33, 0.33, 0.66, 0.00, 0.00, 1.00, 0.66, 1.00, 0.33, 1.00, 1.00, 1.00, 0.00, 1.00, 1.00, 1.00, 0.33, 0.66, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.33, 1.00, 1.00, 0.33, 0.33, 0.33, 0.66, 0.00, 0.00, 0.66, 0.00, 0.00, 1.00, 0.33, 0.00, 0.00, 0.00, 1.00, 0.66, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.66, 0.66, 0.00, 0.33, 0.66, 0.00, 0.00, 1.00, 1.00, 0.33, 0.00, 0.00, 1.00, 0.00, 0.66, 0.00, 1.00, 1.00, 1.00, 0.33, 0.00, 0.33, 1.00, 0.66, 0.66, 0.00, 0.33, 1.00, 0.66, 0.66, 0.00, 0.66, 0.00, 0.00, 0.66, 0.33, 1.00, 0.66, 0.66, 0.33, 1.00, 1.00, 1.00, 1.00, 0.00, 0.33, 0.00, 1.00, 0.00, 0.66, 0.66, 0.66, 1.00, 0.33, 0.00, 1.00, 0.66, 0.00, 0.00, 0.33, 0.66, 1.00, 1.00, 0.66, 0.33, 0.33, 0.66, 0.66, 0.00, 0.66, 0.33, 0.33, 0.33, 0.66, 1.00, 0.33, 0.66, 0.00, 0.33, 0.66, 0.00, 1.00, 0.33, 1.00, 0.33, 1.00, 0.00, 0.00, 0.33, 1.00, 0.00, 0.33, 1.00, 0.00, 0.00, 1.00, 0.00, 0.66, 0.00, 0.00, 1.00, 0.66, 0.00, 1.00, 0.66, 0.33, 0.00, 1.00, 0.66, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.33, 0.00, 0.33, 0.33, 0.00, 0.33, 0.33, 0.66, 1.00, 0.33, 0.66, 0.66, 0.00, 0.33, 1.00, 0.33, 0.33, 0.66, 0.66, 0.00, 0.00, 0.66, 1.00, 0.33, 0.33, 0.33, 0.66, 0.33, 1.00, 1.00, 0.66, 0.33, 1.00, 0.33, 0.00, 0.33, 1.00, 0.66, 0.00, 0.00, 0.00, 1.00, 1.00, 0.66, 1.00, 0.00, 1.00, 0.66, 0.66, 1.00, 0.66, 0.33, 0.33, 0.66, 1.00, 0.00, 0.33, 0.33, 1.00, 1.00, 1.00, 1.00, 0.66, 0.33, 0.33, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 1.00, 0.33, 0.00, 0.00, 0.66, 0.66, 0.00, 1.00, 1.00, 0.33, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 1.00, 0.33, 0.00, 0.00, 0.00, 0.00, 0.66, 0.66, 1.00, 0.00, 0.66, 0.00, 0.66, 0.33, 0.66, 1.00, 0.00, 1.00, 0.00, 0.33, 1.00, 0.33, 0.33, 0.33, 0.00, 1.00, 0.66, 0.66, 1.00, 1.00, 1.00, 0.33, 0.66, 1.00, 0.33, 0.00, 0.33, 0.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.66, 0.00, 0.33, 1.00, 1.00, 1.00, 0.66, 0.00, 1.00, 0.33, 0.00, 0.00, 0.66, 1.00, 1.00, 0.66, 0.00, 1.00, 1.00, 0.00, 1.00, 0.00, 0.66, 0.00, 0.66, 1.00, 1.00, 0.00, 0.00, 0.33, 1.00, 1.00, 0.00, 0.33, 0.66, 0.00, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.00, 0.00, 1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.66, 1.00, 0.00, 0.00, 0.00, 1.00, 0.66, 0.00, 0.00, 0.33, 0.66, 1.00, 1.00, 0.66, 0.00, 0.66, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 503 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.00, 0.00, 0.00, 0.00, 0.33, 0.00, 0.33, 0.00, 0.33, 0.33, 0.33, 1.00, 0.66, 0.66, 1.00, 0.33, 1.00, 1.00, 1.00, 0.33, 0.33, 0.66, 0.33, 0.66, 0.66, 0.00, 1.00, 0.33, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.66, 1.00, 1.00, 1.00, 0.00, 0.33, 0.66, 0.00, 0.33, 0.33, 0.33, 0.33, 0.33, 1.00, 0.66, 0.33, 0.00, 0.66, 1.00, 0.66, 0.00, 1.00, 0.33, 1.00, 1.00, 0.33, 1.00, 0.33, 0 0.66, 0.66, 1.00, 0.00, 0 0.00, 0.66, 1.00, 0.00, 0 1.00, 0.00, 0.66, 0.33, 0 0.66, 0.33, 0.33, 1.00, 0 0.33, 0.00, 0.00, 1.00, 0 0.66, 0.33, 1.00, 0.66, 0 0.00, 0.00, 0.33, 1.00, 0 0.66, 0.33, 0.66, 0.33, 0 0.66, 1.00, 0.33, 1.00, 0 1.00, 1.00, 0.00, 0.66, 0 1.00, 1.00, 0.00, 0.66, 0 1.00, 0.66, 0.33, 0.33, 0.66, 0.33, 1.00, 0.66, 0.00, 0.66, 1.00, 1.00, 0.33, 0.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.66, 0.00, 0.00, 0.33, 0.66, 0.00, 1.00, 1.00, 0.33, 1.00, 0.66, 0.66, 0.33, 0.66, 1.00, 0.33, 1.00, 0.00, 0.00, 0.66, 0.33, 0.00, 0.33, 0.66, 0.00, 0.33, 0.33, 1.00, 1.00, 0.66, 0.66, 0.00, 1.00, 0.00, 0.33, 1.00, 0.00, 0.66, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.33, 1.00, 0.33, 0.33, 0.00, 0.66, 1.00, 0.66, 0.00, 0.00, 0.66, 1.00, 1.00, 0.33, 1.00, 0.33, 0.33, 1.00, 0.66, 1.00, 0.00, 0.66, 1.00, 0.66, 1.00, 0.66, 1.00, 0.66, 0.66, 1.00, 1.00, 0.00, 0.66, 0.33, 1.00, 0.00, 0.33, 1.00, 0.66, 0.33, 0.33, 1.00, 0.33, 1.00, 1.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 0.00, 0.00, 0.00, 0.66, 0.00, 1.00, 0.00, 0.66, 0.00, 0.66, 0.00, 0.66, 0.66, 0.33, 0.66, 0.66, 1.00, 0.33, 0.00, 0.33, 0.00, 0.66, 0.33, 0.00, 0.00, 0.66, 0.33, 1.00, 0.66, 1.00, 1.00, 1.00, 0.33, 1.00, 0.00, 1.00, 1.00, 0.66, 0.33, 1.00, 0.00, 0.00, 1.00, 0.66, 0.00, 0.33, 0.00, 0.66, 0.33, 1.00, 0.33, 0.33, 0.33, 0.33, 0.66, 0.66, 0.00, 0.00, 0.33, 0.66, 1.00, 0.00, 1.00, 1.00, 1.00, 0.00, 0.33, 0.33, 0.66, 0.00, 1.00, 0.33, 0.66, 0.33, 0.00, 0.66, 0.00, 0.66, 1.00, 0.66, 0.00, 0.33, 0.33, 1.00, 0.66, 0.00, 0.66, 0.00, 0.66, 0.66, 0.66, 1.00, 1.00, 0.00, 1.00, 0.33, 0.66, 1.00, 0.66, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 0.33, 0.00, 0.33, 0.66, 0.00, 0.33, 0.33, 1.00, 0.66, 0.00, 1.00, 0.33, 0.00, 0.00, 1.00, 0.00, 0.33, 1.00, 0.66, 0.66, 0.00, 0.33, 0.00, 0.33, 1.00, 0.00, 0.00, 0.33, 0.33, 0.00, 0.66, 0.00, 0.33, 1.00, 0.66, 0.00, 1.00, 0.33, 0.66, 0.33, 1.00, 0.00, 1.00, 0.00, 0.33, 0.00, 0.66, 0.66, 0.66, 0.66, 0.66, 0.33, 1.00, 0.66, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 1.00, 1.00, 1.00, 0.33, 0.66, 0.66, 0.66, 0.66, 1.00, 0.66, 0.00, 0.33, 1.00, 0.00, 0.66, 1.00, 1.00, 0.33, 0.66, 0.00, 0.00, 0.66, 0.00, 0.33, 0.33, 1.00, 0.00, 1.00, 1.00, 1.00, 0.66, 0.00, 0.33, 0.33, 0.66, 0.33, 0.33, 0.00, 0.33, 0.33, 0.00, 0.66, 1.00, 0.00, 0.66, 0.66, 0.66, 0.00, 0.00, 1.00, 0.00, 1.00, 0.33, 0.66, 0.33, 0.33, 1.00, 0.66, 0.33, 0.00, 0.33, 0.33, 0.66, 0.66, 1.00, 1.00, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 0.66, 1.00, 0.33, 0.33, 1.00, 0.66, 0.66, 0.66, 0.00, 1.00, 0.00, 0.33, 1.00, 0.66, 0.66, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 1.00, 0.33, 0.00, 0.33, 0.33, 0.66, 0.66, 0.66, 1.00, 0.33, 0.66, 0.33, 1.00, 0.00, 0.00, 0.00, 0.00, 0.33, 0.33, 1.00, 0.33, 0.33, 0.66, 0.33, 1.00, 0.00, 0.00, 0.00, 0.66, 0.66, 0.33, 0.66, 1.00, 0.33, 0.66, 1.00, 0.66, 0.66, 0.00, 0.00, 0.33, 1.00, 0.66, 0.33, 0.66, 0.33, 0.00, 0.33, 1.00, 1.00, 0.66, 0.66, 0.33, 0.00, 0.66, 0.00, 0.33, 0.00, 0.66, 0.00, 1.00, 0.00, 0.66, 0.66, 0.33, 0.33, 1.00, 0.33, 0.00, 0.66, 1.00, 0.66, 0.00, 0.66, 1.00, 0.00, 1.00, 0.66, 1.00, 0.66, 0.66, 1.00, 1.00, 0.33, 0.66, 0.33, 1.00, 0.00, 0.00, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.66, 0.66, 0.33, 0.33, 0.66, 0.33, 0.66, 1.00, 1.00, 1.00, 1.00, 0.00, 0.66, 0.66, 1.00, 0.33, 0.66, 0.66, 0.33, 1.00, 0.66, 0.00, 0.00, 0.66, 1.00, 1.00, 0.33, 0.00, 0.00, 0.66, 1.00, 0.33, 0.33, 0.66, 1.00, 1.00, 0.00, 0.00, 0.33, 0.33, 0.00, 0.66, 0.66, 1.00, 0.66, 0.00, 0.33, 0.00, 1.00, 0.33, 0.00, 0.00, 0.33, 0.33, 1.00, 0.66, 1.00, 1.00, 1.00, 0.33, 0.33, 0.00, 1.00, 1.00, 0.00, 0.33, 1.00, 0.00, 0.66, 1.00, 0.66, 0.00, 0.00, 0.00, 0.66, 0.33, 0.66, 0.33, 0.33, 0.33, 1.00, 0.66, 0.66, 0.00, 0.33, 0.33, 0.66, 1.00, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 504 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.00, 0.00, 0.66, 0.33, 0.66, 1.00, 0.00, 0.33, 0.33, 1.00, 1.00, 1.00, 0.33, 0.66, 0.00, 0.00, 0.00, 0.66, 0.33, 0.66, 0.00, 0.00, 0.66, 1.00, 0.33, 0.66, 0.66, 0.33, 1.00, 1.00, 1.00, 0.00, 0.66, 1.00, 1.00, 1.00, 0.00, 0.33, 1.00, 0.33, 1.00, 0.00, 1.00, 1.00, 0.00, 0.33, 1.00, 1.00, 0.33, 0.33, 1.00, 1.00, 1.00, 0.00, 0.00, 0.33, 0.33, 0.66, 0.66, 0.00, 0.33, 0.00, 0.66, 0 1.00, 1.00, 1.00, 1.00, 0 0.00, 1.00, 0.00, 0.00, 0 0.00, 0.33, 0.66, 0.00, 0 0.00, 0.00, 0.00, 0.33, 0 0.00, 0.33, 0.33, 0.33, 0 1.00, 0.66, 0.33, 1.00, 0 0.00, 0.33, 0.33, 1.00, 0 0.66, 0.33, 0.00, 0.66, 0 0.00, 0.66, 1.00, 1.00, 0 1.00, 0.00, 0.66, 0.33, 0 0.00, 0.00, 0.33, 1.00, 0.33, 0.66, 0.66, 0.66, 1.00, 0.66, 0.33, 1.00, 0.33, 0.33, 0.33, 0.00, 0.00, 0.66, 1.00, 0.33, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 0.66, 0.33, 0.66, 0.00, 1.00, 0.00, 0.33, 0.33, 0.33, 0.66, 1.00, 1.00, 0.33, 0.33, 0.66, 1.00, 1.00, 0.00, 0.00, 0.66, 1.00, 0.66, 1.00, 0.33, 0.66, 0.33, 0.00, 1.00, 0.00, 0.66, 0.33, 0.33, 0.33, 0.00, 1.00, 0.66, 0.66, 0.66, 0.66, 1.00, 0.00, 1.00, 1.00, 0.33, 1.00, 0.66, 0.66, 1.00, 0.66, 0.33, 0.00, 0.33, 0.00, 1.00, 0.00, 0.33, 0.66, 1.00, 0.33, 0.66, 0.00, 0.33, 0.00, 0.33, 1.00, 0.33, 1.00, 0.66, 0.66, 0.66, 1.00, 0.00, 0.33, 1.00, 1.00, 0.00, 0.00, 0.33, 1.00, 0.00, 1.00, 0.66, 0.33, 0.33, 0.33, 1.00, 1.00, 0.33, 1.00, 1.00, 0.33, 0.66, 0.33, 0.33, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 1.00, 0.00, 0.33, 0.00, 0.66, 0.33, 0.00, 0.66, 0.66, 0.00, 0.00, 0.00, 0.00, 1.00, 0.66, 1.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.66, 0.33, 0.33, 1.00, 1.00, 0.66, 0.66, 0.00, 1.00, 0.00, 0.33, 1.00, 0.00, 0.66, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.33, 1.00, 0.33, 0.33, 0.00, 0.66, 1.00, 0.66, 0.00, 0.00, 0.66, 1.00, 1.00, 0.33, 1.00, 0.33, 0.33, 1.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.33, 0.66, 1.00, 0.00, 0.33, 0.66, 0.66, 0.33, 0.66, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.66, 0.33, 0.33, 0.33, 0.00, 0.33, 1.00, 0.00, 0.00, 1.00, 1.00, 0.33, 0.66, 0.33, 0.00, 0.66, 0.33, 0.00, 0.66, 0.66, 0.66, 0.00, 0.33, 0.00, 0.00, 1.00, 1.00, 1.00, 0.66, 0.66, 1.00, 0.00, 0.33, 0.66, 0.33, 0.33, 0.33, 0.33, 0.00, 0.33, 1.00, 0.00, 0.66, 0.00, 1.00, 0.66, 0.00, 0.33, 0.00, 0.33, 0.33, 0.33, 0.66, 0.33, 0.33, 0.66, 0.00, 1.00, 0.00, 0.00, 0.66, 0.33, 0.33, 0.66, 0.00, 0.66, 0.66, 1.00, 0.66, 0.00, 0.33, 0.00, 0.33, 0.33, 0.33, 0.66, 0.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.33, 0.33, 0.66, 0.33, 0.00, 0.33, 0.00, 0.66, 0.66, 0.33, 1.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.66, 0.33, 0.00, 0.66, 0.00, 0.66, 0.00, 0.00, 0.66, 0.00, 1.00, 0.33, 0.33, 0.33, 0.66, 0.66, 0.00, 0.00, 0.33, 1.00, 1.00, 0.00, 1.00, 0.66, 0.66, 0.33, 1.00, 0.33, 1.00, 1.00, 1.00, 0.33, 0.33, 1.00, 0.33, 0.33, 1.00, 1.00, 1.00, 0.00, 1.00, 0.00, 0.66, 0.33, 0.33, 0.33, 0.00, 1.00, 0.66, 0.66, 0.66, 0.66, 1.00, 0.00, 1.00, 0.66, 0.33, 1.00, 0.66, 0.00, 1.00, 0.66, 0.33, 1.00, 0.33, 0.00, 1.00, 1.00, 0.33, 0.66, 1.00, 0.66, 0.66, 0.00, 0.33, 1.00, 0.33, 1.00, 0.33, 0.33, 0.66, 0.66, 0.66, 0.00, 0.33, 1.00, 0.33, 0.00, 1.00, 0.00, 0.66, 0.66, 0.66, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.33, 0.00, 1.00, 0.00, 1.00, 0.00, 0.66, 1.00, 0.66, 0.66, 0.33, 0.66, 0.33, 0.66, 0.66, 0.00, 0.33, 0.00, 0.33, 0.00, 0.66, 0.66, 1.00, 0.33, 0.33, 0.66, 0.33, 0.66, 1.00, 0.00, 0.00, 1.00, 0.66, 1.00, 0.00, 0.66, 1.00, 0.66, 1.00, 0.33, 0.66, 0.00, 0.00, 0.66, 0.33, 0.00, 0.33, 0.00, 0.66, 0.33, 0.66, 0.66, 0.66, 1.00, 0.66, 0.33, 1.00, 0.33, 0.33, 0.33, 0.00, 0.00, 0.66, 1.00, 0.33, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 0.66, 0.33, 0.66, 0.00, 1.00, 0.00, 0.33, 0.33, 0.33, 0.66, 0.33, 0.33, 0.00, 1.00, 0.66, 0.66, 0.66, 0.66, 1.00, 0.00, 1.00, 0.66, 0.33, 1.00, 0.66, 0.00, 1.00, 0.66, 0.33, 1.00, 0.33, 0.00, 1.00, 1.00, 0.33, 0.66, 1.00, 0.66, 0.66, 0.00, 0.33, 1.00, 0.33, 1.00, 0.33, 0.33, 0.66, 0.66, 0.66, 0.00, 0.00, 0.33, 1.00, 0.33, 0.33, 0.33, 1.00, 0.33, 1.00, 0.00, 1.00, 0.66, 0.66, 0.33, 1.00, 0.33, 1.00, 1.00, 1.00, 0.33, 0.33, 1.00, 0.33, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 0.33, 1.00, 0.00, 0.33, 0.00, 0.66, 0.33, 0.33, 1.00, 1.00, 0.66, 1.00, 0.00, 0.00, 0.33, 0.33, 0.00, 0.66, 0.66, 0.66, 0.00, 0.00, 0.33, 0.00, 1.00, 0.33, 1.00, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 505 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 1.00, 0.00, 0.00, 0.66, 0.33, 0.66, 1.00, 0.00, 1.00, 0.66, 0.00, 1.00, 1.00, 0.00, 0.33, 0.66, 0.33, 0.00, 0.66, 0.66, 0.00, 0.66, 0.33, 0.33, 1.00, 1.00, 0.00, 0.33, 0.00, 0.00, 0.00, 1.00, 0.66, 0.00, 0.00, 0.66, 1.00, 0.66, 0.00, 0.33, 0.33, 1.00, 0.00, 0.66, 0.00, 1.00, 1.00, 0.33, 1.00, 1.00, 0.66, 0.33, 1.00, 0.00, 1.00, 0.66, 1.00, 0.66, 0.66, 0 0.66, 0.00, 0.66, 0.00, 0 0.33, 0.33, 0.33, 1.00, 0 0.66, 0.33, 0.33, 0.33, 0 1.00, 0.33, 0.00, 1.00, 0 0.33, 0.33, 0.33, 0.33, 0 1.00, 1.00, 1.00, 0.66, 0 0.66, 0.00, 0.00, 0.33, 0 0.33, 1.00, 0.00, 1.00, 0 0.00, 0.66, 0.33, 0.33, 0 0.00, 0.00, 0.66, 0.33, 0 0.00, 1.00, 0.66, 0.66, 0 1.00, 0.33, 1.00, 0.66, 0.66, 0.00, 0.66, 0.00, 0.66, 0.66, 0.33, 0.66, 1.00, 0.00, 0.66, 0.66, 1.00, 0.66, 0.33, 0.00, 0.66, 0.00, 0.00, 0.00, 0.66, 1.00, 0.33, 0.33, 0.00, 0.66, 0.33, 1.00, 0.00, 0.33, 1.00, 0.00, 0.33, 0.33, 0.66, 0.33, 0.00, 0.00, 0.33, 0.66, 1.00, 0.66, 0.00, 0.33, 0.33, 0.33, 0.33, 1.00, 0.33, 1.00, 1.00, 0.33, 0.66, 0.33, 0.33, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 1.00, 0.00, 0.33, 0.00, 0.66, 0.33, 0.00, 0.66, 0.66, 0.00, 0.00, 0.00, 0.00, 1.00, 0.66, 1.00, 1.00, 1.00, 0.00, 1.00, 0.66, 0.66, 1.00, 0.33, 0.66, 0.00, 1.00, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 0.66, 0.00, 0.00, 0.66, 1.00, 0.00, 0.00, 0.00, 0.33, 0.66, 0.66, 0.33, 0.66, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 0.66, 0.33, 0.33, 0.33, 0.00, 0.33, 1.00, 0.00, 0.00, 1.00, 1.00, 0.33, 0.66, 0.33, 0.00, 0.66, 0.33, 0.00, 0.66, 0.66, 0.66, 0.00, 0.33, 0.00, 0.00, 1.00, 1.00, 1.00, 0.66, 0.66, 0.00, 0.66, 0.66, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.33, 1.00, 1.00, 0.00, 1.00, 0.33, 0.66, 1.00, 0.66, 0.00, 0.33, 0.66, 0.33, 0.66, 0.66, 0.00, 0.33, 0.33, 0.33, 0.00, 0.66, 1.00, 1.00, 0.33, 0.33, 0.66, 0.33, 0.66, 1.00, 1.00, 0.00, 1.00, 0.66, 0.66, 1.00, 1.00, 0.00, 0.00, 0.66, 0.00, 1.00, 0.66, 0.66, 0.33, 0.33, 0.00, 0.33, 0.66, 0.00, 1.00, 0.00, 0.33, 0.66, 0.66, 0.66, 0.66, 0.66, 1.00, 0.33, 0.66, 0.00, 0.33, 0.00, 1.00, 1.00, 1.00, 0.33, 0.66, 1.00, 1.00, 0.66, 0.00, 0.33, 0.33, 1.00, 0.66, 0.00, 0.33, 1.00, 0.00, 1.00, 0.66, 1.00, 0.66, 0.66, 0.66, 0.33, 1.00, 0.33, 0.66, 0.33, 0.33, 1.00, 1.00, 0.33, 0.33, 0.00, 0.66, 1.00, 0.66, 0.33, 0.66, 0.00, 0.66, 0.66, 0.33, 0.00, 1.00, 1.00, 1.00, 1.00, 0.33, 1.00, 0.00, 0.66, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.66, 0.33, 1.00, 0.33, 1.00, 1.00, 0.33, 0.33, 0.66, 0.00, 0.33, 0.66, 1.00, 0.66, 0.00, 0.33, 0.66, 0.33, 0.33, 0.66, 0.33, 0.66, 0.33, 0.33, 1.00, 1.00, 1.00, 1.00, 0.00, 0.33, 0.33, 0.66, 0.00, 1.00, 0.33, 0.66, 0.33, 0.00, 0.66, 0.00, 0.66, 1.00, 0.66, 0.00, 0.33, 0.33, 1.00, 0.66, 0.00, 0.66, 0.00, 0.66, 0.66, 0.66, 1.00, 1.00, 0.00, 1.00, 0.33, 0.66, 1.00, 1.00, 1.00, 0.66, 0.00, 0.33, 0.33, 0.66, 0.33, 0.66, 0.00, 0.33, 0.33, 1.00, 0.00, 0.00, 1.00, 0.66, 0.33, 1.00, 0.66, 0.66, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 1.00, 1.00, 1.00, 0.33, 0.66, 0.66, 0.66, 0.66, 1.00, 0.66, 0.00, 0.33, 1.00, 0.00, 0.66, 1.00, 1.00, 0.33, 0.66, 0.00, 0.00, 1.00, 0.33, 1.00, 1.00, 1.00, 0.00, 0.66, 1.00, 0.66, 1.00, 0.00, 0.66, 0.66, 0.66, 1.00, 0.33, 0.33, 0.00, 0.00, 0.66, 1.00, 0.00, 0.33, 0.00, 1.00, 0.33, 0.66, 0.66, 0.66, 1.00, 0.66, 0.33, 0.33, 0.33, 0.33, 0.33, 1.00, 0.00, 0.66, 1.00, 0.33, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 0.66, 0.66, 0.00, 0.00, 1.00, 0.00, 0.66, 0.66, 0.66, 0.66, 0.00, 0.66, 0.33, 0.66, 0.00, 0.33, 0.00, 0.66, 0.66, 1.00, 1.00, 1.00, 0.00, 0.00, 0.66, 0.66, 0.66, 0.66, 0.66, 1.00, 0.66, 0.00, 0.00, 0.00, 0.00, 0.33, 0.66, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.33, 1.00, 0.66, 0.33, 0.33, 1.00, 0.33, 0.33, 0.33, 0.33, 0.66, 0.00, 1.00, 0.66, 0.66, 0.33, 0.33, 0.00, 0.33, 0.66, 0.00, 1.00, 0.00, 0.33, 0.66, 0.66, 0.66, 0.66, 0.66, 1.00, 0.33, 0.66, 0.00, 0.33, 0.00, 1.00, 1.00, 1.00, 0.33, 0.66, 1.00, 1.00, 0.66, 0.00, 0.33, 0.33, 1.00, 0.66, 0.00, 0.33, 0.00, 0.33, 0.66, 1.00, 1.00, 0.66, 0.66, 0.33, 0.66, 0.00, 0.33, 0.33, 1.00, 0.00, 0.66, 0.66, 0.00, 0.33, 1.00, 1.00, 1.00, 0.33, 1.00, 1.00, 1.00, 0.66, 0.00, 1.00, 1.00, 1.00, 1.00, 0.33, 0.33, 0.00, 1.00, 0.66, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 506 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 0.33, 0.00, 0.00, 0.66, 0.66, 0.00, 0.00, 0.66, 1.00, 1.00, 0.66, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.66, 0.00, 0.00, 0.00, 1.00, 0.66, 0.00, 1.00, 0.00, 1.00, 1.00, 1.00, 0.66, 0.33, 0.00, 0.33, 0.00, 0.66, 0.66, 0.33, 0.00, 0.33, 0.00, 0.66, 0.33, 1.00, 0.66, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.66, 0.33, 0.00, 0.66, 0.33, 0.66, 0 0.33, 0.33, 0.33, 0.66, 0 0.66, 0.66, 0.00, 1.00, 0 0.00, 0.33, 0.33, 0.33, 0 0.66, 0.66, 0.33, 0.00, 0 0.66, 0.33, 0.00, 0.66, 0 0.66, 0.00, 0.33, 0.00, 0 0.66, 1.00, 0.66, 1.00, 0 0.33, 0.66, 0.33, 1.00, 0 0.66, 0.66, 0.33, 0.00, 0 0.00, 0.33, 1.00, 0.33, 0 0.66, 0.00, 0.00, 1.00, 0 0.00, 1.00, 0.66, 1.00, 0.66, 1.00, 1.00, 1.00, 1.00, 0.66, 0.33, 0.66, 0.33, 0.00, 0.66, 0.00, 0.66, 0.00, 0.33, 0.66, 1.00, 1.00, 1.00, 0.33, 0.00, 1.00, 0.00, 0.66, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.33, 0.00, 0.33, 0.33, 0.66, 0.33, 1.00, 0.33, 0.33, 0.66, 0.33, 0.66, 0.00, 0.33, 0.00, 0.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.33, 0.33, 0.00, 1.00, 0.66, 0.00, 0.66, 1.00, 1.00, 0.33, 0.00, 0.66, 1.00, 0.00, 0.00, 1.00, 0.00, 0.33, 0.00, 1.00, 0.00, 0.33, 0.33, 1.00, 1.00, 1.00, 0.66, 1.00, 0.33, 0.33, 1.00, 0.66, 0.66, 0.00, 0.33, 0.33, 0.33, 0.66, 1.00, 0.66, 1.00, 0.66, 1.00, 0.33, 1.00, 0.33, 0.33, 0.00, 1.00, 0.00, 0.66, 0.00, 0.66, 1.00, 1.00, 0.33, 1.00, 0.66, 0.33, 0.33, 0.33, 0.00, 1.00, 0.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.66, 0.33, 1.00, 1.00, 0.33, 0.00, 0.33, 0.66, 0.00, 1.00, 0.33, 0.00, 0.66, 0.66, 0.66, 0.66, 0.33, 0.00, 0.66, 0.33, 0.66, 0.00, 1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.66, 0.33, 0.33, 0.66, 0.00, 0.00, 1.00, 1.00, 0.33, 0.66, 0.00, 0.00, 0.66, 1.00, 0.33, 1.00, 1.00, 0.00, 0.66, 0.66, 0.33, 1.00, 0.66, 0.33, 1.00, 0.66, 1.00, 1.00, 0.33, 0.00, 0.66, 0.66, 1.00, 0.66, 0.66, 0.66, 0.66, 0.00, 0.66, 0.00, 0.33, 1.00, 1.00, 1.00, 0.00, 0.66, 0.00, 0.66, 1.00, 0.66, 0.33, 0.66, 1.00, 0.66, 1.00, 1.00, 1.00, 0.66, 0.66, 0.00, 0.66, 1.00, 1.00, 0.33, 0.00, 0.66, 1.00, 0.00, 1.00, 1.00, 0.00, 0.33, 1.00, 1.00, 0.00, 0.33, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.33, 0.33, 0.33, 0.66, 0.66, 0.00, 0.33, 0.33, 0.33, 0.66, 0.00, 0.66, 1.00, 0.66, 1.00, 0.33, 1.00, 0.33, 0.33, 0.66, 0.00, 1.00, 0.00, 0.33, 0.66, 0.00, 0.33, 0.33, 0.66, 0.66, 0.66, 1.00, 1.00, 1.00, 0.66, 0.33, 0.66, 0.33, 0.66, 0.00, 0.33, 1.00, 1.00, 0.66, 0.66, 0.33, 1.00, 0.33, 0.00, 0.00, 0.66, 0.66, 0.66, 0.66, 0.33, 1.00, 1.00, 0.00, 0.66, 0.00, 1.00, 0.66, 0.00, 1.00, 0.33, 1.00, 0.66, 1.00, 1.00, 0.66, 0.33, 0.33, 0.66, 0.00, 0.00, 0.66, 0.33, 0.66, 1.00, 1.00, 1.00, 1.00, 0.66, 0.00, 1.00, 0.00, 1.00, 0.66, 1.00, 0.33, 0.00, 0.33, 0.33, 0.66, 0.00, 0.66, 1.00, 0.33, 0.00, 0.33, 1.00, 0.00, 0.33, 0.00, 0.00, 0.33, 0.66, 1.00, 0.33, 0.33, 1.00, 0.33, 1.00, 0.00, 0.66, 0.00, 1.00, 0.00, 0.00, 0.66, 0.33, 0.00, 0.66, 0.00, 0.66, 0.00, 1.00, 0.66, 0.00, 1.00, 0.00, 0.33, 0.33, 0.66, 0.66, 0.00, 0.00, 0.33, 0.00, 1.00, 0.00, 1.00, 0.33, 0.66, 0.33, 1.00, 0.33, 1.00, 1.00, 1.00, 0.33, 0.33, 1.00, 0.33, 1.00, 0.00, 0.66, 1.00, 1.00, 0.66, 0.33, 1.00, 0.33, 1.00, 0.66, 1.00, 1.00, 1.00, 0.66, 0.66, 0.00, 0.66, 1.00, 1.00, 0.66, 0.00, 0.66, 1.00, 0.66, 1.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.33, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.33, 1.00, 0.33, 0.66, 0.66, 1.00, 0.33, 0.33, 0.33, 0.33, 0.00, 0.66, 1.00, 1.00, 1.00, 0.33, 1.00, 1.00, 0.00, 0.66, 1.00, 0.66, 0.00, 0.00, 0.66, 0.00, 1.00, 0.33, 1.00, 0.33, 0.33, 1.00, 0.66, 0.33, 0.00, 0.33, 0.00, 0.66, 0.66, 1.00, 0.00, 0.00, 0.00, 0.66, 0.33, 0.00, 0.33, 0.66, 0.00, 0.33, 0.33, 1.00, 1.00, 0.66, 0.66, 0.00, 1.00, 0.00, 0.33, 1.00, 0.00, 0.66, 1.00, 1.00, 1.00, 0.00, 0.66, 0.66, 0.66, 0.66, 0.00, 0.66, 0.33, 0.66, 0.00, 0.33, 0.00, 0.66, 0.66, 1.00, 1.00, 1.00, 0.00, 0.00, 0.66, 0.66, 0.66, 0.66, 0.66, 1.00, 0.66, 0.00, 0.00, 0.00, 0.00, 0.33, 0.66, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.33, 1.00, 0.33, 1.00, 1.00, 0.66, 0.66, 0.00, 0.66, 0.33, 0.00, 1.00, 0.66, 1.00, 0.33, 0.00, 0.66, 0.33, 0.33, 0.66, 0.00, 0.33, 0.00, 0.00, 0.33, 1.00, 1.00, 0.66, 0.33, 0.00, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 507 Anexo de Ejemplos – Framework JCortex – http://www.jcortex.com/ 1.00, 1.00, 0.66, 0.33, 0.00, 0.66, 0.00, 1.00, 0.66, 0.00, 1.00, 0.66, 0.66, 0.33, 0.66, 1.00, 0.66, 0.33, 0.33, 0.33, 1.00, 0.66, 0.33, 1.00, 0.00, 0.66, 0.00, 1.00, 0.00, 0.00, 0 0.33, 0.00, 0.66, 0.00, 0 1.00, 1.00, 0.33, 0.66, 0 0.66, 0.00, 0.33, 1.00, 0 1.00, 0.33, 1.00, 0.33, 0 0.00, 0.00, 0.66, 0.00, 0 0.00, 0.00, 1.00, 0.66, 0.33, 1.00, 1.00, 1.00, 0.33, 1.00, 1.00, 0.66, 0.66, 0.00, 0.33, 0.66, 1.00, 0.66, 0.33, 0.33, 0.33, 1.00, 0.00, 0.33, 1.00, 0.00, 0.66, 0.66, 0.33, 0.33, 1.00, 0.66, 0.00, 0.66, 1.00, 0.00, 0.00, 0.66, 1.00, 0.66, 1.00, 0.66, 1.00, 0.66, 0.66, 1.00, 1.00, 0.00, 0.66, 0.33, 1.00, 0.00, 0.33, 1.00, 0.66, 0.33, 0.33, 1.00, 0.33, 1.00, 1.00, 0.66, 1.00, 0.00, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.33, 1.00, 0.00, 1.00, 0.66, 0.33, 0.33, 0.33, 1.00, 1.00, 0.33, 1.00, 1.00, 0.33, 0.66, 0.33, 0.33, 0.00, 0.00, 0.66, 0.00, 0.00, 0.33, 1.00, 0.00, 0.33, 0.00, 0.66, 0.33, 0.00, 0.66, 0.66, 0.00, 0.00, 0.00, 0.00, 1.00, 0.66, 1.00, 1.00, 1.00, 0.33, 1.00, 0.33, 0.33, 0.66, 0.66, 0.66, 0.00, 0.00, 0.33, 1.00, 0.33, 0.33, 0.33, 1.00, 0.33, 1.00, 1.00, 0.00, 0.00, 0.00, 0.66, 0.33, 0.00, 0.33, 0.00, 1.00, 0.66, 0.66, 0.66, 0.66, 0.66, 0.00, 1.00, 0.66, 0.33, 1.00, 0.66, 0.00, 1.00, 0.66, 0.33, 1.00, 1.00, 0.00, 1.00, 1.00, 0.33, 0.33, 1.00, 0.66, 1.00, 0.66, 0.33, 0.00, 0.66, 1.00, 1.00, 0.66, 0.00, 0.33, 0.00, 0.66, 0.00, 0.33, 0.00, 0.66, 0.00, 1.00, 0.00, 0.66, 0.66, 0.33, 0.33, 1.00, 0.66, 0.00, 0.66, 1.00, 0.00, 0.00, 0.66, 1.00, 0.66, 1.00, 0.66, 1.00, 0.66, 0.66, 1.00, 1.00, 0.00, 0.66, 0.33, 1.00, 0.00, 0.00, 0.66, 0.33, 1.00, 0.33, 0.66, 0.00, 0.33, 0.00, 0.00, 0.33, 0.00, 1.00, 0.66, 1.00, 0.00, 1.00, 0.66, 0.33, 1.00, 0.00, 0.33, 0.00, 0.33, 0.00, 1.00, 1.00, 0.00, 1.00, 0.33, 1.00, 0.00, 0.00, 1.00, 0.00, 0.66, 0.00, 0.00, 0.66, 0.00, 0.00, 0.00, 0.33, 0.00, 1.00, 1.00, 0.33, 0.33, Framework para Redes Neuronales en Java – Miguel Lara Encabo – Junio 2006 508