首页 > 解决方案 > 函数 nn.LSTM 在 batches/seq_len 中的行为如何?

问题描述

我目前正在学习将nn.LSTM与 pytorch 一起使用,并且不得不询问该功能是如何工作的。

基本上我正在尝试提供我的数据集矩阵(M x N)。由于数据集是一个矩阵,我想使用Dataloader (utils.data.Dataset) 将数据集递归地(作为时间步长)馈送到 LSTM 网络中。

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

假设我正在使用 batch_size=10 获取我的 data_loader。为了生成具有正确形式的 train_loader,我必须将 (M x N) 的先前大小变成包括可以简单地转换为 (M/seq_len, seq_len, N) 的 sequence_length 的大小。

然后我的 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 希望有人可以帮助我组织正确的理解。

标签: pytorchlstmoperationsequence-modeling

解决方案


  1. 是的,只要每个样本的序列长度相同(这里似乎就是这种情况)。torch.nn.utils.rnn.pad_sequence如果没有,例如,您必须填充。

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


推荐阅读