我正在关注本教程: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类型,但这没有用。
我什至下载了整个笔记本以及随附的文件,该错误似乎在原始教程中仍然存在。
任何想法都可能导致此错误?
谢谢!
答案 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))
一个简单的解决方法。但是现在它对我有用。炬管exp
和sin
以前可能支持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 上运行它。不同版本之间有些不兼容。