由于 Pytorch 中的比较运算符,梯度无法反向传播

问题描述 投票:0回答:2

由于 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

但是,如果我将 > 更改为 +,它会起作用。 我如何通过比较运算符反向传播梯度?

deep-learning pytorch gradient
2个回答
0
投票

跨比较运算符计算梯度是不可能的,因为

(x>y).float() 等于 step(x-y)。由于阶跃函数在 x=/0 处具有梯度 0,在 x=0 处具有 inf,因此它是无意义的。 :(


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.