函数 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)
所以,我的主要问题来了:
如果我将此数据大小输入 LSTM 模型 nn.LSTM(N, hidden_size),
LSTM 模型是否已经在整批中进行递归前馈?
我也对seq_len感到困惑,而seq_len>1,输出将得到seq_len的维度。
这是否意味着输出包含序列的递归操作?
我不确定我把问题说清楚了,但我的理解变得很混乱..lol
希望有人能帮我整理一下正确的理解。
是的,前提是每个样本的序列长度相同(这里似乎是这样)。如果没有,你必须用 torch.nn.utils.rnn.pad_sequence
来填充,例如
是的,LSTM扩展到每个时间步并且每个时间步都有输出。因此,您不必分别为每个元素应用它。
我目前正在学习 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)
所以,我的主要问题来了:
如果我将此数据大小输入 LSTM 模型 nn.LSTM(N, hidden_size), LSTM 模型是否已经在整批中进行递归前馈?
我也对seq_len感到困惑,而seq_len>1,输出将得到seq_len的维度。 这是否意味着输出包含序列的递归操作?
我不确定我把问题说清楚了,但我的理解变得很混乱..lol 希望有人能帮我整理一下正确的理解。
是的,前提是每个样本的序列长度相同(这里似乎是这样)。如果没有,你必须用
torch.nn.utils.rnn.pad_sequence
来填充,例如是的,LSTM扩展到每个时间步并且每个时间步都有输出。因此,您不必分别为每个元素应用它。