Class myMLP

java.lang.Object
  |
  +--myMLP

public class myMLP
extends java.lang.Object

Die Klasse realisiert ein Multi-Layer-Perceptron mit: s Schichten, davon eine Input-Schicht mit i Input-Neuronen, einer Ausgabe-Schicht mit o Output-Neuronen und h Hidden Schichten, wobei auch die Anzahl der Neuronen in der jeweiligen Hiddenschicht beliebig waehlbar ist, Connections: feed-forward ohne shortcut connections, Transferfunktion: logistische Funktion fact = 1 / (1 + e^(-net)) (ausser Input-Neuronen, bei Input-Neuronen: Transferfunktion: Identitaet), Schwellen der Neuronen (ausser Input-Neuronen): durch Bias realisiert (ein "On-Neuron" fuer Bias (Output stets 1.0)), Backpropagation mit Lernrate "eta" und Momentum/Impulsrate "alpha", sie stellt die wichtigsten/grundlegenden Methoden/Operationen fuer die Arbeit mit dem Netz zur Verfuegung


Constructor Summary
myMLP(int i, int[] h, int o)
          Konstruktor.
 
Method Summary
 double Aktivierung(double net)
          Aktivierungsfunktion.
 double[] Aktivierung(double[] net)
          Aktivierungsfunktion.
 void doBackpropagation(double eta, double alpha)
          Backpropagation durchfuehren.
 void doPropagation()
          angelegtes Input-Muster durch das Netz propagieren.
 double GetFehler()
          Fehler fuer das aktuelle Muster (ueber alle Output-Neuronen) berechnen.
 double[] GetGewichte()
          Methode zum Export aller Gewichte des Netzes in Form eines Arrays von double-Werten.
 double[] GetInput()
          Methode liefert das aktuell an das Netz angelegte Input-Muster.
 double[] GetOutput()
          Methode liefert die aktuellen Output-Werte der Output-Neuronen (Ausgabemuster).
 double[] GetSollOutput()
          Methode liefert das aktuell gesetzte Soll-Output-Muster.
 void ResetNet()
          Reset und Neu-Initialisierung saemtlicher Netzeigenschaften.
 boolean SetGewichte(double[] NeueGewichte)
          Methode zum Setzen der Gewichte aller Verbindungen des Netzes.
 boolean SetInput(double[] NewInputMuster)
          Methode zum Anlegen eines Input-Musters an die Input-Schicht.
 boolean SetSollOutput(double[] NewSollOutputMuster)
          Methode zum Setzen des Soll-Output-Musters.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

myMLP

public myMLP(int i,
             int[] h,
             int o)
Konstruktor. (Erzeugung eines Multi-Layer-Perceptrons mit einer Input-Schicht mit "i" Input-Neuronen, einer Output-Schicht mit "o" Output-Neuronen und einem "On-Neuron" mit Verbindungen zu allen verarbeitenden Neuronen (zur Realisierung der Schwellen der Neuronen in Form von Gewichten (Bias)), die Anzahl der Hidden-Schichten wird durch die Anzahl der Elemente des Arrays "h" bestimmt (Laenge des Arrays, "h.length"), wobei jedes Array-Element die Anzahl der Neuronen in der jeweiligen Hiddenschicht enthaelt, falls keine Hidden-Schicht erzeugt werden soll, ist als 2. Parameter "null" zu uebergeben (das Feld mit dem Index 0 des Arrays h enthaelt dabei die Anzahl der Neuronen in der ersten Hiddenschicht, das Feld mit Index 1 enthaelt die Anzahl der Neuronen in der zweiten Hiddenschicht usw.)) (Erzeugung der benoetigten Matrizen, Arrays usw. sowie Initialisierung der Gewichte mit zufaelligen Werten usw.)
Method Detail

doPropagation

public void doPropagation()
angelegtes Input-Muster durch das Netz propagieren. Ausgabemuster wird erzeugt.

