首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >pytorch computation graph

pytorch computation graph

原创
作者头像
用户3672714
发布2025-08-14 14:56:42
发布2025-08-14 14:56:42
11000
代码可运行
举报
运行总次数:0
代码可运行

1. 什么是 PyTorch 计算图(Computation Graph)

  • 在深度学习中,计算图是一个有向图,用于表示 张量操作的依赖关系
  • PyTorch 中的 autograd 利用计算图来实现 自动求导(backpropagation)
  • 特点:
    1. 动态计算图(Dynamic Computation Graph):图在前向计算时即时构建,每次 forward 都是新的图。
    2. 节点(Node):表示张量操作(例如加法、乘法、卷积)。
    3. 边(Edge):表示张量之间的依赖关系。

PyTorch 的计算图是 动态图(相比 TensorFlow 1.x 的静态图),更灵活,适合循环结构和可变长度输入。


2. 前向传播与计算图

假设有简单的计算: z=x2+2x+1z = x^2 + 2x + 1

Python + PyTorch 实现:

代码语言:javascript
代码运行次数:0
运行
复制
import torch# 创建张量,开启自动求导x = torch.tensor(3.0, requires_grad=True)# 前向计算y = x**2 + 2*x + 1print(y)  # 输出 16.0php116 Bytes© 菜鸟-创作你的创作

此时,PyTorch 会动态生成如下计算图:

代码语言:javascript
代码运行次数:0
运行
复制
x ----> x**2 ----+                 \                  + ----> yx ----> 2*x ----/ 1 --------------+php102 Bytes© 菜鸟-创作你的创作
  • 叶子节点(Leaf Node):原始张量 x
  • 中间节点:操作结果,如 x**2, 2*x
  • 根节点(Root Node):最终输出 y

3. 自动求导(Backward)

  • PyTorch 使用 链式法则(Chain Rule) 自动计算梯度
  • 示例:
代码语言:javascript
代码运行次数:0
运行
复制
y.backward()  # 计算 dy/dxprint(x.grad) # 输出 8.0php47 Bytes© 菜鸟-创作你的创作

推导过程: dydx=ddx(x2+2x+1)=2x+2=8\frac{dy}{dx} = \frac{d}{dx}(x^2 + 2x + 1) = 2x + 2 = 8

  • x.grad 存储的是 梯度值
  • 计算图会在 backward 后被释放(默认),节省内存

4. 特点与优势

特点

说明

动态图

每次 forward 都构建计算图,支持 if/for 等动态控制流

节省内存

backward 后中间节点释放,可减少内存占用

灵活调试

可在 forward 时随意打印、调试张量

自动求导

无需手动计算梯度,复杂网络也适用


5. 高级用法示例

多输出计算图

代码语言:javascript
代码运行次数:0
运行
复制
x = torch.tensor(2.0, requires_grad=True)y1 = x**2y2 = x**3z = y1 + y2z.backward()print(x.grad)  # dy/dx = 2*x + 3*x**2 = 4 + 12 = 16php139 Bytes© 菜鸟-创作你的创作

禁用梯度计算

代码语言:javascript
代码运行次数:0
运行
复制
with torch.no_grad():    y = x**2  # 不会记录计算图php45 Bytes© 菜鸟-创作你的创作

复杂网络中应用

代码语言:javascript
代码运行次数:0
运行
复制
import torch.nn as nnmodel = nn.Linear(10, 1)x = torch.randn(1, 10)y = model(x)  # 自动构建计算图loss = y.sum()loss.backward()  # 自动计算所有参数梯度php139 Bytes© 菜鸟-创作你的创作

6. 总结

  1. 计算图(Computation Graph) 是 PyTorch 自动求导的核心机制。
  2. PyTorch 使用 动态计算图,灵活、可调试、支持任意控制流。
  3. 前向计算构建图,backward() 自动求梯度。
  4. 通过 requires_grad=True 控制哪些张量需要求梯度。

https://www.52runoob.com/archives/5763

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是 PyTorch 计算图(Computation Graph)
  • 2. 前向传播与计算图
  • 3. 自动求导(Backward)
  • 4. 特点与优势
  • 5. 高级用法示例
    • 多输出计算图
    • 禁用梯度计算
    • 复杂网络中应用
  • 6. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档