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) 编辑 收藏 举报