理解Tensor张量
深度学习的底层是对张量(Tensor)的计算,因此有必要充分理解张量(Tensor)。
张量的理解
可以将张量(Tensor)理解为一个装数值的容器(实际上是多维数组),容器的属性包括:
- 容器的形状(Shape)
- 容器的维度/轴(Rank/Axis)
- 容器内数值的类型(Python中为dtype)
下图展示了从1维张量到6维张量:
说明:
- 0维张量(0d-tensor)为标量(Scalar),或数值(Number)
- 1维张量(1d-tensor)为向量(Vector),对应计算机术语中的数组(Array),或者序列(Sequence),或者列表(List),或者行(Row),或者列(Column)
- 2维张量(2d-tensor)为矩阵(Matrix),对应计算机术语中的二维数组,或者表格(Table)
- 3维张量(3d-tensor)为立方体(Cube),对应计算计术语中的三维数组
- 4维张量(4d-tensor)可以理解为一排立方体(Cube)
- 5维张量(5d-tensor)可以理解为多排立方体(Cube)
- 6维张量(6d-tensor)可以理解为堆起来的立方体(Cube)
再用蜜蜂箱的例子来帮助理解:
从巢孔,到巢框,到蜜蜂箱,不同的容器,都有形状(Shape),有维度/轴(Rank/Axis),都能装蜂蜜(数值类型)。
一个蜜蜂箱就是一个3维张量(立方体),可以放下几片巢框;每片巢框就是一个2维张量(矩阵);巢框由多排巢孔组成,每排巢孔就是一个1维张量(向量);每个巢孔就是一个0维张量(标量)。
把蜜蜂箱排成1排,就是4维张量;多排蜜蜂箱,就是5维张量;把多个蜜蜂箱像集装箱一样堆叠起来,就是6维张量。
不同维度张量的数据
张量 | 形状 | 数据集示例 |
---|---|---|
2D张量 | (samples, features) | 人口统计数据集 文本文档数据集 |
3D张量 | (samples, timestamp, features) | 时间序列数据(股票价格数据集) 序列数据(展开0/1矩阵的文本文档数据集) |
4D张量 | (samples, height, width, channels) 或 (samples, channels, height, width) |
图像 |
5D张量 | (samples, frames, height, width, channels) 或(samples,frames, channels, height, width) |
视频(视频可以理解为由多帧图像组成) |
说明:
- 上表中,features(特征集)为一个包含多个数值的向量
张量的Python程序
0维张量
import numpy as np
x = np.array(42)
print