【问题标题】:Dead simple example of synaptic js lstm rnn algorithm突触js lstm rnn算法的死简单示例
【发布时间】:2017-12-01 23:26:09
【问题描述】:

没有一个非常简单的 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

不幸的是,文档很糟糕,没有明确的代码示例。谁有例子?

【问题讨论】:

标签: javascript algorithm machine-learning


【解决方案1】:

这个答案不是用 Synaptic 写的,而是用 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

对我做出的一些选择的解释:

  • 我将选项 clear 设置为 true,因为您想要进行时间序列预测。这可确保网络从每次训练迭代的“开始”开始,而不是从最后一次迭代的“结束”继续。
  • 速率相当低,更高的速率会卡在 MSE 错误 ~0.2
  • LSTM 有 6 个内存节点的 1 个块,较低的数量似乎也无法正常工作。

【讨论】:

  • 你能解释一下什么是输入/输出吗?是输入时间序列的第一个数字,输出时间序列的第二个数字吗?即:如果我的时间序列是: [0.2, 0.4, 0.1, 0.2] 那么我是否会在第一行输入 0.2 并输出 0.4?然后对于第二行,输入:0.4 和输出:0.1?
  • 是的,我会更新我的答案以更清楚。
  • 请注意,最新版本new neataptic.architect.LSTM(1,6,1);,请注意Aa
猜你喜欢
  • 1970-01-01
  • 2016-07-06
  • 2020-07-31
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
相关资源
最近更新 更多