pytorch将变量转移到GPU计算梯度遇到的一个坑爹问题

我现在也不是很懂问题出在了哪里。。。为什么初始化时就设定device和后期设定to(device)结果相差会如此之大。

方法一

x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(2.0, requires_grad=True)
z = x**2+y
z.backward()
print(z, x.grad, y.grad)
tensor(3., grad_fn=<AddBackward0>) tensor(2.) tensor(1.)

方法二

x = torch.tensor(1.0, requires_grad=True).to(device)
y = torch.tensor(2.0, requires_grad=True).to(device)
z = x**2+y
z.backward()
print(z, x.grad, y.grad)
tensor(3., device='cuda:0', grad_fn=<AddBackward0>) None None

方法三

x = torch.tensor(1.0, requires_grad=True, device = device)
y = torch.tensor(2.0, requires_grad=True, device = device)
z = x**2+y
z.backward()
print(z, x.grad, y.grad)
tensor(3., device='cuda:0', grad_fn=<AddBackward0>) tensor(2., device='cuda:0') tensor(1., device='cuda:0')

猜你喜欢

转载自blog.csdn.net/jining11/article/details/103913644