2017-04-23 3 views
3

Es ist ziemlich verrückt, dass es kein tot einfach Beispiel der LSTM RNN Vorhersage Zeitreihendaten.Dead einfaches Beispiel für synaptic js lstm rnn Algorithmus

https://github.com/cazala/synaptic

https://github.com/cazala/synaptic/wiki/Architect#lstm

Ich möchte die historischen Daten in der folgenden Array verwenden:

const array = [ 
    0, 
    0, 
    0, 
    1, 
    0, 
    0, 
    0, 
    1 
]; 

Einige ziemlich Geist genau dort Daten richtig bläst?

Ich möchte A), um den Algorithmus mit dem Array dann B) testen den Algorithmus mit dem folgenden Array trainieren:

const array = [ 
    0, 
    0, 
    0, 
    1, 
    0, 
    0, 
    0, 
    1, 
    0 
]; 

Ergebnis sollte in eine 0 vorherzusagen.

Leider ist die Dokumentation ziemlich schlecht, es gibt keine klaren Codebeispiele. Hat jemand Beispiele?

+0

Antwort: https://stackoverflow.com/questions/43589015/lstm-figuring-out-the-library?noredirect=1&lq=1 –

Antwort

6

Diese Antwort wird nicht mit Synaptic, sondern mit Neataptic geschrieben. Ich entschloss mich, eine schnelle Antwort zu geben, die ich bald in die Dokumentation aufnehmen werde. Dies ist der Code, es funktioniert 9/10 Zeiten:

var network = new neataptic.architect.LSTM(1,6,1); 

// when the timeseries is [0,0,0,1,0,0,0,1...] 
var trainingData = [ 
    { input: [0], output: [0] }, 
    { input: [0], output: [0] }, 
    { input: [0], output: [1] }, 
    { input: [1], output: [0] }, 
    { input: [0], output: [0] }, 
    { input: [0], output: [0] }, 
    { input: [0], output: [1] }, 
]; 

network.train(trainingData, { 
    log: 500, 
    iterations: 6000, 
    error: 0.03, 
    clear: true, 
    rate: 0.05, 
}); 

Run it on JSFIDDLE to see the prediction! Weitere Prognosen offen this one.

Erklärung zu einigen Entscheidungen I:

  • I Option klar auf true gesetzt, wie Sie eine chronologische Zeitreihen Vorhersage machen wollen. Dies stellt sicher, dass das Netzwerk von Beginn an bei jeder Trainingsiteration beginnt und nicht am Ende der letzten Iteration fortfährt.
  • Rate ist ziemlich niedrig ist, werden höhere Raten ~0.2 bei einem MSE-Fehlern von
  • Der LSTM 1 Block von 6 weist Knoten Speicher stecken, geringere Mengen scheinen nicht so gut zu funktionieren.
+0

können Sie ein wenig mehr erklären, welche Eingabe/Ausgabe ist? Wird die erste Nummer der Zeitreihe eingegeben und die zweite Nummer der Zeitreihe ausgegeben? Dh: wenn meine Zeitreihe ist: [0.2, 0.4, 0.1, 0.2] würde ich dann 0.2 eingeben und 0.4 für die erste Zeile ausgeben? und dann für die zweite Zeile, Eingabe: 0,4 und Ausgabe: 0,1? – polyclick

+0

Ja genau, ich werde meine Antwort aktualisieren, um klarer zu sein. –

+1

Kopf hoch, neueste Version 'neue neataptic.architect.LSTM (1,6,1);', beachten Sie die 'A' &' a'. – Keith

Verwandte Themen