使用MXNet的便利之处是。即使函数的计算图包括了python的控制流(如条件或者循环),也可以求梯度,比如:
定义一个函数f():
def f(a):
b = a * 2
while b.norm().asscalar() < 1000:
b = b * 2
if b.sum().asscalar() > 0:
c = b
else:
c = 100 * b
return c
求函数 f()的梯度:
a = nd.random.normal(shape = 1)
a.attach_grad()
with autograd.record():
c = f(a)
c.backward()
if(a.grad == c/a):
print("yes")
#yes
小结:
MXNet提供autograd模块来自动化求导过程。
MXNet的autograd模块可以对一般的命令式程序求导。