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是否相同。
RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.cuda.HalfTensor) should be._第1张图片

type

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

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

 data.to(torch.float16)

RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.cuda.HalfTensor) should be._第2张图片

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

在这里插入图片描述

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

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

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

你可能感兴趣的:(数据预处理,pytorch,深度学习)