【深度之眼】Pytorch框架班第五期-Week1任务2第二节:计算图与动态图机制

计算图与动态图机制

计算图

计算图是用来描述运算的有向无环图
计算图有两个主要元素:节点(Node)和边(Edge)
节点表示数据, 如向量, 矩阵, 张量,
边表示运算, 如加减乘除卷积等
用计算图表示: y=(x+w) * (w + 1)
a = x + w
b = w + 1
y = a * b
在这里插入图片描述

计算图与梯度求导

y = (x + w) * (w + 1)
a = x + w
b = w + 1
y = a * b

y对w求导:
在这里插入图片描述

在这里插入图片描述

叶子节点: 用户创建的节点称为叶子节点,如w和x
is_leaf: 指示张量是否为叶子节点
在这里插入图片描述

为什么要设置叶子节点的概念:

这是为了节省内存,因为在梯度反向传播之后,非叶子节点的梯度会被释放掉,以节省内存开销。

import torch
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)

y.backward()
print(w.grad)

#查看叶子节点
print("is_leaf:\n", w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf, y.is_leaf)

#查看梯度
print("gradient:\n", w.grad, x.grad, a.grad, b.grad, y.grad)

#查看grad_fn
#print("grad_fn: \n", w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn, y.grad_fn)
'''
tensor([5.])
is_leaf:
 True True False False False
gradient:
 tensor([5.]) tensor([2.]) None None None
'''

如果要使用非叶子节点a的梯度:

import torch
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

a = torch.add(w, x)
a.retain_grad() #保存梯度
b = torch.add(w, 1)
y = torch.mul(a, b)

y.backward()
print(w.grad)

#查看叶子节点
print("is_leaf:\n", w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf, y.is_leaf)

#查看梯度
print("gradient:\n", w.grad, x.grad, a.grad, b.grad, y.grad)

#查看grad_fn
#print("grad_fn: \n", w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn, y.grad_fn)

'''
tensor([5.])
is_leaf:
 True True False False False
gradient:
 tensor([5.]) tensor([2.]) tensor([2.]) None None
'''

grad_fn: 记录创建该张量时使用的方法(函数)
y.grad_fn = <MulBackward0>
a.grad_fn = <AddBackward0>
b.grad_fn = <AddBackward0>

grad_fn: 
 None None <AddBackward0 object at 0x000002D5D935EF60> <AddBackward0 object at 0x000002D5D935E0B8> <MulBackward0 object at 0x000002D5D935EC88>

计算图的两个重要概念是什么:

计算图是用来描述运算的有向无环图
计算图有两个主要元素:节点(Node)和边(Edge)
节点表示数据, 如向量, 矩阵, 张量,
边表示运算, 如加减乘除卷积等

PyTorch中动态图机制

动态图 VS 静态图

根据计算图搭建方式,可将计算图分为动态图和静态图
动态图:运算与搭建同时进行。灵活 易调节
静态图:先搭建图,后运算。 高效 不灵活

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值