nn.LSTM函数在batchs / seq_len中的行为如何?

时间:2019-09-27 12:11:34

标签: pytorch lstm operation sequence-modeling

我目前正在学习将nn.LSTM与pytorch结合使用,不得不询问该功能的工作原理。

基本上,我正在尝试填充数据集矩阵(M x N)。 由于数据集是矩阵,因此我想使用 Dataloader (utils.data.Dataset)将数据集递归地(作为时间步长)输入LSTM网络。

我感到困惑的是输入(seq_len,batch,input_size)的大小

让我说我的data_loader的批次大小为10。 为了生成正确格式的train_loader,我必须将(M x N)的先前大小更改为包括sequence_length的大小,该大小可以简单地转换为(M / seq_len,seq_len,N)。

然后我的nn.LSTM的输入大小如下: (M / seq_len / batch_size,seq_len,N)

所以,我的主要问题是:

  1. 如果我将此数据大小输入LSTM模型nn.LSTM(N,hidden_​​size), LSTM模型已经在整个批次中进行递归前馈了吗?

  2. 我也对seq_len感到困惑,而seq_len> 1时,输出将获得seq_len的尺寸。 这是否意味着输出包含序列的递归操作?

我不确定我是否已将问题弄清楚了,但我的理解已被弄得一团糟..大声笑 希望有人可以帮助我组织正确的理解。

1 个答案:

答案 0 :(得分:1)

  1. 是的,前提是每个样本的序列长度都相同(这里似乎是这种情况)。如果不是,则必须使用torch.nn.utils.rnn.pad_sequence进行填充。

  2. 是的,LSTM扩展到每个时间步,并且已经为每个时间步输出了。因此,您不必将其分别应用于每个元素。