2017-02-26 112 views
6

(使用python)Tensorflow LSTM-Cell的輸出

我對Tensorflow LSTM實現有個疑問。目前在TF幾個實現,但是使用:

cell = tf.contrib.rnn.BasicLSTMCell(n_units) 
  • 其中n_units是「平行」 LSTM細胞的量。

然後讓我的輸出I撥打:

rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, x, 
         initial_state=initial_state, time_major=False) 
  • 其中(如time_major=Falsex是形狀(batch_size, time_steps, input_length)
  • 其中batch_size是我的batch_size
  • 其中time_steps是量timeteps我的RNN將通過
  • 其中input_length是我的輸入矢量中的一個(在載體一個特定批次供給到網絡上的一個特定時間步長)的長度

我期望rnn_outputs是形狀(batch_size, time_steps, n_units, input_length)作爲我還沒有指定的另一個輸出大小。 nn.dynamic_rnn的文檔告訴我輸出形狀爲(batch_size, input_length, cell.output_size)tf.contrib.rnn.BasicLSTMCell的文檔確實有一個屬性output_size,默認爲n_units(我使用的LSTM-cells的數量)。

那麼每個LSTM-Cell只會爲每個給定的時間步輸出一個標量嗎?我希望它能輸出一個輸入矢量長度的矢量。這似乎不是我現在的理解,所以我很困惑。你能告訴我是否是這種情況,或者我可以如何改變它以輸出每個單獨的lstm-cell的輸入向量大小的向量?

+0

您是如何得出結論的:每個LSTM單元只輸出每個給定時步的標量? – jabalazs

+0

你可以發佈一個主題或更大的代碼片段,以便我們可以自己查看/運行代碼以更好地理解上下文嗎? –

回答

2

我認爲主要的困惑在於LSTM單元的論點:num_units。不幸的是,它並不意味着,正如名字所暗示的,「LSTM單元的數量」應該等於您的時間步長。它們實際上對應於隱藏狀態下的維數(單元狀態+隱藏狀態向量)。 到dynamic_rnn()的調用返回形狀的張量:[batch_size, time_steps, output_size]其中,

(請注意,此)output_size = NUM​​_UNITS; if(num_proj = None)in lstm cell
where as,output_size = num_proj;如果它被定義。

現在,通常情況下,你將提取的最後time_step的結果並手動使用mat-mul + biases操作的IT項目,以輸出尺寸的大小,或在LSTM電池使用num_proj說法。
我已經度過了相同的困惑,不得不深入清理。希望這個答案清除一些。