张量流中 LSTM 的多元输入

Multivariate input for LSTM in tensorflow

我在尝试在 Tensorflow 下实现具有多个输入序列(多变量)的 LSTM 时遇到了一些疑问。

我是这样定义LSTM的:

def LSTM(x):
x = tf.reshape(x, [-1, input_length])
x = tf.split(x, input_length, 1)

rnn_cell = rnn.MultiRNNCell([rnn.BasicLSTMCell(n_hidden), rnn.BasicLSTMCell(n_hidden)])
outputs, states = rnn.static_rnn(rnn_cell, x, dtype=tf.float32)
return tf.matmul(outputs[-1], weights['out']) + biases['out']

数据张量是这样定义的:

# tf Graph input
X = tf.placeholder("float", [None, input_length, 1])
Y = tf.placeholder("float", [None, n_classes])

这对于已知长度的一维输入是可以的。我会给你一个简单的例子: 您每秒测量一次降雨率,因此您有一个大小为 N 的时间序列。您想要提前 30 分钟预测降雨率,因此您每 30 分钟将数据分成几段。因此,您可以为 LSTM 提供 30(分钟)*60(每秒一次)测量值的输入,输出将是从上次给定输入(一次测量值)起 30 分钟后的降雨率。

到这里,这个简单的模型就解决了问题,但是我应该怎么添加另一个输入呢?也就是说,不是仅使用降雨率来预测 30 分钟后的自身,而是还向 LSTM 提供例如每秒的湿度率和风速。那将是一个具有 3 个序列作为输入的 LSTM,并且每个输入都将包含 30 分钟 * 60 个测量值。

我需要添加一个 "number_of_sequences" 变量,但我不确定如何重新组织张量。我应该从我的代码中更改什么?我对 X 占位符的三个维度有点迷茫,也许是这样的?

X = tf.placeholder("float", [None, input_length, number_of_sequences])

还有将普通数据库转换成序列的代码,也许是这个?:

x = tf.reshape(x, [-1, input_length])
x = tf.split(x, input_length, number_of_sequences)

提前谢谢你。

我编辑了您的代码,以便您可以获得所需的结果,

input_length = 30*60
number_of_sequences =3

X = tf.placeholder("float", [None, input_length, number_of_sequences])


x = tf.reshape(X, [-1, input_length*number_of_sequences])
x = tf.split(x, input_length, 1)

现在x是一个长度为30*60的列表,列表中的一个元素的形状是[batch_size 3]。现在 x 的形状是 tf static_rnn 方法所要求的形状。

希望对您有所帮助。