张量
就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。 张量是描述具有任意数量轴的n维数组的通用方法。 例如,向量是一阶张量,矩阵是二阶张量。 张量用特殊字体的大写字母表示(例如,X、Y和Z), 它们的索引机制与矩阵类似。
当我们开始处理图像时,张量将变得更加重要,图像以n维数组形式出现, 其中3个轴对应于高度、宽度,以及一个通道(channel)轴, 用于表示颜色通道(红色、绿色和蓝色)。
在Python中,张量(Tensor) 是多维数组的扩展形式,是机器学习和深度学习的核心数据结构。它不仅是数值的容器,更承载了计算图、硬件加速和自动微分等高级特性。以下从多个维度全面解析其概念与应用:
🔢 一、张量的本质:多维数组
张量可视为标量、向量和矩阵的高维推广,其维度(秩)决定了数据的结构复杂度:
-
0阶张量(标量):单一数值(如
3.14) -
1阶张量(向量):一维数组(如
[1, 2, 3]) -
2阶张量(矩阵):二维数组(如
[[1, 2], [3, 4]]) - 3阶张量(立方体):三维数组(如RGB图像:高度×宽度×颜色通道)
- 更高阶张量:如视频数据(时间×高度×宽度×通道)
例如:一张256×256的彩色图像是形状为
(256, 256, 3)的3阶张量。
⚡ 二、核心特性:超越传统数组的优势
与NumPy数组相比,张量在深度学习框架中具备独特能力:
| 特性 | NumPy数组 | 张量 |
|---|---|---|
| 计算设备 | 仅限CPU | 支持GPU/TPU加速(计算速度提升10-100倍) |
| 自动微分 | ❌ 不支持 | ✅ 支持梯度计算(神经网络训练核心) |
| 框架集成 | 通用科学计算 | 深度集成于PyTorch/TensorFlow |
| 动态计算图 | ❌ 不支持 | ✅ 支持操作追踪与优化(如PyTorch动态图) |
例:张量可通过
.backward()自动计算梯度,而NumPy需手动实现反向传播。
🛠️ 三、创建与操作:代码实践
1. 创建张量
-
PyTorch:
import torch scalar = torch.tensor(3) # 标量 matrix = torch.tensor([[1, 2], [3, 4]]) # 矩阵 zeros_3d = torch.zeros((2, 3, 4)) # 全零三维张量 -
TensorFlow:
import tensorflow as tf tensor = tf.constant([[1.0, 2.0], [3.0, 4.0]]) # 常量张量
2. 关键操作
-
形状变换:
# 将12元素向量转为3×4矩阵(-1表示自动计算维度) reshaped = torch.arange(12).view(3, -1) # 结果:[[0,1,2,3], [4,5,6,7], [8,9,10,11]] -
数学运算:
a = torch.tensor([[1, 2], [3, 4]]) b = torch.tensor([[5, 6], [7, 8]]) c = a + b # 逐元素加法 d = torch.matmul(a, b) # 矩阵乘法 -
自动微分(PyTorch示例):
x = torch.tensor(2.0, requires_grad=True) y = x**2 + 3*x y.backward() # 计算梯度 print(x.grad) # 输出:7.0(导数 dy/dx = 2x+3)
🌐 四、应用场景:从数据到智能系统
-
数据表示
- 图像:3阶张量(高度×宽度×通道)
- 文本:词嵌入矩阵(词数×嵌入维度)
- 视频:4阶张量(帧数×高度×宽度×通道)
-
深度学习模型
- 输入/输出:图像分类中,输入为图片张量,输出为预测概率向量
- 参数存储:神经网络权重以张量形式保存(如全连接层权重矩阵)
- 损失计算:均方误差(MSE)等损失函数直接操作张量
-
高阶应用
- 推荐系统:用户-物品交互数据用3阶张量表示(用户×物品×时间),通过张量分解预测偏好
- 医学成像:MRI扫描数据以3D/4D张量分析病变特征
💎 总结
Python中的张量是连接数据与智能算法的桥梁:
- 基础:多维数组的统一表示,支持标量→高维数据;
- 进阶:GPU加速与自动微分赋能复杂模型训练;
- 实践:通过PyTorch/TensorFlow操作,实现从数据预处理到模型部署的全流程。
提示:初学者建议从PyTorch张量操作入手,结合实际项目(如手写数字识别)深化理解。