【问题标题】:batch processing variable length sequences using element research RNN for Torch Lua使用元素研究 RNN for Torch Lua 批处理可变长度序列
【发布时间】:2016-11-27 02:22:44
【问题描述】:

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

我想,我可以通过这个表述来表达清楚:

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

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

我还没有设计模型,因为我正在考虑一个合适的模型来支持批量训练。我想修改我的数据还是应该设计一个模型来修改这些数据?如果它在模型上,我该怎么做?

脚注:这个 LSTM 必须在每个训练示例之后忘记之前的序列。因为每个例子都是独立的。即,反向传播应该只在 a_single_example_length 个时间步长内完成。

【问题讨论】:

    标签: lua torch lstm recurrent-neural-network


    【解决方案1】:

    您有一个可变长度序列的数据集,并且想要进行批处理。解决方案是将您的 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)。

    【讨论】:

    • 那么,我可以输入这样的序列吗? (将每一对视为单独的原始创建矩阵 [seqlen x batchsize] 注意:零不是序列的一部分,它们表示序列的终端)` 00 12 13 22 02 13 20 30 00` 我认为,这将是一个我正在谈论的这种情况下的批处理序列。
    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多