我正在尝试做一个简单的事情:使用autograd来获取渐变并进行渐变下降:

import tangent

def model(x):
    return a*x + b

def loss(x,y):
    return (y-model(x))**2.0


在获得输入输出对的损失之后,我想获得梯度损失:

    l = loss(1,2)
    # grad_a = gradient of loss wrt a?
    a = a - grad_a
    b = b - grad_b


但是库教程没有显示如何获得相对于a或b的梯度,即参数,autograd或切线都没有。

最佳答案

您可以使用grad函数的第二个参数来指定它:

def f(x,y):
    return x*x + x*y

f_x = grad(f,0) # derivative with respect to first argument
f_y = grad(f,1) # derivative with respect to second argument

print("f(2,3)   = ", f(2.0,3.0))
print("f_x(2,3) = ", f_x(2.0,3.0))
print("f_y(2,3) = ", f_y(2.0,3.0))


在您的情况下,“ a”和“ b”应该是损失函数的输入,损失函数会将它们传递给模型以计算导数。

我刚刚回答了一个类似的问题:
Partial Derivative using Autograd

关于python - 如何使用AutoGrad软件包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48583421/

10-12 17:54