Python 如何使用就地ops断开PyTorch autograd
我正试图更好地理解PyTorch autograd中就地操作的作用。 我的理解是,它们可能会导致问题,因为它们可能会覆盖倒退过程中所需的值 我正在尝试建立一个例子,其中一个就地操作破坏了自动微分,我的想法是在反向传播过程中,在它被用来计算其他张量之后,覆盖一些需要的值 我使用赋值作为就地操作(我尝试了Python 如何使用就地ops断开PyTorch autograd,python,pytorch,autograd,Python,Pytorch,Autograd,我正试图更好地理解PyTorch autograd中就地操作的作用。 我的理解是,它们可能会导致问题,因为它们可能会覆盖倒退过程中所需的值 我正在尝试建立一个例子,其中一个就地操作破坏了自动微分,我的想法是在反向传播过程中,在它被用来计算其他张量之后,覆盖一些需要的值 我使用赋值作为就地操作(我尝试了+=,得到了相同的结果),我通过以下方式再次检查了它是否为就地操作: x=torch.arange(5,dtype=torch.float,需要_grad=True) y=x y[3]=-1 打印(
+=
,得到了相同的结果),我通过以下方式再次检查了它是否为就地操作:
x=torch.arange(5,dtype=torch.float,需要_grad=True)
y=x
y[3]=-1
打印(x)
印刷品:
tensor([ 0., 1., 2., -1., 4.], grad_fn=<CopySlices>)
这张照片
tensor([0.0000, 0.2000, 0.4000, 0.6000, 0.8000])
x=torch.arange(5,dtype=torch.float,需要_grad=True)
out1=x**2
out2=out1/10
out1[3]=0
out2.sum().backward()
打印(x.grad)
这张照片是:
tensor([0.0000, 0.2000, 0.4000, 0.6000, 0.8000])
我希望获得不同的学位
- 项目分配在做什么?我没有得到
grad\u fn=
- 为什么它返回相同的毕业生
- 是否有破坏自动标记的就地操作的工作示例
- 是否有不向后兼容的PyTorch操作列表
x=torch.ones(5,需要_grad=True)
x2=(x+1).sqrt()
z=(x2-10)
x2[0]=-1
z、 sum().backward()
提出:
RuntimeError:梯度计算所需的一个变量已被就地操作修改:[torch.FloatTensor[5]],它是SqrtBackward的输出0,处于版本1;应为版本0。提示:使用torch.autograd.set_detect_normal(True),启用异常检测以查找无法计算其梯度的操作。