Test Tensor
Tensor¶
📐 张量 (Tensor) 讲解¶
张量 (Tensor) 是 PyTorch、TensorFlow 等深度学习框架中的核心数据结构,它在数学上是标量、向量和矩阵概念的泛化。
简单来说,张量就是深度学习中的数据容器。
1. 张量的数学概念:维度 (Rank)¶
张量可以被看作是一个多维数组,它的“维度”或“阶”(在数学和物理中称为 Rank)决定了它能表示的数据复杂程度。
| 阶/维度 (Rank) | 形状 (Shape) | 描述 | 示例数据 |
|---|---|---|---|
| 0 阶 | () |
标量 (Scalar):一个纯量。 | 5, $\pi$, 损失函数值 loss |
| 1 阶 | (n,) |
向量 (Vector):一维数组。 | 词嵌入 (Word Embedding),$\begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}$ |
| 2 阶 | (n, m) |
矩阵 (Matrix):二维数组。 | 图像的灰度值,线性层权重 $\mathbf{W}$ |
| 3 阶 | (n, m, k) |
三阶张量:三维数组。 | 彩色图像 (高 x 宽 x 颜色通道),视频帧 |
| 4 阶 | (n, m, k, l) |
四阶张量:四维数组。 | 批量 (Batch) 的彩色图像 (批量大小 x 颜色通道 x 高 x 宽) |
2. 张量的主要属性¶
在 PyTorch 等框架中,一个张量对象主要包含以下几个关键属性:
| 属性 | 描述 | 示例 |
|---|---|---|
| Data (数据) | 存储在张量中的实际数值。 | [[1, 2], [3, 4]] |
| Shape (形状) | 定义了张量在每个维度上的大小。 | 2x2 矩阵的形状是 (2, 2) |
| Dtype (数据类型) | 存储的元素的数据类型。 | torch.float32, torch.int64 等。 |
| Device (设备) | 张量存储的位置,可以是 CPU 或 GPU。 | cpu 或 cuda:0 |
requires_grad |
一个布尔值,表示是否需要计算该张量的梯度(用于反向传播)。 | True 或 False |
3. 张量在深度学习中的应用¶
张量是表示所有数据的通用语言:
| 数据类型 | 对应的张量形状 (常见) | 描述 |
|---|---|---|
| 图像 | (C, H, W) 或 (H, W, C) |
通道数 (C)、高 (H)、宽 (W)。 |
| 文本 (批量) | (Batch_size, Seq_len, Embedding_dim) |
批量大小、序列长度、词嵌入维度。 |
| 训练批量 (Batch) | (Batch_size, C, H, W) |
深度学习中处理数据的主流形式,一次处理多张图片。 |
| 模型参数 | 各种形状 | 模型的权重 $\mathbf{W}$ 和偏置 $\mathbf{b}$ 都是张量。 |
4. PyTorch 张量的特点:自动微分¶
PyTorch 的张量 (torch.Tensor) 最强大的特性是它集成了自动微分 (Autograd) 系统。
- 当你创建一个张量并设置
requires_grad=True时,PyTorch 会开始跟踪所有作用在这个张量上的操作。 - 这使得模型在训练时可以轻松地通过
.backward()方法自动计算所有参数的梯度,这是实现反向传播和优化模型的基础。
import torch
# 创建一个需要计算梯度的 2 阶张量 (矩阵)
x = torch.tensor([[1., 2.], [3., 4.]], requires_grad=True)
print(f"张量的形状: {x.shape}")
print(f"是否需要计算梯度: {x.requires_grad}")
# 进行一些操作
y = x + 2
z = y * y * 3
out = z.mean()
# out.backward() # 调用 backward 会自动计算所有 require_grad=True 的张量的梯度
总结: 张量是深度学习中数据的载体,它不仅能存储多维数据,还集成了自动微分能力,是构建和训练神经网络的基石。
In [ ]: