用向量的分量定义矩阵的Torch自动微分



标题不言自明。我有以下

import torch
x = torch.tensor([3., 4.], requires_grad=True)
A = torch.tensor([[x[0], x[1]],
[x[1], x[0]]], requires_grad=True)
f = torch.norm(A)
f.backward()

我想计算f相对于x的梯度,但如果我键入x.grad,我只得到None。如果我使用更明确的命令torch.autograd.grad(f, x)而不是f.backward(),我会得到

RuntimeError:其中一个区分张量似乎没有已在图表中使用。如果需要,则设置allow_unused=True行为

问题可能是,当您获取叶张量的切片时,它会返回一个非叶张量,如下所示:

>>> x.is_leaf
True
>>> x[0].is_leaf
False

现在的情况是,x不是添加到图中的,而是x[0]。

试试这个:

>>> import torch
>>> 
>>> x = torch.tensor([3., 4.], requires_grad=True)
>>> xt = torch.empty_like(x).copy_(x.flip(0))
>>> A = torch.stack([x,xt])
>>> 
>>> f = torch.norm(A)
>>> f.backward()
>>> 
>>> x.grad
tensor([0.8485, 1.1314])

不同的是PyTorch知道要将x添加到图中,所以f.backward((填充它的梯度。在这里,你会发现一些不同的方式来复制张量及其对图的影响。

相关内容

  • 没有找到相关文章

最新更新