如何在 PyTorch 中正确实现 Seq2Seq LSTM 的填充?
Posted
技术标签:
【中文标题】如何在 PyTorch 中正确实现 Seq2Seq LSTM 的填充?【英文标题】:How to properly implement padding for Seq2Seq LSTM in PyTorch? 【发布时间】:2020-06-05 03:12:02 【问题描述】:在这个PyTorch tutorial 中,尽管输入和输出长度可变,但他们没有使用填充。它似乎工作正常,但如何?如果输入是可变长度的,我们不应该实现填充吗?解决这个问题的正确方法是什么?
谢谢。
【问题讨论】:
【参考方案1】:是的,你是对的。如果批量大小大于 1 并且序列大小不同,则应填充输入张量。 但是该示例将输入张量生成为
def inputTensor(line):
tensor = torch.zeros(len(line), 1, n_letters) # <-- (<sequence_length>, <batch_size>, <input_dim>)
for li in range(len(line)):
letter = line[li]
tensor[li][0][all_letters.find(letter)] = 1
return tensor
在 pytorch 的 RNN、LSTM 和 GRU 中,除非显式传递 batch_first=True
,否则第 1 维实际上是序列长度,第 2 维是批量大小。
这个例子只是为了展示流程,但是我认为他们应该对此做一个小说明。
【讨论】:
以上是关于如何在 PyTorch 中正确实现 Seq2Seq LSTM 的填充?的主要内容,如果未能解决你的问题,请参考以下文章