核心要点
计算图是有向无环图,节点是运算
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 范式:
- 定义阶段:组装整张图(placeholder、Variable、op)
- 执行阶段: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 没有计算图;混淆建图与训练本身。
追问
追问 1:tf.function 如何追踪图?
首次用 concrete 输入调用时记录 op 序列,生成 ConcreteFunction;后续同签名输入复用图。不同 shape 可能 retrace 多图。
追问 2:计算图如何做自动微分?
反向遍历图,每个 op 注册 gradient 函数,链式累积。TF 1 用 symbolic gradients;2.x GradientTape 在 Eager/图混合模式记录。
追问 3:control dependency 是什么?
tf.control_dependencies 强制 op 执行顺序,用于有状态 op(如 assign)顺序保证,1.x 图编程常见。
🔗 相似问题
同一考点的不同问法,换着练更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习
