Expected object of type torch.FloatTensor but found type torch.cuda.FloatTensor for argument

从报错信息来:需要的输入参数类型为torch.FloatTensor,但实际上给定是torch.cuda.FloatTensor

解决方法
首先可以肯定的是由于张量类型不一致导致的;
查了很多资料发现本质是由于两个张量不在同一个空间例如一个在cpu中,而另一个在gpu中因此会引发错误。

nn.Module 调用.to(device)后它内部参数的数据类型会从 torch.FloatTensor 变成 torch.cuda.FloatTensor, torch.Tensor 调用 .to(device)方法后数据类型会从torch.*Tensor 变成 torch.cuda.*Tensor

print result发现为torch.FloatTensor类型,由此想到出现问题的是nn.BatchNorm3d中其他的参数类型为torch.cuda.FloatTensor.
所以最后的解决方案:将result转为torch.cuda.FloatTensor类型
result=new_output.type(torch.cuda.FloatTensor)

这个问题虽然解决起来很简单,但是在查找 bug 原因的过程中可是一点不容易,这也告诉我们数据类型真的很重要,我们在复现论文或者自己做实验的时候要时刻注意自己手中数据在网络中的类型变化。


https://www.jianshu.com/p/1fa86e060e5a  mark

猜你喜欢

转载自blog.csdn.net/qq_39938666/article/details/87901228