自动求梯度

我们经常需要对函数求梯度(gredient),本文将介绍如何使用MXNet提供的autograd模块来对自动求梯度。

from mxnet import autograd,nd

为了求有关变量x的梯度,我们需要先调用attach_grad函数来申请存储梯度所需要的内存。

x.attach_grad()

下面定义有关变量x的函数。为了减少计算和内存开销,默认情况下MXNet不会记录用于求梯度的计算。我们需要调用record函数来要求MXNet记录与求梯度有关的计算。

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

Pytorch中是根据前向传播生成计算图的,如果最终生成的函数是标量,那么这是一般情况下的backward反向传播。如果y不是一个标量,MXNet将默认先对y中元素求和得到新的变量,再求该变量有关x的梯度。

默认情况下autograd还会将运行模式从预测模式转为训练模式。这可以通过is_training函数来查看。

print(autograd.is_training())
with autograd.recored():
    print(autograd.is_training())
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()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值