关于pytorch张量的奇怪行为。任何人都可以解释清楚吗?

时间:2019-07-19 02:57:05

标签: python pytorch

当我创建一个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

1 个答案:

答案 0 :(得分:1)

您让我在这里进行了挖掘,但是自type()开始,built-in方法0.4.0不适用于类型检测(请参见this commentthis 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

但是,我不确定该决定背后的理由,除此之外找不到任何相关的东西。