SNIPE (hier für Unterseite klicken) ist eine ausführlich dokumentierte JAVA-Bibliothek, welche ein schnelles, feature-reiches und einfach benutzbares Framework für Neuronale Netze implementiert. Es ist ursprünglich für den Einsatz in Hochleistungssimulationen konzipiert, in denen sehr viele, auch große Netze gleichzeitig trainiert und ausgeführt werden und dementsprechend optimiert. Viel Spaß damit!
Das Design und die Implementierung von SNIPE wurde so konzipiert, dass es jedem der folgenden Ziele gerecht wird:
Generalisierte Datenstruktur für beliebige Netzwerktopologien, so dass praktisch alle Netzwerktopologien realisiert oder auf einfache Weise manuell modelliert werden können.
Direkt eingebaute, schnell und einfach zu verwendende Lernverfahren sowohl für gradientenbasiertes Lernen als auch für Evolutionäre Algorithmen.
Mechanismen für Design und Kontrolle von großen Mengen von Netzen
Optimal schnelle Propagierung von Daten durch das Netz, im Gegensatz zu landläufigen und häufig implementierten Datenstrukturen. Dies soll auch für topologische Spezialfälle, wie Multi-Layer-Perceptrons oder sehr dünn besetzte Netzwerke gelten. Obendrein soll der Rechenaufwand bei Topologieänderungen gering sein.
Geringer Speicherverbrauch - wächst nur linear mit der Zahl der Synapsen und nicht quadratisch zur Zahl der Neurone.
In-situ-Datenverarbeitung - Keine Vorverarbeitung der netzinternen Datenstrukturen vor Benutzung gerade editierter Netze notwendig, also auch kein diesbezüglicher Speicher- und Rechenzeitverbrauch.
Gebrauch von Lowlevel-Datenstrukturen (arrays) für einfache Portabilität. Es ist nicht das Ziel, das letzte bisschen asymptotischer Komplexität aus dem Framework herauszuquetschen, sondern es in der Praxis schlank, benutzbar und schnell zu halten.
Kein objektorientierter Overload. Ich habe schon Implementierungen gesehen, die eigene Objekte für Synapsen und Neurone vorsehen.