我最近发现一个很奇怪的事情,据我所知,当你想对两个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。我的问题是,为什么第一个代码可以工作,但第二个代码报告了这种不同的设备错误?
1条答案
按热度按时间eh57zj3b1#
我猜你是指
print(a+b)
而不是torch(a+b)
。标量Tensor是一种特殊情况,可以自动移动到目标设备,如果将
a
和b
定义为一维Tensor,则会出现错误: