Python Pytorch:将FloatTensor转换为DoubleTensor
我有2个numpy数组,我将其转换为张量以使用TensorDataset对象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
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不擅长双精度计算。此外,浮点运算对于深入学习来说已经足够了