mxnet:自动求梯度

2020-05-07  本文已影响0人  AI秘籍

mxnet求梯度方法

step1.先调用attach_grad函数来申请存储梯度所需要的内存.
x.attach_grad()

step2.定义x的函数y,调用record函数来记录与求梯度有关的计算.
with autograd.record():
y=2 * nd.dot(x.T,x)

step3.调用反向函数backward计算梯度
y.backward()

step4.获取样本的梯度
如果有多个样本,则是一个batch_size样本的梯度和
print(x.grad)

'''自动求梯度'''
from mxnet import nd, autograd

x = nd.arange(4).reshape((4,1))
print(x)

# step1.调用attach_grad来申请存储梯度所需要变量的内存
x.attach_grad()

# step2.定义x的函数y
# 调用record记录梯度有关的计算
with autograd.record():
  y=2 * nd.dot(x.T,x)

# step3.调用反向函数backward计算梯度
y.backward()

# step4.获取样本的梯度
# 如果有多个样本,则是一个batch_size样本的梯度和
print(x.grad)

# 小批量随机梯度下降算法sgd
# 不断迭代模型参数来优化损失函数
# param.grad为自动求梯度计算来的梯度,是一个批量样本的梯度和
# params为模型参数w,b
def sgd(params,lr,batch_size):
  for param in params:
    param[:] = param - lr*param.grad/batch_size

print(nd.zeros((2,3,4)))
image.png

epoch迭代周期,一个迭代周期,遍历一遍所有样本.
num_epochs迭代周期数,遍历num遍所有样本.

参考:

动手学深度学习,线性回归部分.

上一篇 下一篇

猜你喜欢

热点阅读