Suche Jordan-Netz Implementierung



  • Hallo,

    kennt jemand eine freie Implementierung eines Jordan-Netzes (Rückgekoppeltes Neuronales Netz) zur Klassifikation, geschrieben in C/C++ oder Java?

    Danke!

    http://de.wikipedia.org/wiki/Jordan-Netz





  • SOlltest du mal das im Wiki-Artikel favorisierte Elman-Netzwerk ausprobieren wollen, gibt es in der folgenden Bibliothek eine Klasse, die das kann:
    http://shark-project.sourceforge.net/ReClaM/class_m_s_e_r_n_net.html



  • Headhunter schrieb:

    http://www.heatonresearch.com/encog

    Danke! Hast du damit schon einmal gearbeitet, bzw. weißt du, ob diese Library beim Training einen Validierungsdatensatz verwendet?

    Ich hatte bisher die FANN ( http://leenissen.dk/fann ) verwendet. Diese Bibliothek verwendet den Fehler auf den Trainingsdaten als einziges Abbruchkriterium. Das führt natürlich zu Overfitting und ist schlecht.

    Es sollte eigentlich Standard sein, dass die Trainingsdaten in reine Trainingsdaten und Validierungsdaten aufgeteilt werden; ist es aber leider nicht. 😞



  • Siegfried1 schrieb:

    Headhunter schrieb:

    http://www.heatonresearch.com/encog

    Danke! Hast du damit schon einmal gearbeitet, bzw. weißt du, ob diese Library beim Training einen Validierungsdatensatz verwendet?

    Ich hatte bisher die FANN ( http://leenissen.dk/fann ) verwendet. Diese Bibliothek verwendet den Fehler auf den Trainingsdaten als einziges Abbruchkriterium. Das führt natürlich zu Overfitting und ist schlecht.

    Es sollte eigentlich Standard sein, dass die Trainingsdaten in reine Trainingsdaten und Validierungsdaten aufgeteilt werden; ist es aber leider nicht. 😞

    Zu 1) ja und ich muss sagen, dass Encog von allen getesteten OS-Netzen die meisten Features, die höchste Geschwindigkeit und die Einfachste Bedienung hat. An sich kennt Encog aber das Konzept Testdaten- und Validierungsdaten nicht. Es obliegt dir, die Daten entsprechend vorzubereiten, wobei du von einigen Hilfsklassen unterstützt wird. Oder was meinst du genau?



  • Headhunter schrieb:

    Siegfried1 schrieb:

    Headhunter schrieb:

    http://www.heatonresearch.com/encog

    Danke! Hast du damit schon einmal gearbeitet, bzw. weißt du, ob diese Library beim Training einen Validierungsdatensatz verwendet?

    Ich hatte bisher die FANN ( http://leenissen.dk/fann ) verwendet. Diese Bibliothek verwendet den Fehler auf den Trainingsdaten als einziges Abbruchkriterium. Das führt natürlich zu Overfitting und ist schlecht.

    Es sollte eigentlich Standard sein, dass die Trainingsdaten in reine Trainingsdaten und Validierungsdaten aufgeteilt werden; ist es aber leider nicht. 😞

    Zu 1) ja und ich muss sagen, dass Encog von allen getesteten OS-Netzen die meisten Features, die höchste Geschwindigkeit und die Einfachste Bedienung hat. An sich kennt Encog aber das Konzept Testdaten- und Validierungsdaten nicht. Es obliegt dir, die Daten entsprechend vorzubereiten, wobei du von einigen Hilfsklassen unterstützt wird. Oder was meinst du genau?

    Naja,das hat mit dem Vorbereiten der Daten eigentlich nichts zu tun. Es geht darum, dass die Trainingsdaten normalerweise in zwei Teile aufgeteilt werden (z.B. 2/3 reine Testdaten und 1/3 Validierungsdaten). Mit den Validierungsdaten wird dann während dem Testen (z.B. nach jeder Epoche) getestet, wie sich das Netz auf ungesehenden Daten verhält. Wenn auf diesen ungesehenden Validierungsdaten ein gewisser Schwellwert für den Fehler erreicht ist, dann soll das Training beendet werden.

    Die FANN ( http://leenissen.dk/fann ) hat dies nicht gemacht und deshalb trat nach einigen Epochen Overfitting ein. FANN versuchte lediglich den Fehler auf den Trainingsdaten zu minimieren. Das Verhalten auf ungesehenden Testdaten war daduch am Ende mangelhaft.

    EDIT: Man könnte natürlich die Trainingsdaten im Vorfeld in diese zwei Teile aufteilen und dann die Library entsprechend abändern, dass eben nach jeder Epoche auf dem Validierungssatz das bestehende Netz getestet wird... Aber es wäre eigentlich besser, wenn die Library diese Funktion von alleine mitbringt und z.B. nach jeder Epoche diesen Validierungsdatensatz aus den gesamten Trainingsdaten neu generiert.



  • Encog trainiert immer mit in sample Daten.
    Das Training kannst du aber schrittweise ausführen, sinngemäß so:

    while (network.rmse() < DESIRED && network.minutes() < 5)
       network.trainStep();
    

    Es wäre ein leichtes, dort ein neues Testingnetz aus dem halb-trainiertem Netz zu erzeugen und dieses dann zu validieren. Theoretisch sollte das auch durch ein subclassing von einer der Traningsklassen recht einfach gehen, das habe ich aber noch nicht selber gemacht.


Log in to reply