MXNet动手学深度学习-2.3自动求梯度

自动求梯度

本文中将会对MXNet提供的autograd使用进行介绍,autograd包主要用来自动求梯度。

代码

程序写在了test02.py中,
编辑test02.py: vim test02.py

## 动手学深度学习-2.3自动求梯度
  
from mxnet import autograd, nd
x = nd.arange(4).reshape((4, 1)) #创建列向量x
print(x) #打印列向量x

x.attach_grad() #申请存储梯度所需要的内存

with autograd.record():
    y = 2 *nd.dot(x.T, x)

y.backward() #调用backward自动求梯度

assert(x.grad - 4 * x).norm().asscalar() == 0
print(x.grad) #打印显示

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

a = nd.random.normal(shape = 1)
a.attach_grad()
with autograd.record():
    c = f(a)

c.backward()

print(a.grad == c / a) #判断所求梯度结果的正确性

程序运行结果

运行程序:python test02.py
得到结果为:
在这里插入图片描述

结语

到这里,动手学深度学习这本书的,预备知识已经介绍完成,下一章节会学习深度学习的相关基础知识。

猜你喜欢

转载自blog.csdn.net/xiaobiyin9140/article/details/84552143