【问题标题】:Simple RNN in TorchTorch 中的简单 RNN
【发布时间】:2017-02-06 23:14:53
【问题描述】:

我正在尝试在 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 吗?
  • 这段代码似乎有点简单,我猜它缺少一些胶水。但是缺少哪些部分才能使其完整?

【问题讨论】:

    标签: torch recurrent-neural-network


    【解决方案1】:

    除非这不是你的全部代码,否则会有很多缺失,而不仅仅是胶水。

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

    2- 除非您真的希望您的网络仅反向传播 5 个时间步,否则我不会乱用 rho

    3- ClassNLLCriterion 期望日志概率作为输入

    4- 您需要一个优化算法来实际训练您的网络,例如 SGD(请参阅 torch 的 optim 库)

    5- 通常你在网络中至少需要一个输入层和一个输出层。输入层会将您的输入转换为嵌入,然后通过您的隐藏层(可能是 LSTM 层)转发。 LookupTable 可用于输入层。输出层可能会使用 softmax 层在您的可能输出上形成概率分布。

    6-确实有点太简单了

    nn.LookupTable 是一个为您的输入存储嵌入的模块。例如,如果您尝试预测序列中的下一个字符,那么您可以有一个大小为 26xinDim 的 LookupTable,其中您为字母表中的每个字符嵌入大小为 inDim 的内容。您确实可以使用一个。

    看到这里,我怀疑您可能并不完全熟悉神经网络的构建方式。我建议您在开始之前先熟悉一下自己。Here 是 Michael Nielsen 写的一本关于深度学习的非常好的书。他非常直观地解释了一切。

    查看 Element-Research/rnn 或 torch/nn 中的示例也很有帮助。 Karpathy 的char-rnn 也很有趣。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 2018-04-02
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2019-08-09
      • 1970-01-01
      相关资源
      最近更新 更多