Tensor 是什么?PyTorch 里最重要的对象讲清楚
学 PyTorch 时,第一个绕不开的概念就是 Tensor。
很多人会把它翻译成“张量”,这个词听起来有点硬。但从代码角度看,可以先把 Tensor 理解成更通用的数组。
它可以是一组数字,也可以是一张表,还可以是一批图片。
从数字到 Tensor
一个普通数字可以看成 0 维 Tensor:
import torch x = torch.tensor(3.0)
一组数字可以看成 1 维 Tensor:
x = torch.tensor([1.0, 2.0, 3.0])
一个矩阵可以看成 2 维 Tensor:
x = torch.tensor([ [1.0, 2.0], [3.0, 4.0], ])
如果是一批图片,维度可能更多,比如:
[batch, channel, height, width]
这就是深度学习里常见的四维 Tensor。
Tensor 为什么重要
在 PyTorch 里,几乎所有东西都会变成 Tensor。
训练数据是 Tensor,模型参数是 Tensor,中间计算结果是 Tensor,梯度也是 Tensor。
如果你理解了 Tensor 的形状和流动方式,很多模型代码就会清楚很多。
shape 是第一重点
看 Tensor 时,最重要的是看它的 shape。
比如:
x = torch.randn(32, 784) print(x.shape)
这里的 32 通常表示 batch size,784 可能表示每个样本的特征数量。
很多 PyTorch 报错,本质上都是 shape 对不上。
比如 Linear 层期待输入是 [batch, in_features],但你传进去的是别的形状,就会报维度错误。
Tensor 和 NumPy 有点像
如果你学过 NumPy,会发现 Tensor 和 ndarray 很像。
它们都可以做矩阵计算、切片、广播、变形。
但 PyTorch Tensor 有两个特别重要的能力:
-
可以放到 GPU 上计算
-
可以记录梯度,支持自动求导
这也是它能用于深度学习训练的关键。
常见操作
几个入门阶段最常用的操作:
x = torch.randn(2, 3)
x.shape
x.reshape(3, 2)
x.to("cuda")
x.float()
x.mean()
x.sum()
这些操作不需要一次性背完,但要慢慢熟悉。
尤其是 reshape、to(device)、float(),在训练代码里非常常见。
小结
Tensor 是 PyTorch 的基础数据对象。
先别被“张量”这个名字吓到。你可以把它理解成可以参与深度学习计算的多维数组。
学 PyTorch 时,多看 shape,多跟踪数据从输入到模型输出的变化,很多问题都会变得清楚。
技术图:把关键链路画清楚
可运行实验:同时检查 shape、dtype 与广播
Tensor 报错多数不是“数学太难”,而是形状、类型或设备不匹配。养成打印这三项的习惯,比盲目改代码有效。
import torch
x = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float32)
bias = torch.tensor([0.1, 0.2, 0.3])
y = x + bias
print("x:", tuple(x.shape), x.dtype, x.device)
print("bias:", tuple(bias.shape))
print("y:\n", y)
运行结果:
x: (2, 3) torch.float32 cpu bias: (3,) y: tensor([[1.1000, 2.2000, 3.3000], [4.1000, 5.2000, 6.3000]])
bias 只有 3 个元素,却能自动作用到两行数据上,这就是广播。广播很方便,但维度含义不清时也可能悄悄产生错误结果。
常见误区
-
Tensor 的维度越多越高级。维度只描述数据组织方式。
-
Shape 能对上就一定正确。相同 shape 也可能代表完全不同的语义。
动手练习
把 bias 改成 shape 为 (2,) 的 Tensor,观察报错并解释哪个维度无法匹配。
本文首发于「去你想去的地方」: Tensor 是什么?PyTorch 里最重要的对象讲清楚 | 去你想去的地方
完整学习路线、视频版和后续更新请访问原文。
更多推荐





所有评论(0)