计算图、动态机制与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>
二、动态图
根据计算图搭建的方式,可将计算图分为动态图和静态图。
搭建方式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会改变该值)
'''