Beleg Neuronale Netze von Andreas Pfeifer
· Ziel
· Die Rahmen-Applikation für Programme mit neuronalen Netzen
· Das Mustererkennungs-Programm
· UML-Diagramme der neuen und geänderten Packages
· Download
Mit der JcNnCl
Klassenbibliothek in der ersten Version konnte man sehr gut SNNS-Netze (*.net)
oder Musterdateien (*.pat) laden und diese dann in den entsprechenden
Datenstrukturen verwalten. Auch die graphische Darstellung von Netzen war damit
auf recht einfache und effektive Weise möglich. Durch Verwendung dieser
Bibliothek ließen sich also mit SNNS erstellte und trainierte neuronale Netze
gut in eigene Java-Programme einbinden.
Allerdings fehlten noch Möglichkeiten zum Erstellen und Bearbeiten von
Musterdateien (pattern files). Dies war besonders wünschenswert, da solche
Musterdateien bisher nur umständlich und fehleranfällig per Hand editiert
werden mussten.
Es war deshalb das Ziel dieser Belegarbeit, die Klassenbibliothek so zu erweitern, dass damit auf möglichst einfache Weise Musterdateien erstellt, angezeigt, bearbeitet und gespeichert werden können. Dafür mussten die entsprechenden neuen Klassen geschrieben, bzw. bereits vorhandene erweitert und angepasst werden. Außerdem sollte ein Programm zur Mustererkennung aus dem Buch "Neural Network And Fuzzy Logic Applications in C/C++" von Stephen T. Welstead nach Java umgesetzt und damit gleichzeitig der Beweis für die praktische Einsetzbarkeit der Klassenbibliothek erbracht werden.
Das Erstellen, Anzeigen, Bearbeiten und Speichern von Patterndateien lässt sich am besten mit einem graphischen Editor lösen, den man als Komponente in eigene Applikationen integrieren kann. Damit kann man alle Eigenschaften einer Patterndatei bearbeiten.
Der Editor bietet die folgenden Funktionen:
· Laden und Speichern von SNNS-Musterdateien (*.pat)
· Anzeige der Musterdaten als Zahlenwerte, als Graustufen oder in einem Wertediagramm
· Navigation zwischen den einzelnen Mustern innerhalb des Musterdatensatzes
· Verändern der Anordnung der Werte (Anzahl Zeilen und Spalten)
· Editieren der Ein- und Ausgabedaten inklusive "Undo"-Funktion
· Festlegen der Anzahl von Ein- und Ausgabewerten pro Muster
· Hinzufügen von neuen Mustern
· Löschen von einzelnen Mustern
· Hinzufügen von zufälligem Rauschen zu einzelnen oder allen Eingabemustern
Das Programm lässt sich durch einen Aufruf von runEditor.bat starten. Daraufhin erscheint das folgende Programmfenster:
Die Funktion der nummerierten Bedienelementen ist in der folgenden Liste erklärt:
1. Menu zum Laden und Speichern von Patterndateien, Erzeugen von neuen Test- und Trainingsdatensätzen und zum Ändern des Look & Feel
2. Drehregler zum Festlegen der Anzahl von Ein- und Ausgabewerten pro Muster
3. Radio Buttons zum Umschalten der Anzeige der Inputdaten zwischen Zahlenwerten, als Graustufen oder als Wertediagramm
4. Drehregler zum Verändern der Anzahl Zeilen und Spalten für die Inputdaten
5. Radio Buttons zum Umschalten der Anzeige der Outputdaten zwischen Zahlenwerten, als Graustufen oder als Wertediagramm
6. Drehregler zum Verändern der Anzahl Zeilen und Spalten für die Outputdaten
7. Anzeige der Nummer des aktuell ausgewählten Musters
8. Schieberegler zur Navigation zwischen den einzelnen Mustern innerhalb des Musterdatensatzes
9. Button zum Hinzufügen von neuen Mustern
10. Button zum Löschen von einzelnen Mustern
11. Tabelle/Diagram für die Anzeige der Inputdaten
12. Tabelle/Diagram für die Anzeige der Outputdaten
13. Button zum Generieren und Hinzufügen von zufälligem Rauschen zu den Inputdaten
14. Schieberegler zum Einstellen der Menge des gewünschten Rauschens
15. Radio Buttons zum Umschalten zw. Hinzufügen des Rauschens zu aktuellem Eingabemuster oder allen Eingabemustern
16. Button zum Löschen der Inputdaten (Werte auf 0 setzen)
17. Button zum rückgängig machen der Änderungen an den Inputdaten
18. Textfeld zum Festlegen der Intervallgrenzen für die Inputdaten
19. Button zum Löschen der Outputdaten (Werte auf 0 setzen)
20. Button zum rückgängig machen der Änderungen an den Outputdaten
21. Textfeld zum Festlegen der Intervallgrenzen für die Outputdaten
22.
Das Bedienung des Programms ist weitgehend selbsterklärend. Allerdings gibt es einige Punkte zu beachten. Deshalb hier noch einige Erläuterungen:
Wie man auf dem Screenshot erkennen kann, können die Input- und Outputdaten wahlweise als Zahlenwerte oder Graustufen oder in einem Wertediagramm dargestellt werden (3, 5). Die Anzeige als Zahlenwerte oder Graustufen erfolgt mit Hilfe je einer Tabelle für die Input- und für die Outputdaten, die in einem scrollbaren Zeichenbereich eingebettet ist (11, 12). Der Grund dafür ist die unterschiedliche Anzahl der Werte pro Muster in verschiedenen Musterdateien. Es gibt in SNNS-Musterdateien normalerweise keine Information darüber, wie die Anordnung dieser Daten bei der Anzeige zu erfolgen hat. Aus diesem Grund werden die Daten nach dem Laden solch einer Datei standardmäßig in einer Zeile dargestellt. Die Anzahl der Zeilen und Spalten lässt sich aber mit den entsprechenden Drehreglern ändern (4, 6). Beispielsweise kann man ein Muster mit 35 Datenwerten in einer 35 x 1, 1 x 35, 7 x 5, oder 5 x 7 Matrix darstellen. Wenn man eine zweckmäßige Darstellungsform gefunden hat, kann man den geladenen Musterdatensatz in einer Patterndatei abspeichern. Dabei werden die Werte entsprechend der gewählten Anordnung in die Datei geschrieben. Beim späteren Öffnen der Datei wird dies berücksichtigt und die Anordnung automatisch wiederhergestellt.
Weiterhin erkennt der Editor, ob eine Patterndatei Trainings- oder Testmuster enthält und passt sein Erscheinungsbild automatisch an. Wird eine Trainingsdatei geöffnet, so werden auch die Komponenten zum Bearbeiten von Outputwerten angezeigt. Beim Laden von Testdatensätzen (die ja keine Outputdaten enthalten) sind diese Komponenten überflüssig und werden deshalb nicht angezeigt.
Mit dem Drehregler (2) kann man die Anzahl der Ein- und Ausgabewerte verändern. Dies wirkt sich natürlich auf jedes einzelne Muster des Musterdatensatzes aus. Wenn die Anzahl erhöht wird, stellt dies noch kein Problem dar, da einfach zu jedem Muster entsprechend viele neue Werte hinzugefügt werden. Verringert man sie jedoch, so gehen die "überschüssigen" Werte in jedem einzelnen Muster verloren!
Das Editieren der Muster erfolgt entweder im Wertemodus ("values") oder im Graustufenmodus ("graphical"). Im Diagrammodus ("diagram") kann man nicht editieren, das Diagram dient lediglich zur Visualisierung der Werteverteilung innerhalb des Musterdatensatzes. Im Wertemodus gibt man die gewünschten Werte direkt in die Tabelle ein. Im Graustufenmodus kann man die Werte mit der Maus bearbeiten. Dazu klickt oder zieht man die Maus innerhalb der Tabelle. Die linke Maustaste erzeugt dabei Werte an der aktuellen Obergrenze, die rechte Maustaste Werte an der aktuellen Untergrenze des Wertebereichs. So kann man sehr einfach binäre Daten oder Textzeichen bearbeiten. Die Intervallgrenzen für die Input- und Outputwerte lassen sich mit den Textfeldern (18) und (21) festlegen. Standardmäßig sind diese entsprechend dem größten und kleinsten Input-/Output-Wert des Musterdatensatzes eingestellt.
Das Ändern der
Intervallgrenzen hat mehrere Auswirkungen:
Zum einen wird die Anzeige der Werte darauf normiert, d.h. bei der Darstellung
der Werte als Graustufen werden die Grauwerte zwischen dem Minimum (weiß) und
dem Maximum (schwarz) abgestuft. Dies gilt genauso für das Editieren der Werte
in diesem Modus mit der Maus.
Wenn als Anzeigemodus das Wertediagram gewählt ist, werden dessen obere und
untere Grenze entsprechend angepasst und das Diagram wird neu gezeichnet.
Zum anderen wird mit den minimalen und maximal Inputwerten auch das Intervall
für das Erzeugen von Rauschen festgelegt. Hat man beispielsweise eine
Musterdatei mit Inputwerten zwischen 0.15 und 0.90 und man fügt den Daten
Rauschen mit den Bedienelementen (13)-(15) hinzu, so liegen auch die Werte des
generierten Rauschens in diesem Bereich. Sollen aber verrauschte Werte zwischen
0.0 und 1.0 erzeugt werden, so muss vorher das Minimum auch auf 0.0 und das
Maximum auf 1.0 gesetzt werden.
Der Editor wurde so programmiert, dass er sich leicht in eigene Programme integrieren lässt. Dazu gibt es Komponente SnnsPatternEditorPanel, die von JPanel abgeleitet ist und somit zu anderen Programmkomponenten, z.B. Fenstern hinzugefügt werden kann. Diese Komponente stellt die wesentliche Funktionalität des Editors zur Verfügung.
Die Rahmen-Applikation ist eine Umsetzung der Grundapplikation aus dem Buch "Neural Network And Fuzzy Logic Applications in C/C++" von Stephen T. Welstead nach Java. Dazu wurde ebenfalls die JcNnCl Klassenbibliothek verwendet. Allerdings wurde von dem ursprünglichen Code nichts übernommen, da die konzeptionellen und programmiertechnischen Änderungen eine völlige Neuprogrammierung notwendig gemacht haben. Die in diesem Buch dargestellten Ideen und Programme dienten dabei lediglich als Anregung.
Diese Applikation bietet Grundfunktionalitäten
wie Menu- und Fensterverwaltung sowie Datei- und Fehlerdialoge an. Weiterhin
vereinfacht sie den Umgang mit SNNS-Netzen und -Musterdateien durch Funktionen
zum Laden und Anzeigen von Netzen, das Erzeugen von Trainings- und Testdaten
(mit Hilfe des Pattern-Editors).
Die Rahmen-Anwendung wurde als abstrakte Klasse (jcnncl.app.AbstractNetworkapplication) implementiert, von der man eigene Anwendungsklassen ableiten kann. Das vereinfacht die Entwicklung von eigenen Programmen sehr, da man auf die bereitgestellte Funktionalität zurückgreifen kann und nicht alles neu programmieren muss.
Das Programm zur Mustererkennung ist eine Umsetzung der "Pattern Recognition" Applikation aus dem Buch "Neural Network And Fuzzy Logic Applications in C/C++" von Stephen T. Welstead. Es baut auf der oben vorgestellten Rahmen-Applikation für Neuronale Netze auf. (von AbstractNetworkApplication abgeleitete Klasse PatternRecognition) Man kann damit SNNS Netze laden und anzeigen. Außerdem lassen sich Muster laden, editieren und speichern und auf das Netz anwenden. D.h. man kann ein mit SNNS erstelltes und trainiertes Netz einlesen und mit dazu passenden Mustern "füttern". Dazu wird das Netz sowie das angelegte Muster graphisch dargestellt, so dass die durch das Netz entstehende Beziehung zwischen Input- und Outputdaten deutlich wird.
Das Programm bietet die folgenden Funktionen:
· Laden, Editieren und Speichern von SNNS-Musterdateien (*.pat) *
· Laden von SNNS-Netzdateien (*.net)
· Visualisierung von Neuronalen Netzen
· Anlegen von Inputdaten an Neuronale Netze und graphische Anzeige der Outputdaten
· Navigation zwischen den einzelnen Mustern innerhalb des Musterdatensatzes
· Erzeugen von Test-Musterdateien *
· Erzeugen von Trainings-Musterdateien *
* mit Hilfe des oben beschriebenen Pattern-Editors, der als Komponente in diesem Programm verwendet wird.
Das Programm lässt sich durch einen Aufruf von runPR.bat starten. Daraufhin erscheint das folgende Programmfenster:

