2017-09-05 82 views
0

我首先使用L.LSTM,後來我發現這個NStepLSTM,這是官方教程文檔的露出部分。 https://docs.chainer.org/en/stable/reference/generated/chainer.links.NStepLSTM.html?highlight=Nstep爲什麼NStepLSTM沒有reset_state方法?

  1. 爲什麼chainer.links.NStepLSTM或chainer.links.NStepBiLSTM沒有reset_state?如何reset_state?

  2. 是它傳遞的序列(每一個是一個序列chainer.Variable,例如一個文章包含多個單詞是一個變量)的列表?這個類的目的是處理不同的長度序列嗎?

  3. 才能使用截斷BPTT以節省內存chainer.links.NStepLSTM?

回答

0

1. NStepLSTM如何得到一個批處理序列的,並返回一個批輸出的序列,雖然LSTM得到一批字。您不需要使用for-loop來使用NStepLSTM。 NStepLSTM使用cuDNN,這是NVIDIA提供的庫,速度非常快。 NStepLSTM沒有狀態。如果要鏈接NStepLSTM,請使用NStepLSTM的輸出。請參閱seq2seq示例:https://github.com/chainer/chainer/blob/master/examples/seq2seq/seq2seq.py

2. 是的。它可以觀察到諸如從句子創建的一批嵌入矢量序列。您可以使用不同長度的序列。請參見seq2seq示例。 注意L.NStepLSTM可以得到語句序列,但F.NStepLSTM可以得到換位序列。我的意思是它可以得到一連串的單詞。實際上,L.NStepLSTM在其實現中調用F.transpose_sequences和F.NStepLSTM。

3. 對不起它是困難的。正如我所說,NStepLSTM是cuDNN的RNN庫的封裝,它不支持BPTT。當然,你可以拆分句子並調用NStepLSTM兩次。

+0

你的意思是使用NStepLSTM時,我不需要寫BPTT更新?我必須實現一種情況,其中NStepLSTM的每個時間步的輸出將被連接,然後爲下一層的饋送輸入(NStepLSTM之後的層將使用NStepLSTM的所有時間步),在這種情況下,如何編寫BPTT更新程序?或者你的意思是我不需要明確寫入BPTT更新程序? – machen

+0

做變量列表的NStepLSTM輸入:該列表中的每個變量之間需要有時間相關性? – machen

+0

如果我只想用最後一步計算損失,因爲NStepLSTM返回3個變量,我應該使用最後一個還是第一個? – machen

相關問題