[五]深度学习Pytorch-计算图与动态图机制

0. 往期内容

[一]深度学习Pytorch-张量定义与张量创建

[二]深度学习Pytorch-张量的操作:拼接、切分、索引和变换

[三]深度学习Pytorch-张量数学运算

[四]深度学习Pytorch-线性回归

[五]深度学习Pytorch-计算图与动态图机制

[六]深度学习Pytorch-autograd与逻辑回归

[七]深度学习Pytorch-DataLoader与Dataset(含人民币二分类实战)

[八]深度学习Pytorch-图像预处理transforms

[九]深度学习Pytorch-transforms图像增强(剪裁、翻转、旋转)

[十]深度学习Pytorch-transforms图像操作及自定义方法

深度学习Pytorch-计算图与动态图机制

1. 计算图定义

在这里插入图片描述

2. 计算图与梯度求导

在这里插入图片描述
在这里插入图片描述
(1)注意叶子节点的梯度会保存,非叶子节点的梯度会释放掉
(2)代码示例
(2-1)非叶子节点的梯度被释放:

import torch

#创建w,x两个节点
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

#创建边运算
a = torch.add(w, x)    

b = torch.add(w, 1)
y = torch.mul(a, b)

# 反向传播,使用自动求导系统反向传播即可得到梯度
y.backward()
print(w.grad)

# 查看叶子结点
#输出True True False False False
print("is_leaf:\n", w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf, y.is_leaf)

# 查看梯度
#输出[5.] [2.] None None None
print("gradient:\n", w.grad, x.grad, a.grad, b.grad, y.grad)

在这里插入图片描述

(2-2)使用retain_grad()保存非叶子节点的梯度:

import torch

#创建w,x两个节点
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

#创建边运算
a = torch.add(w, x)    

#如果采用a.retain_grad()则a的梯度可以保存
a.retain_grad()

b = torch.add(w, 1)
y = torch.mul(a, b)

# 反向传播,使用自动求导系统反向传播即可得到梯度
y.backward()
print(w.grad)

# 查看叶子结点
#输出True True False False False
print("is_leaf:\n", w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf, y.is_leaf)

# 查看梯度
#使用a.retain_grad()则输出为[5.] [2.] [2.] None None
print("gradient:\n", w.grad, x.grad, a.grad, b.grad, y.grad)

在这里插入图片描述


grad_fn用来记录创建张量时所使用的方法(函数):
在这里插入图片描述代码示例

import torch

#创建w,x两个节点
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

#创建边运算
a = torch.add(w, x)    

#如果采用a.retain_grad()则a的梯度可以保存
#a.retain_grad()

b = torch.add(w, 1)
y = torch.mul(a, b)

# 反向传播,使用自动求导系统反向传播即可得到梯度
y.backward()

# 查看 grad_fn
#输出 None None AddBackward0 AddBackward0 MulBackward0
# w与x是None是因为他俩不是运算得到的
print("grad_fn:\n", w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn, y.grad_fn)

在这里插入图片描述

3. 动态图

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值