【问题标题】:pytorch got None after backward()pytorch 在backward() 之后没有得到
【发布时间】:2020-05-31 10:12:37
【问题描述】:

我正在学习pytorch,写一个简单的代码如下。

import torch
x = torch.randn(3,requires_grad=True).cuda()
print(x)
y = x * x
print(y)
y.backward(torch.tensor([1,1.0,1]).cuda())
print(x.grad)
tensor([ 0.5934, -1.8813, -0.7817], device='cuda:0', grad_fn=<CopyBackwards>)
tensor([0.3521, 3.5392, 0.6111], device='cuda:0', grad_fn=<MulBackward0>)
None

如果我将代码更改为

from torch.autograd import Variable
import torch
# x = torch.randn(3,requires_grad=True).cuda()
x = Variable(torch.randn(3).cuda(),requires_grad=True)
print(x)
y = x * x
print(y)
y.backward(torch.tensor([1,1.0,1]).cuda())
print(x.grad)
tensor([0.9800, 0.3597, 1.6315], device='cuda:0', requires_grad=True)
tensor([0.9605, 0.1294, 2.6617], device='cuda:0', grad_fn=<MulBackward0>)
tensor([1.9601, 0.7194, 3.2630], device='cuda:0')

毕业没问题。但为什么?我讨厌 Variable 类。

环境

python:3.8

pytorch:1.5

cuda:10.2

【问题讨论】:

    标签: python-3.x pytorch


    【解决方案1】:

    我明白了。

    x = torch.randn(3,requires_grad=True).cuda()
    

    x 是由 cuda() 创建的。所以 x 不是叶张量。

    修改如下代码就可以了。

    x = torch.randn(3,requires_grad=True,device=0)
    

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 2017-09-08
      • 1970-01-01
      • 2020-10-13
      • 2021-01-06
      • 2020-12-17
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      相关资源
      最近更新 更多