介绍
在人工智能(尤其是深度学习)中,“张量”这个词有一个更工程化、更实用的含义,和数学里的严格定义不完全一样,但本质上是相通的。
一句话解释
张量 = 深度学习里的数据容器,是一种可以表示任意维度数据的多维数组。
它是神经网络输入、输出、参数(权重)的基本数据结构。
为什么要用张量?
因为现实世界的数据有各种维度:
- 标量(0D):一个数字,比如“温度=25”
- 向量(1D):一串数字,比如“一个样本的特征 [1.2, 3.1, -0.5]”
- 矩阵(2D):表格,比如“一批样本的特征(样本数 × 特征数)”
- 3D:序列数据,比如“文本(句子长度 × 词向量维度)”
- 4D:图像数据,比如“批量图片(批次 × 高度 × 宽度 × 通道)”
- 5D:视频数据,比如“批量视频(批次 × 时间 × 高度 × 宽度 × 通道)”
深度学习框架(PyTorch、TensorFlow)用张量来统一处理这些数据。
张量在AI中的作用
存储数据
图像、文本、声音、标签、模型参数全部用张量表示。支持GPU加速
张量可以放在GPU上进行高速计算,这是深度学习训练快的根本原因。自动求导
张量记录计算过程,能自动计算梯度(反向传播的核心)。支持并行计算
非常适合大规模训练和分布式训练。
特点
- 有形状(shape):例如 (32, 28, 28, 1) 表示 32 张 28×28 的灰度图
- 有数据类型(dtype):如 float32、int64
- 有设备(device):CPU 或 GPU
- 可以进行自动求导(requires_grad=True)
张量 vs 普通数组
张量 ≈ 多维数组,但更强大:
- 支持 GPU
- 支持自动求导
- 支持广播
- 支持更多数学操作
- 支持并行计算
例子
import torch
# 4D张量:批量大小=32,通道=3,高度=224,宽度=224
images = torch.randn(32, 3, 224, 224)
# 2D张量:32个样本,每个样本10个特征
features = torch.randn(32, 10)
# 1D张量:32个标签
labels = torch.randint(0, 10, (32,))
# 模型参数(也是张量)
weight = torch.randn(10, 100, requires_grad=True)
阶(秩)
张量(tensor),相当于数组的 维
在张量中,将 维 称之为 阶(秩)
| 阶(秩) | 数据类型 |
|---|---|
| 0阶(秩) | 常量 |
| 1阶(秩) | 1维数组(向量) |
| 2阶(秩) | 2维数组(矩阵) |
| n阶(秩) | n维数组 |
总结
在人工智能中:
- 张量 = 多维数组 + 自动求导 + GPU加速 + 深度学习专用数据结构
- 它是现代深度学习的基础数据单位
- 几乎所有操作(卷积、矩阵乘法、激活函数)都是在张量上进行的