Torch中的简单RNN

时间:2016-09-07 12:19:30

标签: torch recurrent-neural-network

我正在尝试在Torch中实施RNN。为了习惯它,我开始用一个简单的任务来预测序列中的下一个项目。序列是{1,2,3,4,5,6,7,8,9,10}的子序列,随机选择偏移量。

我想实现一个带有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 个答案:

答案 0 :(得分:2)

除非这不是你的整个代码,否则会有相当多的缺失,而不仅仅是胶水。

1- LSTM图层的输入和输出大小为1没有多大意义

2-除非你真的希望你的网络只反向传播5个步骤,否则我不会乱用rho

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也很有趣。

我希望这有任何帮助。