简要回答
TensorFlow 2.x 通过 tf.GradientTape 上下文记录可微操作,前向结束后调用 tape.gradient(target, sources) 自动计算梯度,支持高阶导与持久 tape。
标准回答
一、核心回答
TensorFlow 2.x 的自动微分核心是 tf.GradientTape:
示例代码可以这样理解:
with tf.GradientTape() as tape:
predictions = model(x, training=True)
loss = loss_fn(y, predictions)
grads = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))
二、机制
tape 在 with 块内记录所有可微 op 及其依赖(动态计算图);gradient(target, sources) 从 target 向 sources 反向应用链式法则。
三、进阶
回答思路
【定义】用一句话说清「TensorFlow 如何处理自动微分」
【原理】讲清关键机制或步骤(2~3 点)
【例子】举一个真实项目、论文或产品中的例子
【对比】与易混淆概念或替代方案比较(如有)
【收尾】总结适用场景 + 一个局限或风险
延伸学习
工具:TensorFlow。术语:反向传播。知识库:反向传播原理、深度学习基础。
常见误区
⚠️ 常见踩坑
误区一:容易答偏的地方:在 tape 上下文外调用 gradient;忘记 watch 非 Variable;混用 TF 1.x tf.gradients API 与 2.x tape。
追问
追问 1:GradientTape 和 tf.keras fit 用哪个?
追问 2:如何求高阶导数?
嵌套 GradientTape:内层 tape 求一阶,外层对一阶结果再求导。用于部分正则项或元学习,计算成本较高。
追问 3:tape 外定义的变量能求梯度吗?
只有 trainable Variable 或 tape.watch() 的张量可作为 sources;常数、numpy 转张量默认不追踪,需 watch 若要对输入求导(如对抗样本)。
🔗 相似问题
同一考点的不同问法,换着练更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习
