小编Sun*_*ong的帖子

如何使用 PyTorch 计算神经网络中输入的输出梯度?

我有一个训练有素的网络。我想计算输出与输入的梯度。通过查询 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]
Run Code Online (Sandbox Code Playgroud)

model是神经网络。x_test是大小的输入D_iny_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))
Run Code Online (Sandbox Code Playgroud)

但我得到了完全不同的结果。由 计算的梯度torch.autograd.grad-0.009522666223347187,而由计算的梯度scipy.misc.derivative-0.014901161193847656

计算上有什么问题吗?还是我用torch.autograd.grad错了?

gradient neural-network pytorch

7
推荐指数
1
解决办法
2354
查看次数

标签 统计

gradient ×1

neural-network ×1

pytorch ×1