如何使⽤MXNet提供的autograd模块来⾃动求梯度

from mxnet import autograd, nd

例子:对函数y = 2x⊤x 求关于列向量x 的梯度

from mxnet import autograd,nd

#先创建变量x,并赋初值
x = nd.arange(4).reshape((4,1))
print(x)

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

#为了减少计算和内存开销,默认条件下MXNet不会记录求梯度的计算。我们需要调用record函数来要求MXNet记录与求梯度有关的计算
with autograd.record():
    y = 2 *nd.dot(x.T,x)
    
#由于x的形状为(4, 1),y是个标量。接下来我们可以通过调用backward函数自动求梯度。需要注意的是,如果y不是一个标量,MXNet将默认先对y中元素求和得到新的变量,再求该变量有关x的梯度    
y.backward()

#验证求出来的梯度是正确的
assert(x.grad - 4 * x).norm().asscalar() == 0
print(x.grad)


输出:

[[0.]
 [1.]
 [2.]
 [3.]]
<NDArray 4x1 @cpu(0)>

[[ 0.]
 [ 4.]
 [ 8.]
 [12.]]
<NDArray 4x1 @cpu(0)>

1.创建变量并初始化
2.申请内存
3.调用record记录
4.自动求梯度
5.验证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值