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.
SeitenanfangZiel 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.
SeitenanfangDie Verzeichnisse der Distribution haben folgende Bedeutung:
CLASSPATH unter WindowsUm 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.
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.
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.






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 |
erzeugt werden.
or
erzeugt werden.
dient zur Erstellung von Notizzetteln, die z.B. Hinweise zu einem Netz enthalten können.
, 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