当我创建一个PyTorch张量并尝试探索其类型时,我发现了这一点:
>>> a = torch.rand(3,5)
>>> a
tensor([[0.3356, 0.0968, 0.2185, 0.9843, 0.7846],
[0.8523, 0.3300, 0.7181, 0.2692, 0.6523],
[0.0523, 0.9344, 0.3505, 0.8901, 0.6464]])
>>> type(a)
<class 'torch.Tensor'>
>>> a = a.cuda()
>>> a.is_cuda
True
>>> type(a)
<class 'torch.Tensor'>
>>> a.dtype
torch.float32
>>>
即使这个张量已经在GPU上,为什么type(a)
仍然是torch.Tensor
而不是torch.cuda.Tensor
?
答案 0 :(得分:1)
您让我在这里进行了挖掘,但是自type()
开始,built-in
方法0.4.0
不适用于类型检测(请参见this comment和this point in migration guide)。
要获取正确的类型,torch.Tensor
类具有type()
成员,可以简单使用:
import torch
a = torch.rand(3, 5)
print(a)
print(a.type())
a = a.to("cuda")
print(a.is_cuda)
print(a.type())
产生预期的结果:
tensor([[0.5060, 0.6998, 0.5054, 0.4822, 0.4408],
[0.7686, 0.4508, 0.4968, 0.4460, 0.7352],
[0.1810, 0.6953, 0.7499, 0.7105, 0.1776]])
torch.FloatTensor
True
torch.cuda.FloatTensor
但是,我不确定该决定背后的理由,除此之外找不到任何相关的东西。