GetFehler

public double GetFehler()
Fehler fuer das aktuelle Muster (ueber alle Output-Neuronen) berechnen. Der SollOutput fuer das angelegte Muster muss vorher gesetzt werden. (d.h. Fehler zwischen aktuellem Ist-Output und zugehoerigem Soll-Output wird berechnet, nicht Fehler ueber alle Muster!)

doBackpropagation

public void doBackpropagation(double eta,
                              double alpha)
Backpropagation durchfuehren. (Parameter "eta" : Lernrate, "alpha" : Momentum/Impulsrate) (die berechneten Gewichtsänderungen werden (fuer das naechste Trainingsmuster) unmittelbar wirksam (Online-Training))

Aktivierung

public double Aktivierung(double net)
Aktivierungsfunktion. Methode berechnet die Aktivierung aus dem Netto-Input (fuer ein einzelnes Neuron) ( Aktivierungsfunktion: logistische Funktion, fact = 1 / (1 + e^(-net)) )

Aktivierung

public double[] Aktivierung(double[] net)
Aktivierungsfunktion. Im Gegensatz zur gleichnamigen Methode (oben) berechnet diese Methode die Aktivierungen (aus dem jeweiligen Netto-Input) fuer einen ganzen Vektor von Neuron, d.h. fuer eine ganze Schicht ( Aktivierungsfunktion: logistische Funktion, fact = 1 / (1 + e^(-net)) )

GetGewichte

public double[] GetGewichte()
Methode zum Export aller Gewichte des Netzes in Form eines Arrays von double-Werten. Returnwert: Array mit den Gewichten (jedes Element des Arrays ein Gewicht) (Reihenfolge der Gewichte im Array (vgl. Methode "SetGewichte"): zuerst alle Gewichte der Verbindungen des ersten Neurons der Inputschicht mit den Neuronen der auf die Inputschicht folgenden Schicht, danach alle Gewichte der Verbindungen des zweiten Neurons der Inputschicht mit den Neuronen der Folgeschicht usw., (dabei jeweils wiederum zuerst das Gewicht der Verbindung zum ersten Neuron der Folgeschicht, dann das Gewicht der Verbindung zum zweiten Neuron der Folgeschicht usw.), danach (falls vorhanden) (nach gleichem Prinzip sortiert) die Gewichte der Verbindungen zwischen den Neuronen der auf die Inputschicht folgenden Schicht und deren Folgeschicht usw., zum Schluss die Gewichte der Verbindungen des "On-Neurons" (dabei zuerst das Gewicht der Verbindung zum ersten Neuron der auf die Inputschicht folgenden Schicht, danach das Gewicht der Verbindung zum zweiten Neuron dieser Schicht usw., danach das Gewicht der Verbindung zum ersten Neuron der folgenden Schicht usw.))

SetGewichte

public boolean SetGewichte(double[] NeueGewichte)
Methode zum Setzen der Gewichte aller Verbindungen des Netzes. Parameter: Array von double-Werten (die zu setzenden Gewichte) (! die Laenge des Array (d.h. Anzahl der Felder/Werte) muss der Anzahl der Gewichte (d.h. Anzahl der Verbindungen) des Netzes entsprechen) (jedes Element des Arrays ein Gewicht) (die Werte werden kopiert und in den Gewichtsmatrizen entsprechend gesetzt, kein direkter Zugriff auf die Gewichtsmatrizen) (Reihenfolge der Gewichte im Array (vgl. Methode "GetGewichte"): zuerst alle Gewichte der Verbindungen des ersten Neurons der Inputschicht mit den Neuronen der auf die Inputschicht folgenden Schicht, danach alle Gewichte der Verbindungen des zweiten Neurons der Inputschicht mit den Neuronen der Folgeschicht usw., (dabei jeweils wiederum zuerst das Gewicht der Verbindung zum ersten Neuron der Folgeschicht, dann das Gewicht der Verbindung zum zweiten Neuron der Folgeschicht usw.), danach (falls vorhanden) (nach gleichem Prinzip sortiert) die Gewichte der Verbindungen zwischen den Neuronen der auf die Inputschicht folgenden Schicht und deren Folgeschicht usw., zum Schluss die Gewichte der Verbindungen des "On-Neurons" (dabei zuerst das Gewicht der Verbindung zum ersten Neuron der auf die Inputschicht folgenden Schicht, danach das Gewicht der Verbindung zum zweiten Neuron dieser Schicht usw., danach das Gewicht der Verbindung zum ersten Neuron der folgenden Schicht usw.)) Returnwert: "true", falls Gewichte gesetzt, sonst "false"

