Pytorch 运行时错误:";exp";未针对'实施;火炬。龙腾传感器&x27;
我将学习本教程: 从“注意就是你所需要的”这篇论文中实现变压器模型 但是,我得到以下错误: 运行时错误:“exp”未为“torch.LongTensor”实现 这是PositionEnconding类中导致错误的行: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) 有什么想法吗??我已经尝试过将其转
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))