RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Long‘解决方法

在尝试使用torch.nn.LayerNorm时遇到错误,因为该层不接受long类型数据。将数据转换为浮点型,首先尝试使用dtype=float,但发现LayerNorm期望的是double类型。然而,即使使用a.double(),问题仍未解决。最终,通过将数据转换为torch.float32成功解决了问题,这表明LayerNorm实际上需要的是float32类型输入。
摘要由CSDN通过智能技术生成

问题出现的场景:

输入:

import torch
import torch.nn as nn
a=torch.randint(10,[3,4])
# a=torch.DoubleTensor(a)
# a=a.double()
print(a)
layer_norm=nn.LayerNorm(4)
layer_norm(a)

我就是想测试一下经过layernorm之后的输出会变成什么样

但是报错了

 意思是正则化不能处理类型为long(长整型)的数据

然后我想到在网络中梯度下降也不能处理整形数据

哪解决方案就出来了,讲其转换成浮点型

我用dtype=float来指定数据类型

输入:

import torch
import torch.nn as nn
a=torch.randint(10,[3,4],dtype=float)

print(a)
layer_norm=nn.LayerNorm(4)
layer_norm(a)

又出错了

 问题是,期待的是double数据类型,但是找到的是float数据类型

首先要知道是没有办法通过dtypy指定double数据类型的

但是可以通过a.double()来指定,但是依然会出现上面的错误,为什么呢?

已经按照他报错的问题进行修改了,还是不行,查阅资料:

 从上面上面来看float64应该是符合我们要求的double数据类型,从上面的输出来看,指定dtype=float时已经讲数据转换成float64了,但还是报错了

我们尝试用.to(torch.float32)将其转换成单精度浮点数,没想到成功了

输入:

import torch
import torch.nn as nn
a=torch.randint(10,[3,4]).to(torch.float32)
print(a)
layer_norm=nn.LayerNorm(4)
layer_norm(a)

 输出:

 总结:nn.LayerNorm期待的输入是float32的,,,但jupyter notebook这个报错的确挺让人迷惑的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值