python - pytorch如何在克隆张量后计算梯度

标签 python pytorch

我的简单代码:

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 不同? 如果我希望它们相同该怎么办?

最佳答案

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

关于python - pytorch如何在克隆张量后计算梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52926847/

相关文章:

python - django.db.utils 中的 IntegrityError #1062 - 键 2 的条目重复

python - 如何使用 python 3.5 将 mysql 数据导入到 .txt 文件?

tensorflow - 将 tf.data.Dataset.from_tensor_slices 转换为 pytorch

python - pytorch masked_fill : why can't I mask all zeros?

python - 如何替换字符串中的成对标记?

python - python 有没有办法在退出函数时触发操作

mongodb - 使用 Mongo DB 的 PyTorch DataLoader

Pytorch 对沿轴的张量列表求和

python - 无法在Python中使用Scrapy(1.5.1)发送电子邮件

python - 缩小以张量表示的图像