RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.cuda.HalfTensor) should be.

device

首先是查看输入的两个数据的device是否一致,出现这种情况的原因可能是因为device不同导致的,可能在不同的GPU上。

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
data.to(device)

通过这个设定一个device,然后将data转到device中,然后debug查看数据的device是否相同。
在这里插入图片描述

注意:numpy类型没有to这个方法,只有tensor才有!!!

type

在我这里,我的两个输入数据是在同一个cuda中,但是还是出错了,通过查看数据类型可以看出,一个是torch.cuda.float16,另一个是torch.cuda.float32,所以出现了上面的那个HalfTensor的错误。

通过这里,也知道了这个错误的原因了,正常是float32,所以HalfTensor就是float16了。找到原因,只需要改变数据类型为float16即可。

 data.to(torch.float16)

在这里插入图片描述

转换之后,代码就成功运行了!!!

在这里插入图片描述

这里再多说一句,如果碰到类似的权重和输入的数据类型不一致的情况下,我们可以使用模型默认的方式进行计算,也就是初始化之后,不改变模型中的参数的类型,删去model.half().float(),则模型的默认类型就是float32。

这里还是建议一般情况下不要改变数据类型,会比较乱,这种float16就是在不影响精度的情况下,减少计算资源的占用,减少GPU内存占用。

关键还是数据类型的问题,以后还是要注意这种细节!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值