我正试图在火炬中实现一个RNN。为了适应它,我从一个简单的任务开始,预测序列中的下一个项目。序列是{1,2,3,4,5,6,7,8,9,10}的子序列,随机选择偏移量。
我想实现一个具有LSTM信元的隐藏层的网络体系结构。这就是为什么我使用nn.SeqLSTM(输入大小,输出大小)。
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发布于 2017-02-06 15:14:53
除非这不是您的全部代码,否则会有相当多的缺失,而不仅仅是胶水。
1-对于LSTM层,输入和输出大小为1没有多大意义。
2-我不会和rho混在一起,除非你真的希望你的网络倒传5个时间步骤。
3- ClassNLLCriterion期望日志概率作为输入
4-你需要一个优化算法才能真正训练你的网络,比如SGD (参见奥普提库)。
通常,网络中至少需要一个输入层和一个输出层。输入层将将您的输入转换为嵌入,然后通过隐藏层(可能是LSTM层)转发。可以在输入层中使用LookupTable。输出层可能会使用softmax层在可能的输出上形成概率分布。
这确实有点太简单了。
nn.LookupTable是一个为输入存储嵌入的模块。例如,如果您试图预测序列中的下一个字符,那么您可以得到大小为26xinDim的LookupTable,其中对字母表中的每个字符都有一个大小为inDim的嵌入。你可能真的需要一个。
看看这个,我怀疑你可能并不完全熟悉神经网络是如何构建的。我建议你在跳槽前多熟悉一点。这里是Michael关于深度学习的一本很好的书。他非常直观地解释了一切。
查看元素示例--Research/rnn或torch/nn也非常有用。卡洛普的char-rnn也很有趣。
我希望这有什么帮助。
https://stackoverflow.com/questions/39369803
复制相似问题