RuntimeError:“ torch.LongTensor”未实现“ exp”

时间:2018-10-22 04:32:01

标签: pytorch tensor attention-model

我正在关注本教程:http://nlp.seas.harvard.edu/2018/04/03/attention.html 从“注意就是全部”中实现Transformer模型。

但是我遇到以下错误: RuntimeError:“ torch.LongTensor”未实现“ exp”

这是PositionalEnconding类中的导致错误的行:

div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))

在此处构建时:

pe = PositionalEncoding(20, 0)

有什么想法吗?我已经尝试过将其转换为Tensor Float类型,但这没有用。

我什至下载了整个笔记本以及随附的文件,该错误似乎在原始教程中仍然存在。

任何想法都可能导致此错误?

谢谢!

5 个答案:

答案 0 :(得分:23)

我碰巧也遵循了本教程。

对我来说,我刚得到torch.arange来生成浮点型张量

来自

position = torch.arange(0, max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))

position = torch.arange(0., max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0., d_model, 2) * -(math.log(10000.0) / d_model))

一个简单的解决方法。但是现在它对我有用。炬管expsin以前可能支持LongTensor,但现在不再支持(对此不太确定)。

答案 1 :(得分:2)

似乎torch.arange返回了LongTensor,请尝试使用torch.arange(0.0, d_model, 2)强制割炬返回FloatTensor

答案 2 :(得分:0)

@shai的建议对我有用。我在两个地方使用init修改了PositionalEncoding的{​​{1}}方法:

0.0

答案 3 :(得分:0)

对我来说,安装 pytorch == 1.7.1 解决了这个问题。

答案 4 :(得分:0)

就像鲁本斯所说的,在更高版本的 Pytorch 中,你不需要担心这些东西。我可以轻松地在桌面的 1.8.0 Pytorch 上运行它,但无法在我服务器的 1.2.0 Pytorch 上运行它。不同版本之间有些不兼容。