pytorch 不同设备上的Tensor可以相加吗?

fdx2calv  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(278)

我最近发现一个很奇怪的事情,据我所知,当你想对两个Tensor做一些运算时,你应该确保它们在同一个设备上。但是当我这样写代码时,它出乎意料地运行

import torch
a = torch.tensor(1, device='cuda')
print(a.device)
b = torch.tensor(2, device='cpu')
print(b.device)
torch(a+b)

cuda:0
cpu
tensor(3, device='cuda:0')

在我的代码中,它不能像这样工作:

pts_1_tile = torch.tensor([[0], [0]], dtype=torch.float32)
torch.add(pred_4pt_shift, pts_1_tile)

这里的pred_4pt_shift是一个子网的中间结果,它是GPU上的Tensor。我的问题是,为什么第一个代码可以工作,但第二个代码报告了这种不同的设备错误?

eh57zj3b

eh57zj3b1#

我猜你是指print(a+b)而不是torch(a+b)
标量Tensor是一种特殊情况,可以自动移动到目标设备,如果将ab定义为一维Tensor,则会出现错误:

import torch
a = torch.tensor([1], device='cuda')
b = torch.tensor([2], device='cpu')
print(a+b)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

相关问题