【发布时间】:2018-03-25 20:21:22
【问题描述】:
我在尝试在 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)
提前谢谢你。
【问题讨论】:
标签: python input tensorflow lstm rnn