【发布时间】:2019-01-10 23:31:39
【问题描述】:
我有一个训练有素的网络。我想计算输出w.r.t的梯度。 输入。通过查询 PyTorch 文档,torch.autograd.grad 可能很有用。 所以,我使用以下代码:
x_test = torch.randn(D_in,requires_grad=True)
y_test = model(x_test)
d = torch.autograd.grad(y_test, x_test)[0]
model 是神经网络。 x_test 是大小为 D_in 的输入,y_test 是标量输出。
我想将计算结果与scipy.misc.derivative 的数值差异进行比较。
所以,我通过设置一个索引来计算偏导数。
idx = 3
x_test = torch.randn(D_in,requires_grad=True)
y_test = model(x_test)
print(x_test[idx].item())
d = torch.autograd.grad(y_test, x_test)[0]
print(d[idx].item())
def fun(x):
x_input = x_test.detach()
x_input[idx] = x
with torch.no_grad():
y = model(x_input)
return y.item()
x0 = x_test[idx].item()
print(x0)
print(derivative(fun, x0, dx=1e-6))
但我得到了完全不同的结果。
torch.autograd.grad计算的梯度为-0.009522666223347187,
而scipy.misc.derivative 是-0.014901161193847656。
计算有什么问题吗?还是我用错了torch.autograd.grad?
【问题讨论】:
-
我正在实现集成梯度,并计算输出 w.r.t 的相同事物梯度。输入。您能否向我解释一下您的情况下输入和输出都有什么类型?
标签: neural-network gradient pytorch