计算图、动态机制与autograd

一、 计算图

1.1 定义

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

1.2 计算图与梯度求导

1.2.1 叶子节点

由用户创建的节点称为叶子节点。

1.2.2 再说grad_fn

grad_fn用来记录创建该张量时所用的方法(函数)

y.grad_fn = <MulBackward0>
a.grad_fn = <AddBackward0>
b.grad_fn = <AddBackward0>

grad_fn

二、动态图

根据计算图搭建的方式,可将计算图分为动态图和静态图。

搭建方式A(动态图):运算与搭建同时进行--->灵活易调节

搭建方式B(静态图):先搭建图,后运算--->高效但不灵活

三、autograd自动求导系统

# 1 torch.autograd.backward() ---> tensor.backward()就是调用的该函数(自动求取梯度)
tensors: 用于求导的张量,如 loss
grad_tensors: 多梯度权重
retain_graph: 保存计算图
create_graph: 创建导数计算图,用于高阶求导

# 2 torch.autograd.grad() ---> 对指定的inputs求取梯度
outputs: 用于求导的张量,如 loss
inputs: 需要梯度的张量
grad_outputs:多梯度权重
retain_graph : 保存计算图
create_graph: 创建导数计算图,用于高阶求导

# 3 注意点
'''
1)梯度不自动清零
2)依赖于叶子节点的节点,requires_grad默认为True
3)叶子节点不可执行in-place(求导过程中用到了该值,使用in-place会改变该值)
'''
posted @ 2023-08-09 23:59  珠峰上吹泡泡  阅读(30)  评论(0编辑  收藏  举报