微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 张量流中LSTM的多变量输入

我在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分钟将数据拆分成段.因此,您将输入30(分钟)* 60(每秒一次)测量值来输入LSTM,输出将是从最后给定输入(一次测量)起30分钟后的降雨率.

到目前为止,这个简单的模型解决了这个问题,但是如何添加其他输入呢?也就是说,不是仅使用降雨率在30分钟后预测自身,而是每秒向LSTM提供湿度和风速.这将是一个LSTM,其中3个序列作为输入,每个输入将包含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方法所需的形状.

希望这可以帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