Beleg Neuronale Netze von Andreas Pfeifer

Erweiterung der JcNnCl - Klassenbibliothek um einen Pattern-Editor und Umsetzung einer C/C++-Applikation zur Mustererkennung mit Hilfe dieser Bibliothek.

 

·        Einführung

·        Ziel

·        Der Pattern-Editor

·        Die Rahmen-Applikation für Programme mit neuronalen Netzen

·        Das Mustererkennungs-Programm

·        UML-Diagramme der neuen und geänderten Packages

·        Download

 

Einführung

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.

Seitenanfang
 

 

Ziel

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.

 

Seitenanfang
 

 

Der Pattern-Editor

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.

 

Funktionsumfang

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

 

Start und Bedienung

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.

 

Nutzung in eigenen Projekten

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.

Seitenanfang

 

Die Rahmen-Applikation für Programme mit Neuronale Netzen

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

Nutzung in eigenen Projekten

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.

Seitenanfang

 

Das Mustererkennungs-Programm

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.

 

Funktionsumfang

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.

 

Start und Bedienung

            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.

Seitenanfang

 

UML - Diagramme der neu implementierten und geänderten Packages

 

Package jcnncl

 

Package jcnncl.app

 

Package jcnncl.ui

 

Download

jcnncl-0.6.zip

 

 


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