【问题标题】:Multivariate input for LSTM in tensorflow张量流中LSTM的多元输入
【发布时间】: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


    【解决方案1】:

    我编辑了你的代码,以便你可以得到你需要的结果,

    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 方法的要求。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2019-02-10
      • 2018-12-29
      • 1970-01-01
      相关资源
      最近更新 更多