我正面臨着一些懷疑,試圖在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)
預先感謝您。
謝謝!有效 :) – DarkHawk