Python Pytorch:将FloatTensor转换为DoubleTensor

Python Pytorch:将FloatTensor转换为DoubleTensor,python,torch,pytorch,Python,Torch,Pytorch,我有2个numpy数组,我将其转换为张量以使用TensorDataset对象 import torch.utils.data as data_utils X = np.zeros((100,30)) Y = np.zeros((100,30)) train = data_utils.TensorDataset(torch.from_numpy(X).double(), torch.from_numpy(Y)) train_loader = data_utils.DataLoader(trai

我有2个numpy数组,我将其转换为张量以使用TensorDataset对象

import torch.utils.data as data_utils

X = np.zeros((100,30))
Y = np.zeros((100,30))

train = data_utils.TensorDataset(torch.from_numpy(X).double(), torch.from_numpy(Y))
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True)
当我这样做时:

for batch_idx, (data, target) in enumerate(train_loader):
    data, target = Variable(data), Variable(target)
    optimizer.zero_grad()
    output = model(data)               # error occurs here
我得到了衰减错误:

TypeError:addmm_u收到无效的参数组合-Get(int,int,torch.DoubleTensor,torch.FloatTensor),但应为以下参数之一: […]
*(浮动β、浮动α、火炬双张量mat1、火炬双张量mat2) 不匹配,因为某些参数的类型无效:(int,int,torch.DoubleTensor,torch.FloatTensor)
*(浮动β,浮动α,火炬.稀疏双张量mat1,火炬.双张量mat2) 不匹配,因为某些参数的类型无效:(int,int,torch.DoubleTensor,torch.FloatTensor)

最后一个错误来自:

output.addmm(0,1,input,weight.t())

正如您在我的代码中看到的,我尝试使用.double()转换张量,但这不起作用。为什么他要将一个数组转换成浮动张量对象,而将另一个数组转换成双张量对象?
有什么想法吗?

您的
numpy
数组是
64位浮点
,将标准地转换为
torch.DoubleTensor
。现在,如果将它们用于模型,则需要确保模型参数也是双精度的。或者,您需要确保将
numpy
数组转换为
Float
,因为模型参数标准转换为
Float

因此,请执行以下任一操作:

data_utils.TensorDataset(torch.from_numpy(X).float(), torch.from_numpy(Y).float())
或者:

model.double()

如果要将模型参数、输入和目标强制转换为
Float
Double
,具体取决于

这是因为在PyTorch中,不能在不同类型的张量之间进行运算。您的
数据
双张量
,但模型参数是
浮动张量
。因此,您会收到此错误消息。正如@mexmex所说,将
数据
转换为
浮动张量
,使其与模型参数类型一致

不要反过来做因为GPU不擅长双精度计算。此外,浮点运算对于深入学习来说已经足够了