pytorch入门学习(四)-----计算图与动态图

计算图

用来描述运算的有向无环图有两个主要元素,结点noteedge结点表示数据,如向量,矩阵,张量边表示运算,如加减乘除使用计算图主要是为了求导方便, 只需要沿着计算图的方向找到需要求导对象的所有路径, 对路径上的所有导数求和即该求导对象的梯度。

叶子结点

用户创建的结点,区分叶子结点的目的是节省内存,代码运行之后会释放点非叶子结点的数据;

非叶子结点梯度为none是因为在反向传播之后非叶子结点的梯度被释放掉以节省内存;

若想保存非叶子节点的梯度,以a为例,执行 a.retain_grad(),可保存目标梯度。

grad_fn:记录创建该张量时所用的方法

pytorch ----------- 动态图 ------- 是根据每一步的计算过程来搭建计算图
tensorFlow -------静态图 ------- 先搭建好所有的计算图再运行

用计算图表示 y = (w + x) * (w + 8)


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, 8)
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)

# 查看梯度
# 非叶子结点梯度为none是因为在反向传播之后非叶子结点的梯度被释放掉以节省内存

# 若想保存非叶子节点的梯度,以a为例,执行  a.retain_grad(),可保存目标梯度
print("gradient:\n", w.grad, x.grad, a.grad, b.grad, y.grad)

# 查看 grad_fn
# grad_fn ----- 记录创建该张量时所用的方法
# 如 AddBackward0  MulBackward0
print("grad_fn:\n", w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn, y.grad_fn)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值