张量流中LSTM的多元输入

问题描述:

我正面临着一些怀疑,试图在Tensorflow下使用多输入序列(多变量)实现LSTM。张量流中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方法所需的形状。

希望这会有所帮助。

+0

谢谢!有效 :) – DarkHawk