核心要点

  • 能说清 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

创建

python
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) 在运行时取真实维度。

追问

追问 1Tensor 不可变如何「更新」权重?

权重不用普通 Tensor,而用 tf.Variable——它是可变容器,通过 var.assign(new)、assign_add(delta) 原地更新底层值。训练时 optimizer.apply_gradients 内部就是对各 trainable_variables 调 assign 类操作完成更新,而中间计算结果仍是不可变 Tensor。

追问 2ragged tensor 是什么?

题库专题:TensorFlow 中的计算图是什么?

tf.RaggedTensor 表示各行长度不一的张量,适合变长序列——如一批长短不同的句子 token、嵌套列表——无需 padding 到等长。相比补 0 再加 mask,它省内存且语义清晰;tf.data、Keras 部分层支持直接处理。

题库延伸:与本追问相关的专题题 → TensorFlow 中的计算图是什么?

追问 3Eager Tensor 和 Graph Tensor?

题库专题:TensorFlow 中的计算图是什么?

Eager Tensor 是即时执行下的真实张量,持有具体数值,可 .numpy() 取值、直接打印;Graph Tensor(symbolic tensor)出现在 @tf.function 追踪或 Keras Functional 构图时,只是图中占位符、没有具体值,对它调 .numpy() 会报错。理解这点能解释为何在 tf.function 里 print 张量打印的是符号而非数值。

题库延伸:与本追问相关的专题题 → TensorFlow 中的计算图是什么?

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。

📖 术语表

🛠️ AI 工具

  • Pytorch

    Meta 开源的深度学习框架,100K+ stars。以动态计算图和 Pythonic 风格著称,在学术界和工业界都有广泛应用,支持分布式训练、移动端部署和 ONNX 导出

  • Tensorflow

    全球最流行的机器学习框架之一,195K+ stars。Google 开源的端到端 ML 平台,支持 TensorFlow、Keras 等多种 API,覆盖深度学习、强化学习、移动端部署等全场景,是 AI 工程师的必备工具

  • Keras

    深度学习框架,64,020+ stars。高级神经网络 API,支持 TensorFlow、JAX、PyTorch 多后端。以用户友好著称,让深度学习从实验到生产的转化变得简单高效