首页 文章

使用针对Torch Lua的元素研究RNN批处理可变长度序列

提问于
浏览
1

我正在尝试用元素研究的RNN模块训练LSTM模型,并使用语音音译数据 . 我将训练数据作为X和Y的单独表格.X和Y都包含每个训练示例作为张量,即X中的张量包含序列中每个字符的ASCII值,Y中的张量包含结果序列的ASCII值 . 我已经创建了一种形式的数据,对于X和Y的特定示例,它完美地排列并用零填充进行训练 . 所以,我可以一次用一个例子训练LSTM . 但是,问题是,我不知道如何进行批量训练,因为,每个示例张量都有不同的长度 .

我想,我可以通过这种表述来说清楚:

X{                                      Y{ 
[EEEEE00000]                            [00000MMMMM]
[EEE0000]                               [000MMMM]
[EEEEEEEE0000000000]                    [00000000MMMMMMMMMM]
.                                       .
.                                       .
.                                       .
}                                       }

其中,EEEE ..表示输入序列,MMMM ...表示输出序列..

我还没有设计模型,因为我正在考虑一个能够支持批量训练的合适模型 . 我是想修改数据还是应该以修改数据的方式设计模型?如果它的模型,我怎么能这样做?

脚注:此LSTM必须在每个训练示例后忘记先前的序列 . 因为每个例子都是独立的 . 即,backprop应该只在 a_single_example_length 时间步骤完成 .

1 回答

  • 0

    您有一个可变长度序列的数据集,并且您想要进行批处理 . 解决方案是将X和Y组织为 seqlen x batchsize 张量,其中每个独立序列由零(或零的张量)分隔:

    0 0
    1 2
    1 2
    2 3
    0 0
    2 3
    2 3
    1 2
    

    在上面的例子中,我们有序列1-1-2,2-2-1,2-2-3和3-3-2,每个序列用零分隔 .

    使用rnn:maskZero()rnn 可以检测到这些零并在检测到时忘记先前的隐藏状态 . 这实际上意味着BPTT将仅在序列的持续时间内反向传播(即,零重置BPTT) .

相关问题