使用 RNN (LSTM) 预测时间序列向量 (Theano)

机器算法验证 神经网络 Python lstm
2022-02-06 07:37:58

我有一个非常简单的问题,但我找不到合适的工具来解决它。

我有一些相同长度的向量序列。现在我想在这些序列的训练样本上训练 LSTM RNN,然后让它预测新的长度向量序列n基于几个启动向量。

我找不到可以做到这一点的简单实现。我的基础语言是 Python,但任何几天都没有安装的东西都可以使用。

我尝试使用Lasagne,但 RNN 的实现还没有准备好,它在单独的包nntools中。无论如何,我尝试了后一种,但我不知道如何训练它,然后通过一些测试向量启动它并让它预测新的。块是同样的问题——LSTM RNN 没有可用的文档,尽管似乎有一些类和函数可以工作(例如blocks.bricks.recurrent)。

Theano 中有几种 RNN LSTM 的实现,比如,GroundHog一些论文的代码,但没有一个有教程或指导如何做我想做的事。theano-rnntheano_lstm

我发现唯一可用的解决方案是使用 Pybrain。但不幸的是,它缺乏 Theano 的特性(主要是 GPU 计算)并且是孤立的(没有新特性和支持)。

有谁知道我在哪里可以找到我要的东西?易于使用 RNN LSTM 预测向量序列?

编辑:

我像这样尝试过 Keras:

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM

model = Sequential()
model.add(Embedding(12, 256))
model.regularizers = []
model(LSTM(256, 128, activation='sigmoid', 
               inner_activation='hard_sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(128, 12))
model.add(Activation('sigmoid'))
model.compile(loss='mean_squared_error', optimizer='rmsprop')

但是我在尝试适应它时遇到了这个错误model.fit(X_train, y_train, batch_size=16, nb_epoch=10)

IndexError: index 800 is out of bounds for axis 1 with size 12

whileX_trainy_train是数组的数组(长度为 12),例如[[i for i in range(12)] for j in range(1000)]

3个回答

我终于找到了一种方法并将其记录在我的博客上。

有几个框架的比较,然后还有 Keras 中的一种实现。

我建议如下:

  1. Theano 真的很强大,但是是的,鳕鱼有时很难开始

  2. 我建议您查看 breze:https ://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb稍微容易一些理解并有一个 LSTM 模块。此外,哈佛的 autograd 是一个有趣的选择,它对 numpy 函数进行自动符号微分https://github.com/HIPS/autograd/blob/master/examples/lstm.py,因此您可以轻松了解发生了什么。

  3. 我是 python 粉丝,但这是我个人的喜好。您是否考虑过使用 Torch7 是最用户友好的神经网络框架,并且也被 Google Deepmind 和 Facebook AI 使用?您可以查看这篇关于 RNN 的非常有趣的博客文章http://karpathy.github.io/2015/05/21/rnn-effectiveness/此外,文章的 github 存储库中提供了 LSTM 实现,而替代方案是 rnn 包https://github.com/Element-Research/rnn

我已经测试了 LSTM 用 Theano 预测一些时间序列。我发现对于一些平滑的曲线,可以正确预测。然而对于一些曲折的曲线。很难预测。详细文章如下: Predict Time Sequence with LSTM

预测结果可以如下所示: