首页 > 解决方案 > 通常如何对 RNN/LSTM 的序列数据执行批处理

问题描述

这个Udacity 课程笔记本以我不直观的方式批处理数据。

对于长序列的数据,他们首先截断数据,使其可以被batch_size. 接下来,他们.reshape()的数据是(batch_size, -1)。然后他们在这些批次的子序列上创建一个滑动窗口。当滑动窗口超出范围时,它们会在末尾添加假数据(通过环绕到)。

这个提供的图形可能比我能解释得更好:

在此处输入图像描述

我只是想知道这种做法是否正常,或者是否有其他方式。批次是不连续的子序列似乎很奇怪。这不会使解释单个批次的输出变得困难吗?

有更好的方法吗?视频中的女人字面意思是说“我不知道为什么会这样,但我以前见过,而且网络训练很好”。

标签: machine-learningneural-networkpytorchlstm

解决方案


您应该从 pytorch 查看有关填充序列的文档。(如果我有更多的经验,我会给你一个更详细的解释,但如果我从来没有真正理解过他们的话!)

打包序列: https ://pytorch.org/docs/master/generated/torch.nn.utils.rnn.PackedSequence.html#torch.nn.utils.rnn.PackedSequence

包填充序列: https ://pytorch.org/docs/master/generated/torch.nn.utils.rnn.pack_padded_sequence.html#torch.nn.utils.rnn.pack_padded_sequence

填充序列: https ://pytorch.org/docs/master/generated/torch.nn.utils.rnn.pad_packed_sequence.html#torch.nn.utils.rnn.pad_packed_sequence

焊盘序列: https ://pytorch.org/docs/master/generated/torch.nn.utils.rnn.pad_sequence.html#torch.nn.utils.rnn.pad_sequence

打包顺序: https ://pytorch.org/docs/master/generated/torch.nn.utils.rnn.pack_sequence.html#torch.nn.utils.rnn.pack_sequence

名字有点混乱。但这个想法是你创建一个具有批量中最大序列大小的张量。其他序列将被填充以与 bach 中最长的序列具有相同的大小。这个打包的填充序列被提供给循环模型(RNN、LTMS、GRU,你最喜欢的)。有了它,您可以支持具有较小内存限制的任意序列。


推荐阅读