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 |
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.)
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!)