RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight'

RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight'

我的输入张量是torch.DoubleTensor类型。但是我得到了下面的 RuntimeError:

RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight'

我没有明确指定权重的类型(即我没有自己初始化权重。权重是由 pytorch 创建的)。什么会影响转发过程中权重的类型?

非常感谢!!

weightsbiases 的默认类型是 torch.FloatTensor。因此,您需要将模型转换为 torch.DoubleTensor 或将输入转换为 torch.FloatTensor。要投射你的输入,你可以做

X = X.float()

或将您的完整模型转换为 DoubleTensor 作为

model = model.double()

您还可以使用

为所有张量设置默认类型
pytorch.set_default_tensor_type('torch.DoubleTensor')

最好将您的输入转换为 float 而不是将您的模型转换为 double,因为 double 数据类型的数学计算在 GPU 上相当慢。

我也收到了完全相同的错误。根本原因竟然是我的数据加载代码中的这条语句:

t = t.astype(np.float)

这里 np.float 转换为映射到 DoubleTensor 的 64 位浮点数。所以将其更改为,

t = t.astype(np.float32)

解决了问题。