Numpy 在PyTorch中设置浮点类型时,tensor类型和dtype之间的区别是什么,何时应该设置一个而不是另一个?
我使用double作为我的模型输入和输出,所以我尝试设置torch使用float64而不是float32。两者之间到底有什么区别Numpy 在PyTorch中设置浮点类型时,tensor类型和dtype之间的区别是什么,何时应该设置一个而不是另一个?,numpy,runtime-error,pytorch,Numpy,Runtime Error,Pytorch,我使用double作为我的模型输入和输出,所以我尝试设置torch使用float64而不是float32。两者之间到底有什么区别 torch.set\u default\u tensor\u type(torch.DoubleTensor) 将默认torch.Tensor类型设置为浮点Tensor类型t。此类型也将用作torch.tensor()中类型推断的默认浮点类型 torch.set\u default\u数据类型(torch.float64) 将默认浮点数据类型设置为d。此类型将用作to
torch.set\u default\u tensor\u type(torch.DoubleTensor)
将默认torch.Tensor类型设置为浮点Tensor类型t。此类型也将用作torch.tensor()中类型推断的默认浮点类型
torch.set\u default\u数据类型(torch.float64)
将默认浮点数据类型设置为d。此类型将用作torch.tensor()中类型推断的默认浮点类型
文档告诉我,设置张量类型也会设置数据类型,但我不确定什么时候我会使用一个而不是另一个
我应该提到的是,这两条语句都修复了我在从浮点更改为双精度后看到的错误:
Traceback (most recent call last):
File "train.py", line 122, in train_model
output = net(action)
File "/opt/anaconda3/lib/python3.7/site- packages/torch/nn/modules/module.py", line 489, in __call__
result = self.forward(*input, **kwargs)
File "models.py", line 25, in forward
return self.fc2(F.relu(self.fc1(x)))
File "/opt/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 489, in __call__
result = self.forward(*input, **kwargs)
File "/opt/anaconda3/lib/python3.7/site-packages/torch/nn/modules/linear.py", line 67, in forward
return F.linear(input, self.weight, self.bias)
File "/opt/anaconda3/lib/python3.7/site-packages/torch/nn/functional.py", line 1352, in linear
ret = torch.addmm(torch.jit._unwrap_optional(bias), input, weight.t())
RuntimeError: Expected object of scalar type Float but got scalar type Double for argument #4 'mat1'
我可以想象,
set\u default\u tensor\u type
也接受自定义的tensor类型。查看源代码,发现他们正在调用at::set\u default\u dtype(default\u tensor\u type->typeMeta())代码>无论如何,因此set\u default\u tensor\u type
更通用。例如,它们可能具有相同的效果。