JcNnCl - Klassenbibliothek

( Jens' and Claudias Neural Network Class Library )






Einführung

Mit dem Programm SNNS kann man sehr gut neuronale Netze erstellen und trainieren. Doch was fängt man danach mit den Netzen an? Um sie in eigenen Programmen nutzen zu können, ist die Erarbeitung einer Programmkomponente notwendig, die die Datei (*.net), welche die Beschreibung des SNNS-Netzes enthält, auslesen und entsprechend interpretieren und umsetzen kann. Das gleiche gilt auch für die Dateien (*.pat), die die zu verwendenden Pattern enthalten. Als Grundlage für diese Programmkomponente existiert für C++ bereits ein Framework in Form einer Klassenbibliothek, nicht aber für Java, obwohl gerade für diese Programmiersprache eine solche Klassenbibliothek von Bedeutung wäre, weil man damit die Darstellung und Nutzung neuronaler Netze innerhalb von Java-Applikationen bzw. -Applets und somit auch im Internet ermöglichen könnte.

Seitenanfang


Ziel

Ziel dieser Belegarbeit von Jens Lorenz und Claudia Krönicke für das Fach Neuroinformationsverarbeitung war es nun, eine solche Java-Klassenbibliothek zu entwickeln, die der einfachen Nutzung von neuronalen Netzen, die mit SNNS erstellt und trainiert wurden, in eigenen Java-Programmen und -Applets dient. Dazu können nun SNNS-Netze und -Pattern geladen, intern verwaltet und schließlich auch graphisch dargestellt werden (wie in der Beispielapplikation zu sehen ist).

Angestrebt wurde bei der Entwicklung allerdings nicht die Erschaffung einer ultimativen All-In-One-Lösung, sondern eines stabilen Kerns, der ohne großen Aufwand erweitert werden kann und gut mit SNNS zusammenarbeitet.

Um das Erweitern so leicht wie möglich zu gestalten, wurde mit Hilfe von Ant ein Build-System erstellt, das neue Distributionen erstellt, welche das Build-System enthalten und selbst wieder neue Distributionen erstellen können. Erweiterungen der Klassenbibliothek sollten daher nur innerhalb dieses Build-Systemes erfolgen und die neuen Distributionen anderen Nutzern zugänglich gemacht werden.

Seitenanfang


Verzeichnisstruktur der Distribution

Die Verzeichnisse der Distribution haben folgende Bedeutung:


Seitenanfang


Nutzung der Distribution in eigenen Projekten

Um die Klassenbibliothek in eigenen Projekten nutzen zu können, reicht es aus, die Datei lib/jcnncl-x.xx.jar in den CLASSPATH oder das lib-Verzeichnis des Projektes zu kopieren.
Die Nutzung der einzelnen Klassen der Bibliothek ist in der Java-Dokumentation näher beschrieben.

Seitenanfang


Weiterentwicklung der Klassenbibliothek

Diese Distribution ist beliebig erweiterbar. Da sie sich momentan nur auf das Laden, (interne) Verwalten und Anzeigen von SNNS-Netzen beschränkt, wäre als nächstes z.B. die Implementation des Lernens von Netzen mittels verschiedener Lernalgorithmen sowie die Auswertung des Lernens mittels Fehlerkurven denkbar und sinnvoll.

Zur Realisierung solcher Erweiterungen müssen die entsprechenden Java-Klassen nur in das src-Verzeichnis gelegt werden. Der Befehl build package baut im Verzeichnis build/jcnncl die Datei jcnncl-x.xx.jar mit den compilierten Klassen zusammen. Diese kann dann zum Testen in den CLASSPATH aufgenommen werden.
Wenn alle Erweiterungen stabil funktionieren und die Dokumentation dem doc-Verzeichnis hinzugefügt wurde, kann mit build dist-zip und build dist-tgz eine neue Distribution samt JavaDoc-Dokumentation erstellt werden.
Diese sollte anderen wieder zur Verfügung gestellt werden.

Seitenanfang


UML - Diagramme der implementierten Packages

Die beigefügten UML - Diagramme wurden mit Together 6.0 erstellt und dienen als Übersicht über die Klassen der JcNnCl - Klassenbibliothek. Sie beinhalten nicht die Klassen der zusätzlich genutzten Bibliotheken, die im Verzeichnis lib als jar-Files zu finden sind.


Seitenanfang

Package jcnncl


zurück

Package jcnncl.diagram


zurück

Package jcnncl.diagram.tool


zurück

Package jcnncl.net


zurück

Package jcnncl.test


zurück

Package jcnncl.ui


zurück


Beispielapplikation

Unter Verwendung der Klassen des Packages jcnncl.diagram kann man ein neuronales Netzwerk sehr einfach innerhalb einer Applikation graphisch darstellen. Als Demonstration dient hierzu das NetDiagram. Darin werden Units und Connections wie folgt angezeigt:

Units:
Kreise gefüllt mit einer Basisfarbe (grün), die den Wert des Outputs der Unit repräsentiert, und ein 45 Grad Bogen innerhalb des Kreises gefüllt mit einer zweiten Farbe (rot), der den Wert des NettoInputs der Unit repräsentiert. Diese zwei Werte werden auf das Interval (0;1) getrimmt, damit sie als Intensität der Farben für NettoInput und Output angezeigt werden können.

Beispiele:
 NettoInput = 1 und Output = 1
 NettoInput = 1 und Output = 0
 NettoInput = 0 und Output = 1
 NettoInput = 0 und Output = 0
Neue Units können mit dem Button erzeugt werden.

Connections:
Pfeile von einer Unit zu einer anderen Unit mit einem zugehörigen Feld, welches das Gewicht der Connection beinhaltet. In größeren Netzwerken müssen die Connections oft "Knicke" haben, um eine bessere Übersicht zu ermöglichen. Knicke erzeugt man einfach, indem man auf die entsprechende Connection klickt, die linke Maustaste gedrückt hält und den Knick an die gewünschte Stelle zieht. Zum Entfernen eines Knickes hält man die Strg-Taste gedrückt und klickt mit der linken Maustaste auf den zu löschenden Knick.

Beispiele:    or  

Neue Connections können mit dem Button erzeugt werden.

Beachte: Innerhalb der graphischen Applikation neu erzeugte Units und Connections werden momentan nur als Figuren zur graphischen Darstellung erzeugt, die korrespondierenden Unit- und Connection-Objekte (aus dem Package jcnncl.net) werden nicht erstellt!!!

Der Button dient zur Erstellung von Notizzetteln, die z.B. Hinweise zu einem Netz enthalten können.

Das Laden eines Netzes erfolgt mit dem Button , woraufhin ein Filedialog die Auswahl des zu ladenden SNNS-Netzes ermöglicht. Danach kann man ein dazu passendes Set von Pattern mit dem Button laden, auch hier erlaubt ein Filedialog die Auswahl der gewünschten Patterndatei. Hat man erfolgreich ein Netz und ein Pattern geladen, so kann man nacheinander die Pattern mit den Pfeiltasten und anlegen und am Netz die daraus errechneten Outputs beobachten.

Seitenanfang


Download

jcnncl-0.5.zip
jcnncl-0.5.tar.gz

Seitenanfang

©2002 HTW Dresden (FH)
Jens Lorenz
Claudia Krönicke
(last update 04-06-2002)