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))
只是一个简单的修复。但现在它对我有用。有可能火炬 exp
和 sin
以前支持 LongTensor
但现在不支持了(不太确定)。
@shai 的建议对我有用。我在两个地方使用 0.0
修改了 PositionalEncoding
的 init
方法:
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 上无法通过它。不同版本之间存在一些不兼容的问题。
我正在学习本教程: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))
只是一个简单的修复。但现在它对我有用。有可能火炬 exp
和 sin
以前支持 LongTensor
但现在不支持了(不太确定)。
@shai 的建议对我有用。我在两个地方使用 0.0
修改了 PositionalEncoding
的 init
方法:
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 上无法通过它。不同版本之间存在一些不兼容的问题。