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

How the function nn.LSTM behaves within the batches/ seq_len?

我目前正在学习 nn.LSTM 与 pytorch 一起使用,不得不问一下这个函数是如何工作的。

基本上我正在尝试提供我的数据集矩阵 (M x N)。 由于数据集是一个矩阵,我想使用 Dataloader(utils.data.Dataset).

将数据集递归地(作为时间步长)输入 LSTM 网络

我感到困惑的一点是 input(seq_len, batch, input_size)

的大小

假设我 data_loader batch_size=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的维度。 这是否意味着输出包含序列的递归操作?

我不确定我把问题说清楚了,但我的理解变得很混乱..lol 希望有人能帮我整理一下正确的理解。

  1. 是的,前提是每个样本的序列长度相同(这里似乎是这样)。如果没有,你必须用 torch.nn.utils.rnn.pad_sequence 来填充,例如

  2. 是的,LSTM扩展到每个时间步并且每个时间步都有输出。因此,您不必分别为每个元素应用它。