李沐动手学深度学习-07自动求导

07自动求导

对于矩阵的求导可以使用函数自动实现,但是还是需要学习一下具体的过程。链式法则等导数计算方法,截图主要用于帮助理解反向传递
在这里插入图片描述

正向和反向的计算方法相比,在时间复杂度上两者并没有太大的查遍,但是内存复杂度不同,正向传递需要把所有结果都存下来,需要消耗大量的GPU内存资源。

x = torch.arange(4.0)
print(x)
x.requires_grad_(True)  # 等价于x=torch.arange(4.0, requires_grad=True)
x.grad  # 默认值为None
y = 2 * torch.dot(x, x) # 通过x构造一个y的标量
print(y)

y.backward()    # 对y关于x的每一个分量进行求导
print(x.grad)

x.grad.zero_()  # 对x.grad继续清零操作 如果不进行清零的操作,那么后续求出来的导数就会和前面的结果累加
y = x.sum()
y.backward()
print(x.grad)

x.grad.zero_()
y = x * x
# 很少对向量或者矩阵进行求导,一般来说都是对标量进行求导,所以如果需要计算的话就通过下面这种方式进行
y.sum().backward()
print(x.grad)

x.grad.zero_()
y = x * x
u = y.detach()  # 这里的作用是把y当成是一个正常的变量,而不是x的一个函数,u就是一个单独的u,和x没有关系
z = u * x
z.sum().backward()
print(x.grad == u)  # 所以这里求导以后的结果就是u

python的控制流实现
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值