Die Funktion der nummerierten Bedienelementen ist in der folgenden Liste erklärt:
23. Menu zum Laden und Speichern von Pattern-Dateien, zum Laden von Netz-Dateien
24. Menu zum Bearbeiten von Pattern-Dateien, Erzeugen von neuen Test- und Trainingsdatensätzen
25. Menu zum Anzeigen von und Ausführen von Netzen
26. Menu zum Ändern des Look & Feel
27. Editor-Fenster zum Erstellen neuen Test-Mustern
28. Editor-Fenster zum Erstellen neuen Trainings-Mustern
29. Editor-Fenster zum Bearbeiten der Daten von Musterdateien
30. Fenster zur Visualisierung von Netzen
31. Fenster zum Ausführen von Netzen
32. Button zum Auswählen des vorhergehenden Input-Musters innerhalb der Musterdatei
33. Button zum Auswählen des folgenden Input-Musters innerhalb der Musterdatei
34. Button zum Anlegen des aktuellen Input-Musters an das Netz
35. Button zum Bearbeiten des aktuellen Input-Musters
36. Anzeige der Nummer des aktuellen Input-Musters
37. Radio Buttons zum Umschalten der Anzeige der Inputdaten zwischen Zahlenwerten, als Graustufen oder als Wertediagram
38. Drehregler zum Verändern der Anzahl Zeilen und Spalten für die Inputdaten
39. Tabelle/Diagram für die Anzeige der Inputdaten
40. Textfeld zur Anzeige des Namens der aktuell geladenen Netz-Datei
41. Textfeld zur Anzeige des Namens der aktuell geladenen Muster-Datei
Hinweise zur Bedienung:
Das Programm besitzt für jede der Hauptfunktionen (Erstellen von Test- und
Trainingsmustern, Bearbeiten von Musterdateien, Visualisierung von Netzen sowie
Ausführen von Netzen) ein eigenes Fenster (5 - 9). Das Erstellen und Bearbeiten
von Musterdaten erfolgt mit Hilfe des bereits vorgestellten Pattern-Editors
(Hinweise zu dessen Bedienung siehe Abschnitt: Der Pattern-Editor).
Um Netzwerke mit Musterdaten ausführen zu können, muss man zunächst die
entsprechenden Netz- und Musterdateien laden. Die beiden Textfelder (18) und
(19) zeigen den Namen der aktuell geladenen Dateien an.
Danach kann man durch Auswahl des Menupunktes "Run Network" aus dem
"Network" Menu die Fenster zum Anzeigen und zum Ausführen des Netzes
öffnen. Mit den Buttons (10) und (11) wählt man das gewünschte Muster innerhalb
der Musterdatei aus. Wenn man das Muster noch bearbeiten will, ist das durch
Drücken des Buttons "Edit Pattern" (13) möglich. Dieser startet den
Pattern-Editor und wählt das aktuelle Muster zum Bearbeiten aus. Änderungen an
den Musterdaten wirken sich sofort auf das "Run Network" Fenster (9)
aus, d.h. die Datenanzeige (17) wird automatisch aktualisiert.
Durch Drücken des Buttons "Test Pattern" (12) legt man dann das
aktuell angezeigte Muster an das Netz an und sieht im Visualisierungsfenster,
welche Ausgabedaten das Netz für die Eingabedaten produziert.
UML - Diagramme
der neu implementierten und geänderten Packages
Package jcnncl

Package jcnncl.app

Package jcnncl.ui

©2003 HTW Dresden (FH)
Andreas Pfeifer
(last update 01-23-2003)