【问题标题】:pytorch how to compute grad after clone a tensorpytorch克隆张量后如何计算grad
【发布时间】:2018-10-23 13:37:35
【问题描述】:

我的简单代码:

import torch

x = torch.randn(4, requires_grad=True).cuda()
y = torch.randn(4, requires_grad=True).cuda()
z = torch.zeros(4)
z = torch.clone(x)
z.retain_grad()
h = (z + y) * z
l = torch.randn(4).cuda()
loss = (l - h).pow(2).sum()
loss.backward()
print('x.grad=', x.grad)
print('z.grad=', z.grad)

输出:

x.grad= None
z.grad= tensor([-15.3401,  -3.2623,  -2.1670,   0.1410], device='cuda:0')

为什么 x.grad 是 None 但与 z.grad 不同? 如果我希望它们相同,我该怎么办?

【问题讨论】:

    标签: python pytorch


    【解决方案1】:

    如果要保留张量x的梯度,需要在声明x后调用x.retain_grad()

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 2019-05-10
      • 2020-06-25
      • 1970-01-01
      • 2019-06-06
      • 2017-10-31
      • 2020-10-07
      • 2021-07-23
      相关资源
      最近更新 更多