SetInput

public boolean SetInput(double[] NewInputMuster)
Methode zum Anlegen eines Input-Musters an die Input-Schicht. (D.h. setzen des Netto-Inputs der Eingabeneuronen) (kein direkter Zugriff auf Input-Schicht o.ae. !!!, Parameter: Array mit Eingabemuster (Werte im Bereich [0,1]) --> Werte im Array werden kopiert und an das Netz (d.h. an Input-Neuronen) angelegt) Returnwert: "false", falls ungueltiges Eingabemuster (d.h. zu kurz oder zu lang); "true", falls alles OK (Muster gesetzt)

GetInput

public double[] GetInput()
Methode liefert das aktuell an das Netz angelegte Input-Muster. (D.h. die aktuellen Netto-Input-Werte der Input-Neuronen des Netzes) (kein direkter Zugriff auf Input-Schicht o.ae. !!!, Netto-Input-Werte (im Bereich [0,1]) der Input-Neuronen werden kopiert und in Form eines Arrays zurueckgegeben)

SetSollOutput

public boolean SetSollOutput(double[] NewSollOutputMuster)
Methode zum Setzen des Soll-Output-Musters. (D.h. gewuenschter Output fuer das angelegte Eingabemuster) (kein direkter Zugriff auf das Array SollOutput des Netzes !!!, Parameter: Array mit Soll-Ausgabemuster (Werte im Bereich [0,1]) --> Werte im Array werden kopiert und gesetzt) Returnwert: "false", falls ungueltiges Output-Muster uebergeben (d.h. zu kurz oder zu lang); "true", falls alles OK (Muster gesetzt)

GetSollOutput

public double[] GetSollOutput()
Methode liefert das aktuell gesetzte Soll-Output-Muster. (D.h. Soll-Output-Werte fuer das angelegte Input-Muster) (kein direkter Zugriff auf SollOutput-Werte o.ae. !!!, Soll-Output-Werte (im Bereich [0,1]) der Output-Schicht werden kopiert und in Form eines Arrays zurueckgegeben)

GetOutput

public double[] GetOutput()
Methode liefert die aktuellen Output-Werte der Output-Neuronen (Ausgabemuster). (D.h. Output-Muster des Netzes fuer das zuletzt durch das Netz propagierte! Input-Muster, d.h. Output-Muster, das durch den letzten Aufruf der Methode "doPropagation()" gesetzt wurde) (kein direkter Zugriff auf Output-Werte der Output-Neuronen o.ae. !!!, Output-Werte (im Bereich [0,1]) der Output-Schicht werden kopiert und in Form eines Arrays zurueckgegeben)

ResetNet

public void ResetNet()
Reset und Neu-Initialisierung saemtlicher Netzeigenschaften. (D.h. Reset der Gewichte (alle Gewichte mit zufaelligen Werten aus dem Bereich [-1,1] initialisieren), saemtliche Gewichtsaenderungen (DeltaWij) "0" setzen, Netto-Input und Deltas (lokale Gradienten) aller Neuronen "0" setzen, usw.) (Soll-Output und Input werden nicht veraendert!)