核心要点

  • Variable 在 0.4 后已合并入 Tensor

  • 历史:Variable 包装 Tensor 参与 Autograd

  • 现在用 requires_grad=True 的 Tensor

  • 能说明版本演进避免踩坑老教程

简要回答

早期 PyTorch 中 Variable 是带 Autograd 功能的张量包装;0.4 版后 Variable 与 Tensor 合并,现在直接用 requires_grad=True 的 Tensor 即可。

标准回答

一、历史背景

PyTorch 0.3 及以前,Variable 包装 Tensor 以接入 Autograd:.data 存数值,.grad梯度requires_grad 控制是否求导。

二、PyTorch 0.4+

Variable 与 Tensor 合并。现在:
示例代码可以这样理解:
x = torch.randn(3, requires_grad=True) # 直接参与 Autograd

三、nn.Parameter

是特殊 Tensor,默认 requires_grad=True,注册为模型参数。

面试里不要只停在公式或名词,可以补 **PyTorch 中 Tensor 与 Variable ** 对训练稳定性、泛化、收敛速度或显存/算力的影响。再说明一个常见调参或排错场景,面试官会更容易判断你真的用过这些方法。

四、对比(现代视角)

概念 现代 PyTorch
普通数据 requires_grad=False 的 Tensor
可训练参数 nn.Parameterrequires_grad=True
常量 不参与图的 Tensor
读旧代码或教程看到 Variable(tensor) 应知已等价于 tensor.requires_grad_()。面试考此题多为确认你了解框架演进,而非让你用已废弃 API。详见 PyTorch 迁移说明。

回答思路

  • 【定义】用一句话说清「PyTorch 中 Tensor 与 Variable」

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

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

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

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

延伸学习

工具:PyTorch。知识库:深度学习基础反向传播原理

常见误区

⚠️ 常见踩坑

误区一:容易答偏的地方:新代码仍 import Variable;混淆 .data 修改与 inplace 安全;不知道 0.4 合并历史。

追问

追问 1nn.Parameter 和普通 Tensor 区别?

Parameter 注册到 Module.parameters(),出现在 state_dict,优化器默认追踪;普通 Tensor 即使用 requires_grad 也需手动传入 optimizer。

追问 2叶子张量与非叶子区别?

用户直接创建或 Parameter 多为叶子,保留 .grad;中间运算结果为非叶子,默认 backward 后释放梯度。影响 hook 与调试。

追问 3为什么废弃 Variable?

API 简化,减少 Tensor/Variable 双类型困惑;与 NumPy 心理模型一致——一个 Tensor 类型通过 flag 控制是否可微。

🔗 相似问题

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

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

延伸学习

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