什么是张量(不是卖麻辣烫的那个张亮)

发布于:2025-03-16 ⋅ 阅读:(26) ⋅ 点赞:(0)

张量小记

张量是在数学、物理、计算机等领域的一个重要的学术名词,看起来很高大上(实际有时候也雀食酱紫),在这里煮啵简要通俗的说说这玩意是个啥,补药一听到张量就想起麻辣烫了大馋猫(虽然煮啵曾经也是)。

通俗易懂的张量(Tensor)讲解

1. 什么是张量?

说人话:张量(Tensor)是一种 “多维数据表”,可以用来存储和处理多维信息。

标量、向量、矩阵与张量的关系

维度 名称 示例 直观理解
0 维 标量(Scalar) 3.14 3.14 3.14, 42 42 42 一个普通的数
1 维 向量(Vector) [ 1 , 2 , 3 ] [1, 2, 3] [1,2,3] 一行数,类似一个箭头
2 维 矩阵(Matrix) [ 1 2 3 4 ] \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} [1324] 一个表格,像 Excel 数据表
3 维 3 阶张量 彩色图像( 28 × 28 × 3 28\times28\times3 28×28×3 一本书,每一页是一个矩阵
4 维 4 阶张量 视频( 100 × 28 × 28 × 3 100\times28\times28\times3 100×28×28×3 一部电影,每一帧是一个 3 维数据

2. 现实中的张量

张量在现实世界无处不在:

  • 灰度图片(2 阶张量):黑白图片是一个 28 × 28 28 \times 28 28×28 的矩阵。
  • 彩色图片(3 阶张量):一张你的英俊潇洒的自拍 1960 × 1280 1960\times1280 1960×1280 的彩色图片有 R、G、B 三个颜色通道,因此是 28 × 28 × 3 28 \times 28 \times 3 28×28×3 的数据。
  • 视频(4 阶张量):如果小电影有 100 帧,每一帧是一个彩色图片,那整个视频是一个 100 × 1920 × 1280 × 3 100 \times 1920 \times 1280 \times 3 100×1920×1280×3 的数据。

简单来说,张量就是更高维的数据表!

3. 张量的坐标变换

张量的一个重要特点是:无论坐标系怎么变,它的本质不变。举个例子:

  • 标量(如温度):无论在哪个国家, 3 0 ∘ C 30^{\circ}C 30C 还是 3 0 ∘ C 30^{\circ}C 30C
  • 向量(如风速):风速 5 m/s 5 \text{m/s} 5m/s 向东,如果换个坐标系,它的 x x x y y y 分量会变,但风速本身不变。
  • 矩阵(如应力):比如房子受到的压力,在不同角度看可能不同,但压力本身是不变的。

这就是张量的变换规则,确保它可以在不同坐标系下正确描述物理现象。

4. 张量的计算

(1) 张量加法

如果两个张量的形状相同,比如:
A = [ 1 2 3 4 ] , B = [ 5 6 7 8 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A=[1324],B=[5768]
那么:
A + B = [ 1 + 5 2 + 6 3 + 7 4 + 8 ] = [ 6 8 10 12 ] A + B = \begin{bmatrix} 1+5 & 2+6 \\ 3+7 & 4+8 \end{bmatrix} = \begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix} A+B=[1+53+72+64+8]=[610812]

(2) 张量乘法

如果是矩阵乘法:
A × B = 矩阵相乘 A \times B = \text{矩阵相乘} A×B=矩阵相乘
如果是更高阶张量,就会用更复杂的计算方式,比如 张量积(Tensor Product)

5. 张量的应用

(1) 物理学(广义相对论)

爱因斯坦的广义相对论用张量描述引力:
R μ ν − 1 2 g μ ν R + Λ g μ ν = 8 π G c 4 T μ ν R_{\mu\nu} - \frac{1}{2} g_{\mu\nu} R + \Lambda g_{\mu\nu} = \frac{8\pi G}{c^4} T_{\mu\nu} Rμν21gμνR+Λgμν=c48πGTμν
这里的 $ g_{\mu\nu} $ 就是度量张量,它决定了空间的形状。

(2) 机器学习

深度学习(如 TensorFlow、PyTorch)中,所有数据(图片、音频、文本)都存储成张量。例如:

  • 一张图片是一个 3 维张量。
  • 一个批次(Batch)图片是一个 4 维张量。

(3)在计算机视觉中的应用 (煮啵夹带私活嘿嘿)

张量(Tensor)在**计算机视觉(Computer Vision, CV)**中至关重要,因为几乎所有的视觉数据都可以用张量表示和处理。下面是张量在计算机视觉中的主要应用,以及相关的详细讲解。


1. 计算机视觉中的张量表示

在计算机视觉任务中,图片、视频等数据都可以表示为张量。例如:

(1) 图片(Image)

一张灰度图片可以用 二维张量(矩阵) 表示:

  • 假设有一张 28 × 28 28 \times 28 28×28 的黑白图片,每个像素点存储一个灰度值( 0 ∼ 255 0 \sim 255 0255)。
  • 这就是一个 ( H , W ) (H, W) (H,W) 形状的 2D 张量,即 28 × 28 28 \times 28 28×28 的矩阵。

一张彩色图片是一个 三维张量

  • 彩色图片有 RGB 通道(红、绿、蓝),每个通道都是一个 H × W H \times W H×W 的矩阵。
  • 这构成了一个 ( H , W , C ) (H, W, C) (H,W,C) 形状的 3D 张量,例如 28 × 28 × 3 28 \times 28 \times 3 28×28×3

(2) 视频(Video)

  • 视频是由**多张图片(帧)**组成的,所以它是一个 四维张量
    ( N , H , W , C ) (N, H, W, C) (N,H,W,C)
    其中:

    • N N N 表示帧数(Frame number)。
    • H , W H, W H,W图片高度和宽度
    • C C C通道数(RGB = 3)

例如,一个 60 60 60 帧的视频,分辨率 1920 × 1080 1920 \times 1080 1920×1080,RGB 通道,就可以用:
( 60 , 1080 , 1920 , 3 ) (60, 1080, 1920, 3) (60,1080,1920,3)
的 4D 张量来表示。

(3) 批量处理(Batch Processing)

在深度学习中,我们通常一次处理多个样本,例如:

  • 一个批次(Batch)有 32 32 32 张图片,每张是 28 × 28 × 3 28 \times 28 \times 3 28×28×3,则数据是:
    ( B , H , W , C ) = ( 32 , 28 , 28 , 3 ) (B, H, W, C) = (32, 28, 28, 3) (B,H,W,C)=(32,28,28,3)
    这就是 5 维张量(5D Tensor),用于批量训练神经网络。

2. 张量在计算机视觉任务中的应用

(1) 图像分类(Image Classification)

任务:给定一张图片,判断其类别,比如 猫 / 狗 分类

  • 输入: ( H , W , C ) (H, W, C) (H,W,C) 形状的张量(如 224 × 224 × 3 224 \times 224 \times 3 224×224×3)。
  • 模型(CNN): 使用卷积神经网络(CNN)处理。
  • 输出: 一个类别概率向量(如 [ 0.9 , 0.1 ] [0.9, 0.1] [0.9,0.1] 代表 90% 是猫,10% 是狗)。

示例网络:
输入 → CNN 层 → 全连接层 → Softmax 输出 \text{输入} \rightarrow \text{CNN 层} \rightarrow \text{全连接层} \rightarrow \text{Softmax 输出} 输入CNN 全连接层Softmax 输出

  • CNN 提取特征,如边缘、纹理、形状等。
  • 最终输出一个 张量,代表每个类别的概率。

(2) 目标检测(Object Detection)

任务:检测图片中的多个目标,输出它们的位置类别

  • 输入: ( H , W , C ) (H, W, C) (H,W,C) 形状的张量(如 416 × 416 × 3 416 \times 416 \times 3 416×416×3)。
  • 模型: 使用 YOLO / Faster R-CNN 等目标检测网络。
  • 输出: 一个 多维张量,表示多个目标的类别和边界框

示例输出:
( N , 5 ) = ( 3 , [ x , y , w , h , c l a s s ] ) (N, 5) = (3, [x, y, w, h, class]) (N,5)=(3,[x,y,w,h,class])

  • 这里的 N N N 是检测到的目标数(比如 3 个)。
  • 每个目标由 5 个数值表示:
    • x , y , w , h x, y, w, h x,y,w,h 表示目标框的位置(中心点坐标 + 宽高)。
    • c l a s s class class 表示类别(如 1 = 狗,2 = 猫)。

(3) 语义分割(Semantic Segmentation)

任务:给图片的每个像素分类,比如区分“人”和“背景”。

  • 输入: ( H , W , C ) (H, W, C) (H,W,C) 形状的图片张量。
  • 模型: U-Net、DeepLabV3+ 等语义分割网络。
  • 输出: ( H , W , K ) (H, W, K) (H,W,K) 形状的张量,其中 K K K 是类别数。

示例:

  • 对于 512 × 512 512 \times 512 512×512 的图片,输出是 ( 512 , 512 , 2 ) (512, 512, 2) (512,512,2),每个像素都有两个数值,分别表示“前景”和“背景”的概率。

(4) 实例分割(Instance Segmentation)

任务:不仅要分割出物体,还要区分不同个体,比如图中有 3 只狗,要给它们不同编号。

  • 输入: ( H , W , C ) (H, W, C) (H,W,C) 的图片张量。
  • 输出: ( H , W , N ) (H, W, N) (H,W,N),其中 N N N 是检测到的实例个数。

Mask R-CNN 是一个典型的实例分割模型,它的输出是一个 多通道张量

  • 一个通道是目标类别。
  • 另一个通道是目标的边界框坐标。
  • 还有一个通道是掩码(Mask),表示像素级区域。

(5) 生成对抗网络(GANs)

任务:用深度学习生成新图像,比如生成逼真的人脸。

  • 输入: 一个随机向量张量(如 [ 100 ] [100] [100])。
  • 生成器(Generator): 把 1D 张量转换成 3D 图片张量。
  • 输出: ( H , W , C ) (H, W, C) (H,W,C) 形状的张量,表示合成图像。

GANs 结构:
随机噪声 → G ( z ) → 生成假图片 → D ( x ) → 判别真假 \text{随机噪声} \rightarrow G(z) \rightarrow \text{生成假图片} \rightarrow D(x) \rightarrow \text{判别真假} 随机噪声G(z)生成假图片D(x)判别真假

  • 生成器 G 生成图片张量。
  • 判别器 D 评估真假。

3. 计算机视觉中张量的操作

在 PyTorch / TensorFlow 里,我们常用以下操作:

  1. 转换形状(Reshape)

    x = torch.randn(1, 3, 224, 224)  # (Batch, Channel, Height, Width)
    x = x.view(3, 224, 224)  # 去掉 batch 维度
    

2.张量归一化(Normalization)

x = x / 255.0  # 将像素值缩放到 [0, 1]

​ 3.维度变换(Permute / Transpose)

x = x.permute(2, 0, 1)  # 从 (H, W, C) 变为 (C, H, W)

​ 4.卷积运算(Convolution)

pythonCopyEditconv = torch.nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
output = conv(x)  # 经过 3x3 卷积,得到新的张量

6. 总结

  • 张量是一种“多维数组”,可以是 0 维(标量)、1 维(向量)、2 维(矩阵)或更高维。
  • 张量的核心是“坐标无关”,无论你换什么坐标系,它的数学性质都不变。
  • 张量在现实世界中无处不在,在物理学、计算机科学、深度学习等领域都非常重要。


网站公告

今日签到

点亮在社区的每一天
去签到