deutsch | english | français  
Header: cdrnet - NeuroBox FAQ


NeuroBox - Häufig gestellte Fragen

Frage: Mit welchem Wertebereich des Input Vektors erzielt man die besten Lernergebnisse?

Die NeuroBox arbeitet mit dem Tangens Hyperbolicus (Tanh) als Aktivierungsfunktion und ist somit stark vom Wertebereich der Aktivitäten der Input Neuronen abhängig. Sie skaliert die Vektoren nicht selber (ausser man arbeitet mit boolschen Vektoren), eine manuelle Skalierung ist daher sehr empfehlenswert. Tanh(x) ist Punktsymmetrisch zum Ursprung, somit wählt man vorteilig auch den Wertebereich symmetrisch. Seine Steigung im Ursprung ist Eins und es nähert sich sehr schnell an seiner Asymptote Eins bzw. minus Eins für x gegen unendlich bzw. minus unendlich. Mit Tanh(1) = 0.76159, Tanh(2) = 0.96403 und Tanh(5) = 0.99990 eignen sich somit besonders die Wertebereiche [-2..2] bis [-5..5].

Frage: Warum vergisst das Netzwerk nach dem Training eines neuen Patterns immer alle zuvor trainierten Patterns?

Durch einen häufigen Verständnisfehler der Backpropagation wird oft versucht, jedes Pattern jeweils so lange zu trainieren bis die Ausgabe stimmt, und erst dann mit dem nächsten analog weiter zufahren. Dies wird durch eine hohe Lernrate noch beschleunigt. Diese Startegie funktioniert zwar bestens um das Netz immer für genau eine Eingabe eine bestimmte Ausgabe generieren zu lassen, führt aber wie beobachtet jeweils auch zum kompletten Verlust des Wissens über die restlichen Eingaben. Viel mehr empfiehlt es sich, mit einer relativ kleinen Lernrate (mit 0.3 habe ich gute Ergebnisse erzielt - möglicherweise hilft auch ein kontinuierliches Senken der Rate während des Trainings!) pro Epoche jede Eingabe genau ein mal zu trainieren, wiederholt für beliebig viele Epochen. Diese Strategie wurde auch bei der Logic Operator Training Demo verwendet. Manchmal hilft auch das Erhöhen der Anzahl Neuronen in der versteckten Schicht. Ansonsten kann man in der Configuration Klasse auch viele weitere Anpassungen vornehmen und z.B. die Bias Neuronen aktivieren.

Frage: Kann man ein trainiertes Netzwerk irgendwie abspeichern und später wieder laden?

Ja, dazu gibt es mehrere Möglichkeiten. Entweder kann man von Hand alle Parameter auslesen und das Ablegen selber verwalten, oder aber man serialisiert das ganze Netzwerk automatisiert mit den Boardmitteln des .NET Frameworks. Die XML Serialisierung wird bis und mit Release 2.4 nicht unterstützt, dafür aber die binäre Serialisation mit dem BinaryFormatter.
Warnung: Die binäre Serialisierung ist versionsabhängig, d.h. Netzwerke, die mit v2.4 serialisiert wurden, können nicht mit v2.5 deserialisiert werden. Ab Release 2.5 sind daher verbesserte Inport/Export Features geplant.

//Serialisieren
BinaryFormatter bf = new BinaryFormatter();
Stream st = File.Open(@"C:\network.dat",FileMode.Create,FileAccess.Write);
bf.Serialize(st,network);
st.Close();
//Deserialisieren
st = File.Open(@"C:\network.dat",FileMode.Open,FileAccess.Read);
network = (Network) bf.Deserialize(st);
st.Close();

NeuroBox
:. Überblick
:. Download
:. FAQ
:. Features
:. Dokumentation
:. Demos
:. Links
:. Lizenz

Extrakt
:. Wertebereich
:. Lernrate
:. Strategie

Weblog
:. NeuroBox Project News

Kontakt
:. Kontaktforumular

SourceForge Workspace
SourceForge Logo