Pytorch 运行时错误:";exp";未针对'实施;火炬。龙腾传感器&x27;

Pytorch 运行时错误:";exp";未针对'实施;火炬。龙腾传感器&x27;,pytorch,tensor,attention-model,Pytorch,Tensor,Attention Model,我将学习本教程: 从“注意就是你所需要的”这篇论文中实现变压器模型 但是,我得到以下错误: 运行时错误:“exp”未为“torch.LongTensor”实现 这是PositionEnconding类中导致错误的行: div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model)) 在此处施工时: pe = PositionalEncoding(20, 0) 有什么想法吗??我已经尝试过将其转

我将学习本教程: 从“注意就是你所需要的”这篇论文中实现变压器模型

但是,我得到以下错误: 运行时错误:“exp”未为“torch.LongTensor”实现

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

div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))
在此处施工时:

pe = PositionalEncoding(20, 0)
有什么想法吗??我已经尝试过将其转换为张量-浮点类型,但没有成功

我甚至下载了整个笔记本以及附带的文件,错误似乎一直存在于原始教程中

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


谢谢

看起来像是
torch.arange
返回一个
LongTensor
,尝试
torch.arange(0.0,d_模型,2)
强制torch返回一个
FloatTensor

我碰巧也遵循了本教程

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


只是一个简单的修复。但现在它对我有用。火炬
exp
sin
可能以前支持
LongTensor
,但现在不支持了(不太确定)。

shai给出的建议对我有效。我修改了
init
PositionalEncoding
方法,在两个点中使用
0.0

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上运行失败。不同版本之间存在不兼容。

代码中的d_模型是什么?@AkhileshPandey d_模型是初始化位置编码类的参数之一:def_uinit_u(self,d_模型,dropout,max_len=5000):也可以在这里找到整个笔记本:在查看代码后,我发现在某一点上d_model的值是20。使用这个值,我发现该行可以很好地将其转换为其他类型,如a=a.type(torch.float36),然后调用torch.exp(a)。我运行了代码,它可以很好地为我工作。看看你是否抄对了。嗨,谢谢你的回复!但这似乎不起作用:(@noob你确定这行代码会产生这个错误吗?你能(在调试中)验证一下
torch.arage(0,d_模型,2)
dtype
确实是
float
而不是
long
?非常感谢你,欢迎使用堆栈溢出!:)对我来说也是(同一教程;代码复制到了*.py脚本):需要将
0,
切换到
0.0,
,如上所示。:-)
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.0, max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0.0, d_model, 2) * -(math.log(10000.0) / d_model))