2017-04-23 36 views
3

這是非常瘋狂的,沒有死簡單 LSTM RNN預測時間序列數據的例子。突然的js lstm rnn算法死簡單的例子

https://github.com/cazala/synaptic

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

我想下面的陣列中使用的歷史數據:

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

一些非常令人興奮的數據就在那裏吧?

我想A)培養與陣列然後B)的算法測試用下面陣列的算法:

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

應導致它預測0

不幸的是,文檔非常糟糕,沒有明確的代碼示例。任何人有任何例子?

+0

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

回答

6

本答案不是用新立得書寫,而是用Neataptic寫的。我決定做出一個快速的回答,我很快就會把它包含在文檔中。這是代碼,它的工作原理9/10倍:

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!更多的預測,開放this one

說明一些選擇,我做:

  • 明確設置選項設置爲true,你想要做一個時間的時間序列預測。這確保了網絡從每次訓練迭代的'開始'開始,而不是從最後一次迭代的'結束'繼續。
  • 速率相當低,更高的速率將卡住在一個MSE錯誤~0.2
  • 該LSTM有1塊6個內存節點,較低的數量似乎並沒有工作。
+0

你能解釋一下多一點什麼樣的輸入/輸出是什麼?輸入時間序列的第一個數字並輸出時間序列的第二個數字?即:如果我的時間序列是:[0.2,0.4,0.1,0.2],那麼我會輸入0.2並輸出0.4作爲第一行?然後在第二行輸入:0.4和輸出:0.1? – polyclick

+0

是的,我會更新我的答案,以便更清楚。 –

+1

Heads up,latest version'new neataptic.architect.LSTM(1,6,1);',注意'A'&'a'。 – Keith