N8_*_*der 12 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(train, batch_size=50, shuffle=True)
Run Code Online (Sandbox Code Playgroud)
当我做:
for batch_idx, (data, target) in enumerate(train_loader):
data, target = Variable(data), Variable(target)
optimizer.zero_grad()
output = model(data) # error occurs here
Run Code Online (Sandbox Code Playgroud)
我得到了一个错误的错误:
TypeError:addmm_收到了一个无效的参数组合 - got(int,int,torch.DoubleTensor,torch.FloatTensor),但是期望的一个:[...]
*(浮点测试版,浮动阿尔法,火炬.DoubleTensor mat1,火炬. DoubleTensor mat2)不匹配,因为一些参数具有无效类型:(int,int,torch.DoubleTensor,torch.FloatTensor)
*(float beta,float alpha,torch.SparseDoubleTensor mat1,torch.DoubleTensor mat2)没有匹配,因为一些参数具有无效类型:(int,int,torch.DoubleTensor,torch.FloatTensor)
最后一个错误来自:
output.addmm_(0,1,input,weight.t())
正如你在我的代码中看到的那样,我尝试使用.double()来转换张量 - 但这不起作用.为什么他将一个数组转换为FloatTensor对象而另一个数组转换为DoubleTensor?有任何想法吗?
mex*_*mex 14
您的numpy阵列64-bit floating point将被torch.DoubleTensor标准转换为.现在,如果将它们与模型一起使用,则需要确保模型参数也是如此Double.或者你需要确保你的numpy数组被转换为Float,因为模型参数是标准的转换为float.
因此,请执行以下任一操作:
data_utils.TensorDataset(torch.from_numpy(X).float(), torch.from_numpy(Y).float())
Run Code Online (Sandbox Code Playgroud)
或做:
model.double()
Run Code Online (Sandbox Code Playgroud)
如果您想要将模型参数,输入和目标转换为Float或,则取消Double.
这是因为在PyTorch中,你不能在不同类型的Tensor之间进行操作.你data是DoubleTensor,但模型参数是FloatTensor.所以你得到这个错误信息.正如@mexmex所说,转换data为FloatTensor使其符合模型参数类型.
不要反过来做! PyTorch开发人员极力阻止将模型转换为double,因为GPU不擅长双精度计算.此外,浮点数足以深入学习.
| 归档时间: |
|
| 查看次数: |
16878 次 |
| 最近记录: |