RuntimeError: "exp" not implemented for 'torch.LongTensor'

RuntimeError: "exp" not implemented for 'torch.LongTensor'

我正在学习本教程:http://nlp.seas.harvard.edu/2018/04/03/attention.html 实现 "Attention Is All You Need" 论文中的 Transformer 模型。

但是我收到以下错误: RuntimeError:"exp" 未针对 'torch.LongTensor'

实施

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

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

在这里建造时:

pe = PositionalEncoding(20, 0)

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

我什至下载了整个笔记本和附带的文件,但错误似乎仍然存在于原始教程中。

知道是什么导致了这个错误吗?

谢谢!

似乎 torch.arange return 是 LongTensor,请尝试 torch.arange(0.0, d_model, 2) 强制火炬 return 改为 FloatTensor

我碰巧也跟着这个教程。

对我来说,我刚得到 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 但现在不支持了(不太确定)。

@shai 的建议对我有用。我在两个地方使用 0.0 修改了 PositionalEncodinginit 方法:

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

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

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