以下一段代码:
import torch
x=torch.tensor([-1.2, 0.6], requires_grad=True)
y=1+x
y[0]=torch.abs(y[0])
y.sum().backward()
给出错误说:
RuntimeError:梯度计算所需的变量之一已被就地操作修改:[torch.FloatTensor []],它是 AsStridedBackward0 的输出 0,版本为 1;预期版本 0 代替。
但是,如果您将第四行更改为
y[0]=torch.abs_(y[0])
,一切都会再次起作用。但是根据文档,abs_
是 abs
的原位版本。为什么它有效而abs
不会?