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.