核心要点
能说清 Tensor 是不可变多维数组,计算的基本单元,带 rank(维数)、shape、dtype、device 属性
能区分 Tensor(不可变,存数据/中间结果)与 tf.Variable(可变,存可训练权重,用 assign 更新)
能举创建方式:tf.constant、tf.zeros、tf.random.normal、tf.convert_to_tensor(np 数组)
能说明 Eager 模式下运算立即求值,@tf.function 内张量在图中流动
标准回答
在 TensorFlow 中,Tensor 是不可变的多维数组,是计算的基本单元(类似 NumPy ndarray + 元数据)。
属性:
- rank(阶):维度数,标量 rank=0,向量 rank=1
- shape:各维大小,如 (batch, 28, 28, 3)
- dtype:float32、int64 等
- device:/CPU:0、/GPU:0
创建:
tf.constant([[1, 2], [3, 4]])
tf.zeros([2, 3])
tf.random.normal([batch, dim])
tf.convert_to_tensor(numpy_arr)Tensor vs Variable:
| Tensor | Variable | |
|---|---|---|
| 可变性 | 不可变 | 可变(训练权重) |
| 用途 | 数据、中间结果 | 模型参数 |
Eager 模式下运算立即求值;@tf.function 中张量在图中流动。与 PyTorch 张量概念对应,API 命名略有不同。
常见误区
⚠️ 常见踩坑
想原地修改 Tensor(如 t[0] = 1)来更新权重——Tensor 不可变,任何运算都返回新张量,可训练状态必须用 tf.Variable 的 assign/assign_add;另一个是混淆静态 shape 与动态 shape,对含未知维(None)的张量用 tensor.shape 拿到 None,应改用 tf.shape(tensor) 在运行时取真实维度。
追问
追问 1:Tensor 不可变如何「更新」权重?
权重不用普通 Tensor,而用 tf.Variable——它是可变容器,通过 var.assign(new)、assign_add(delta) 原地更新底层值。训练时 optimizer.apply_gradients 内部就是对各 trainable_variables 调 assign 类操作完成更新,而中间计算结果仍是不可变 Tensor。
追问 2:ragged tensor 是什么?
题库专题:TensorFlow 中的计算图是什么?tf.RaggedTensor 表示各行长度不一的张量,适合变长序列——如一批长短不同的句子 token、嵌套列表——无需 padding 到等长。相比补 0 再加 mask,它省内存且语义清晰;tf.data、Keras 部分层支持直接处理。
题库延伸:与本追问相关的专题题 → TensorFlow 中的计算图是什么?
追问 3:Eager Tensor 和 Graph Tensor?
题库专题:TensorFlow 中的计算图是什么?Eager Tensor 是即时执行下的真实张量,持有具体数值,可 .numpy() 取值、直接打印;Graph Tensor(symbolic tensor)出现在 @tf.function 追踪或 Keras Functional 构图时,只是图中占位符、没有具体值,对它调 .numpy() 会报错。理解这点能解释为何在 tf.function 里 print 张量打印的是符号而非数值。
题库延伸:与本追问相关的专题题 → TensorFlow 中的计算图是什么?
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📰 AI 资讯
🛠️ AI 工具
- Pytorch
Meta 开源的深度学习框架,100K+ stars。以动态计算图和 Pythonic 风格著称,在学术界和工业界都有广泛应用,支持分布式训练、移动端部署和 ONNX 导出
- Tensorflow
全球最流行的机器学习框架之一,195K+ stars。Google 开源的端到端 ML 平台,支持 TensorFlow、Keras 等多种 API,覆盖深度学习、强化学习、移动端部署等全场景,是 AI 工程师的必备工具
- Keras
深度学习框架,64,020+ stars。高级神经网络 API,支持 TensorFlow、JAX、PyTorch 多后端。以用户友好著称,让深度学习从实验到生产的转化变得简单高效