Redes Neuronales en java, Herramienta para redes Neuronales
Neural Networks tool Neural Networks with java Neural Networks tool
Neural Networks tool Neural Networks with java
       
 

 

Introducción
a las Redes Neuronales
API del
Marco de trabajo
Tutorial
Marco de
Trabajo
JRedesNeruonales
Downloads
Hompage
Marco de
trabajo

 

 

Tutorial para el diseño de una Red Neuronal
3.1 Diseño de la Dinámica

En este apartado deberemos especificar el comportamiento de una red neuronal cuando le envían un patrón .

Para ello deberemos redefinir el método abstracto de la red

public Patrón ejecutar(Patrón p);

Además deberemos redefinir el método abstracto de la neurona

public abstract void actualizar()


 

8.3.1.1 El diseño del método de la red ejecutar

Primero nos centraremos en el diseño del método de la red ejecutar.
para ello vamos a seguir el siguiente guión:

A) Especificamos que hace la red en cada paso:
Lo que debemos hacer es una lista de tareas que la red neuronal hace con
cada patrón que le enviamos. Por ejemplo, un perceptrón :

1. Le enviamos el patrón a la capa de entrada
2. Las neuronas de la capa de salida consultan el valor de las de entrada y se actualizan

B) Traducimos esto a las funciones que tiene nuestro marco:
El marco tiene 3 métodos principales de la clase capa para esto, que son:

a. void actualizarNeuronasAleatorias (int NumVeces)
b. void actualizarNeuronas()
c. void enviarPatrón ( Patrón P)


El ultimo método enviarpatrón carga el patrón P en la capa que llamemos.
Los métodos a y b lo que hacen es actualizar las neuronas de la capa a la que estemos llamando. Las neuronas se actualizan según se determine en el método actualizar de las clases neurona hija.
La diferencia entre ambos es que actualizarNeuronas actualiza a todas las neuronas de la capa , sirve para representar el sincronismo, y actualizarNeuronasAleatorias actualiza NumVeces Neuronas aleatoriamente y sirve para representar el comportamiento asíncrono.

Si algunas de las tareas de la lista implica que las neuronas deben hacer algo que
no es actualizarse entonces debemos modelar ese comportamiento en la neurona
haciendo una neurona_hija

a. void ejecutarNeuronas(String Tipo, String Metodo)
b. void ejecutarNeuronasAleatorias (String Tipo, String Método, int NumVeces)

Los dos métodos ejecutarNeuronas y ejecutarNeuronasAleatorias llaman a un método determinado de las neuronas de la capa llamante la diferencia entre ambas es la misma que la que hay entre los métodos a y b arriba explicado. ejecutarNeuronas modela comportamiento sincrono y ejecutarNeuronasAleatorias modela comportamiento asincrono.

La única restricción es que el método no debe tener parámetros.
El método que se llama debe ser definido en una neurona hija de la principal
De la siguiente manera

package RedesNeuronales;
public class Neurona_Especial extends Neurona {
public void metodo_especial () {
// Aqui se espera la Implementacion del usuario
double pot = math.sqrt(potencial_Adelante()) ;
}
}

y la llamada al método seria así :

CapaEntrada.ejecutarNeuronas(“Neurona_Especial”, “metodo_especial”) ;

C) Escribimos este funcionamiento en el método public Patrón ejecutar(Patrón p)
Por ejemplo para el perceptrón

public Patrón ejecutar(Patrón p) {
CapaEntrada.enviarPatron(p);
CapaSalida.actualizarNeuronas();
return CapaSalida.conseguirEstado ();
}

Con esto terminamos la dinámica de la red hija y nos queda definir como es el comportamiento de la neurona.

 
 

8.3.1.2 El diseño del método actualizar de la neurona

Para definir el comportamiento de la neurona, deberemos en redefinir el método actualizar.

public abstract void actualizar()

Este método lo que debe representar es, como la neurona pasa de un estado a otro nuevo según dicte el algoritmo de la red neuronal.

Para ello la neurona cuenta con una serie de métodos para acceder a todos los valores que te puedan ser necesarios .

Estos métodos devuelven el potencial sináptico de las sinapsis de neuronas que llegan desde capas de adelante , Atrás y lateralmente usando esta función

Potencial =

public double potencial_Adelante()
public double potencial_Atras()
public double potencial_Lateral()

Estos métodos devuelven la norma cuadrática entre las sinapsis y los estados de las neuronas de las que salen desde capas de adelante , Atrás y lateralmente usando esta función. Se suele usar en redes competitivas o no supervisadas.

Potencial =

public double normaCuadraticaAd()
public double normaCuadraticaAtr()
public double normaCuadraticaLat()

Un ejemplo podría ser el estado del perceptrón :

public void actualizar() {
// primero hallamos el potencial
double pot = potencial_Adelante();

if (pot<0) Estado = -1.0;
else if (pot>0) Estado = 1.0;
}

 

 
 

 

Seguir en el siguiente apartado >

Introducción - Diseño de la arquitectura - Diseño del Comportamiento
Diseño de la Dinámica de la red - Diseño del Aprendizaje de la red
Las redes Online - Diseño de los patrones - Empaquetado de la red.

 

This Software has been developed by Alfonso Ballesteros Computering Ingenieer by the University of Malaga, Spain as a part of his final
degree proyect with the supervision of D. Enrique Dominguez