Pytorch 定义ReLU自动加载函数时,为什么需要克隆grad_输出并将其分配给grad_输入?
我正在浏览pytorch教程的自动签名部分。我有两个问题:Pytorch 定义ReLU自动加载函数时,为什么需要克隆grad_输出并将其分配给grad_输入?,pytorch,backpropagation,autograd,Pytorch,Backpropagation,Autograd,我正在浏览pytorch教程的自动签名部分。我有两个问题: 为什么我们需要克隆grad\u输出,并将其分配给grad\u输入,而不是在反向传播期间进行简单分配 梯度输入[input
grad\u输出
,并将其分配给grad\u输入
,而不是在反向传播期间进行简单分配梯度输入[input<0]=0
的目的是什么?这是否意味着当输入小于零时,我们不更新梯度tensor.clone()clone
是一种复制张量的方法,同时仍将该副本保留为其来源的计算图的一部分
因此,grad\u输入
与grad\u输出
是同一计算图的一部分,如果我们计算grad\u输出
的梯度,那么grad\u输入
也会做同样的事情
因为我们在梯度输入中进行了更改,所以我们首先克隆它
“梯度输入[输入<0]=0”的目的是什么?这是否意味着当输入小于零时,我们不更新梯度
这是根据ReLU函数的定义完成的。ReLU函数是f(x)=max(0,x)
。这意味着如果感谢你的回答,你真的帮了我很多!不只是执行返回梯度输出。夹紧(最小值=0)
或返回F.relu(梯度输出)
的原因是什么?克隆方法更有效吗?