如何在 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 的填充?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python的类中正确实现辅助函数

在这种情况下,如何在 Flutter 中正确实现 FutureBuilder?

如何在php中正确实现结构化菜单

ios - 如何在 ios swift 中正确实现后台获取

如何在 Keras 中正确实现自定义活动正则化器?

如何在 Windows 10 UWP 中正确实现语音识别