由于Pytorch中的比较运算符,梯度无法反向传播。
我的代码是:
x=torch.tensor([1.0,1.0], requires_grad=True)
print(x)
y=(x>0.1).float().sum()
print(y)
y.backward()
print(x.grad)
它给出一个错误:
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
但是,如果我将〉改为+,它就可以工作了。我如何在比较运算符中反向传播梯度?
2条答案
按热度按时间uemypmqf1#
因为函数是不可微的,事实上它甚至不是连续的。
看看这个
https://math.stackexchange.com/questions/2783108/continuous-discontinuous-differential-and-non-differentiable-function-graph-pro
juzqafwq2#
不可能计算跨比较运算符的梯度,因为
(x〉y).float()等于step(x-y).由于step函数在x=/0处的梯度为0,在x=0处的inf,因此它是无意义的。:(