核心要点

  • 计算图是有向无环图,节点是运算

  • TF 1.x 先建图后执行

  • TF 2.x Eager + tf.function 可选图

  • 理解数据流与依赖

简要回答

TensorFlow 计算图将运算表示为有向无环图中的节点,边表示张量依赖;1.x 需先建图再用 Session 执行,2.x 默认即时执行但可用 tf.function 编译为图。

标准回答

计算图(Computation Graph) 将数学运算表示为 DAG(有向无环图)

  • 节点(Node):运算(matmul、relu、add)
  • 边(Edge):张量数据流

TF 1.x 范式

  1. 定义阶段:组装整张图(placeholder、Variable、op)
  2. 执行阶段Session.run 按拓扑序计算

优势:全局优化、多设备放置;劣势:调试难。

TF 2.x

  • 默认 Eager:运算立即执行,无显式大图
  • @tf.function:将 Python 函数追踪为图,获性能与部署优势
  • Autograph 将部分 Python 控制流转为图 op

PyTorch 动态图对比:TF 历史上偏声明式静态图;2.x 兼顾两者。理解计算图有助于读懂 反向传播 与分布式 placement。详见 反向传播原理

回答思路

  • 【定义】用一句话说清「TensorFlow 中的计算图」

  • 【原理】讲清关键机制或步骤(2~3 点)

  • 【例子】举一个真实项目、论文或产品中的例子

  • 【对比】与易混淆概念或替代方案比较(如有)

  • 【收尾】总结适用场景 + 一个局限或风险

延伸学习

工具:TensorFlow。术语:反向传播梯度。知识库:反向传播原理深度学习基础

常见误区

⚠️ 常见踩坑

只说 1.x 静态图不提 2.x Eager;认为 PyTorch 没有计算图;混淆建图与训练本身。

追问

追问 1tf.function 如何追踪图?

首次用 concrete 输入调用时记录 op 序列,生成 ConcreteFunction;后续同签名输入复用图。不同 shape 可能 retrace 多图。

追问 2计算图如何做自动微分?

反向遍历图,每个 op 注册 gradient 函数,链式累积。TF 1 用 symbolic gradients;2.x GradientTape 在 Eager/图混合模式记录。

追问 3control dependency 是什么?

tf.control_dependencies 强制 op 执行顺序,用于有状态 op(如 assign)顺序保证,1.x 图编程常见。

🔗 相似问题

同一考点的不同问法,换着练更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习