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
得到结果为:
结语
到这里,动手学深度学习这本书的,预备知识已经介绍完成,下一章节会学习深度学习的相关基础知识。