In [1]:
import mxnet as mx
from mxnet import nd, autograd
mx.random.seed(1)

In [12]:
# auto grad

x = nd.array([[1, 2], [3, 4]])

x.attach_grad()

with autograd.record():
    y = x * 2
    z = y * x

z.backward()

print(x.grad)


[[  4.   8.]
 [ 12.  16.]]
<NDArray 2x2 @cpu(0)>

In [17]:
# chain rules 

a = nd.random_normal(shape=3)
a.attach_grad()

with autograd.record():
    b = a * 2
    while (nd.norm(b) < 1000).asscalar():
        b = b * 2

    if (mx.nd.sum(b) > 0).asscalar():
        c = b
    else:
        c = 100 * b

head_gradient = nd.array([0.01, 1.0, .1])
c.backward(head_gradient)

print(a.grad)


[   10.23999977  1024.           102.40000153]
<NDArray 3 @cpu(0)>

In [ ]: