我目前正在学习将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)
如果我将此数据大小输入LSTM模型nn.LSTM(N,hidden_size), LSTM模型已经在整个批次中进行递归前馈了吗?
我也对seq_len感到困惑,而seq_len> 1时,输出将获得seq_len的尺寸。 这是否意味着输出包含序列的递归操作?
我不确定我是否已将问题弄清楚了,但我的理解已被弄得一团糟..大声笑 希望有人可以帮助我组织正确的理解。
答案 0 :(得分:1)
是的,前提是每个样本的序列长度都相同(这里似乎是这种情况)。如果不是,则必须使用torch.nn.utils.rnn.pad_sequence
进行填充。
是的,LSTM扩展到每个时间步,并且已经为每个时间步输出了。因此,您不必将其分别应用于每个元素。