目录

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

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

张量小记

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

通俗易懂的张量(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} [ 1 3 ​ 2 4 ​ ]一个表格,像 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

    3

    0

    C 还是

    3 0 ∘ C 30^{\circ}C

    3

    0

    C 。

  • 向量(如风速) :风速

    5 m/s 5 \text{m/s}

    5

    m/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

=

[

1

3

2

4

]

,

B

=

[

5

7

6

8

]

那么:

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

5

3

7

2

6

4

8

]

=

[

6

10

8

12

]

(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

μν

2

1

g

μν

R

Λ

g

μν

=

c

4

8

π

G

T

μν

这里的 $ 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

    0

    255 )。

  • 这就是一个 **( 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

,

c

l

a

ss

])

  • 这里的

    N N

    N 是检测到的目标数(比如 3 个)。

  • 每个目标由 5 个数值表示:

    • x , y , w , h x, y, w, h

      x

      ,

      y

      ,

      w

      ,

      h 表示目标框的位置(中心点坐标 + 宽高)。

    • c l a s s class

      c

      l

      a

      ss 表示类别(如 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 维(矩阵)或更高维。
  • 张量的核心是“坐标无关” ,无论你换什么坐标系,它的数学性质都不变。
  • 张量在现实世界中无处不在 ,在物理学、计算机科学、深度学习等领域都非常重要。