pytorch 学习记录——计算图

1. pytorch的计算图是动态更新的(tensorflow是静态计算图),数据流向可以是双向的。

2. pytorch variable(用于封装tensor,便于自动求导的变量类型,在pytorch0.4.0之后版本已被并入tensor)

基本属性:data,dtype,shape,device,requires_grad,is_leaf,grad,grad_fn

3. is_leaf是否为叶子节点:用户创建时,使用的函数用到了不是变量的参数?则为叶子节点;

  • 从非叶子节点创建的节点均为非叶子节点;
  • 创建叶子节点时,如果requires_grad设置为False,则叶子节点实际没有意义
  • 非叶子节点的梯度在反向传播之后默认不保留,如果需要则要在反向传播前调用.retain_grad();
  • 对于属于是向量的张量不能直接反向传播,需要传入一个shape和该向量一样的全填1的标量作为参数,根据雅克布矩阵的分解就会恰好得到各个维度的梯度值(注意,例如,如果这个张量是对某个张量求全体平均数.mean()操作后得到的,则shape为torch.Size([]),就变成了标量、可以反向传播);

4. 求梯度相关的函数:

  • tensor.backward()——注意非标量的情况要带一个参数
  • torch.autograd.backward()——自动求该张量与先前所有相关的且需要求梯度的张量间的梯度,注意输入是tensors和它们对应的梯度,注意非标量的情况要带一个参数

    torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None)

  • torch.autograd.grad()——求输出与输入之间的梯度,保留和创建计算图后可以求高阶导
    (outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False)

 

5. 参考链接
Pytorch中backward()的思考记录_对向量backward-CSDN博客
深度之眼Pytorch打卡(五):Pytorch计算图(动态图与静态图)与自动求导tensor.backgrad()_torch a.backgrad-CSDN博客

posted on 2023-12-01 17:11  Mju_halcyon  阅读(53)  评论(0编辑  收藏  举报

导航