2016-09-07 64 views
0

我正在嘗試在火炬中實現RNN。爲了適應它,我開始了一個預測序列中下一個項目的簡單任務。序列是{1,2,3,4,5,6,7,8,9,10}的子序列,隨機選擇一個偏移量。火炬中的簡單RNN

我想實現一個帶LSTM單元的隱藏層的網絡體系結構。這就是爲什麼我使用nn.SeqLSTM(inputsize,outputsize)

rho = 5 -- number of steps for bptt 
hiddensize = 15 
inputsize = 1 
outputsize = 1 
seqlen = 5 
nIndex = 10 
batchsize = 4 

seqlstm = nn.SeqLSTM(inputsize, outputsize) 
criterion = nn.SequencerCriterion(nn.ClassNLLCriterion()) 


outputs = seqlstm:forward(inputs) -- inputs is seqlen x batchsize x inputsize 
err = criterion:forward(outputs, targets) -- targets is seqlen x batchsize x 1 
  • 我需要一個nn.LookupTable?
  • 這段代碼看起來有點簡單,並且缺少一些我猜的膠水。但是,哪些零件缺失以使其完成?

回答

1

除非這不是你的整個代碼,否則會有很多缺失,而不僅僅是粘連。

1爲1的輸入和輸出尺寸爲LSTM層沒有太大的意義

2 - 我不會與RHO浪費時間,除非你真的想你的網絡backpropagate 5周的timesteps

3- ClassNLLCriterion預計數概率作爲輸入

4-需要,以實際訓練你的網絡,如SGD優化算法(參見optim庫通過火炬)

5 - 通常,您至少需要網絡中的輸入層和輸出層。輸入層會將您的輸入轉換爲嵌入,然後通過隱藏層(可能是LSTM層)轉發嵌入。 LookupTable可以用在輸入圖層中。輸出層可能會使用softmax層在可能的輸出上形成概率分佈。

6-的確是有點太簡單了

nn.LookupTable是存儲方式的嵌入您的輸入模塊。例如,如果您試圖預測序列中的下一個字符,那麼您可以使用一個大小爲26xinDim的LookupTable,其中您在字母表中爲每個字符嵌入了大小inDim。你確實可以使用一個。

看着這個,我懷疑你可能不完全熟悉如何構建神經網絡。我建議你在練習之前多練習一下。Here是Michael Nielsen關於深度學習的一本很好的書。他非常直觀地解釋了一切。

查看來自Element-Research/rnn或torch/nn的示例也非常有幫助。 Karpathy的char-rnn也很有趣。

我希望這有任何幫助。