神经网络的数据表示-张量Tensor

本文是《Python深度学习》一书的相关笔记。

张量(tensor)是一个数据容器,它所包含的一般是数值数据。下面是张量中的一些名词:

  • 轴(axis):张量的维度( dimension);张量轴的个数也称作.
  • 形状(shaple):这是一个整数元组,表示张量沿每个轴的维度大小(元素个数)。例如,某矩
    阵的形状为 (3, 5)表示这个矩阵有3行5列
  • 数据类型(dtype):张量中所包含数据的类型

1 标量(0D 张量)

  • 仅包含一个数字的张量叫作标量(scalar)
  • 可以用ndim属性来查看一个 Numpy 张量的轴的个数。
>>> import numpy as np
>>> x = np.array(12)
>>> x
array(12)
>>> x.ndim
0

2 向量(1D 张量)

  • 数字组成的数组叫作向量(vector)
>>> x = np.array([12, 3, 6, 14, 7])
>>> x
array([12, 3, 6, 14, 7])
>>> x.ndim
1

这个向量有 5 个元素,所以被称为 5D 向量。不要把 5D 向量和 5D 张量弄混! 5D 向量只
有一个轴,沿着轴有 5 个维度,而 5D 张量有 5 个轴(沿着每个轴可能有任意个维度)。

3 矩阵(2D 张量)

  • 向量组成的数组叫作矩阵(matrix)
  • 第一个轴上的元素叫作行(row),第二个轴上的元素叫作列(column)
>>> x = np.array([[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]])
>>> x.ndim
2

4 3D 张量与更高维张量

  • 将多个矩阵组合成一个新的数组,可以得到一个 3D 张量,可以将其直观地理解为数字
    组成的立方体。
  • 将多个 3D 张量组合成一个数组,可以创建一个 4D 张量,以此类推。
>>> x = np.array([[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]]])
>>> x.ndim
3

5 Numpy张量切片

  • 我们以Numpy 3D张量上的张量切片运算为例
  • train_images[i] 表示沿着第一个轴的所有数字
#下面这个例子选择第 10~100 个数字,并将其放在形状为 (90, 28,28) 的数组中
>>> my_slice = train_images[10:100]
>>> print(my_slice.shape)
(90, 28, 28)

#下面的写法跟上面是等价的;其中:表示选取整个轴
>>> my_slice = train_images[10:100, :, :]
>>> my_slice.shape
(90, 28, 28)
>>> my_slice = train_images[10:100, 0:28, 0:28]
>>> my_slice.shape
(90, 28, 28)
  • 再以某个3D张量存储的图像为例
#你可以在所有图像的右下角选出 14 像素× 14 像素的区域:
my_slice = train_images[:, 14:, 14:]

#也可以使用负数索引。与 Python 列表中的负数索引类似,它表示与当前轴终点的相对位置。
#你可以在图像中心裁剪出 14 像素× 14 像素的区域:
my_slice = train_images[:, 7:-7, 7:-7]

6 常用张量表示

6.1 向量数据

  • 2D 张量,形状为 (samples, features)

  • 对于这种数据集,每个数据点都被编码为一个向量,因此一个数据批
    量就被编码为 2D 张量(即向量组成的数组),其中第一个轴是样本轴,第二个轴是特征轴。

6.2 时间序列数据或序列数据

6.3 图像

6.4 视频

  • 5D 张量,形状为 (samples, frames, height, width, channels) 或 (samples, frames, channels, height, width)

  • 如视频数据,频可以看作一系列帧,每一帧都是一张彩色图像。由于每一帧都可以保存在一个形状为 (height, width, color_depth) 的 3D 张量中,因此一系列帧可以保存在一个形状为 (frames, height, width, color_depth) 的 4D 张量中,而不同视频组成的批量则可以保存在一个 5D 张量中,其形状为(samples, frames, height, width, color_depth)。

文章作者: Alston
文章链接: https://lizitong67.github.io/2020/02/21/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E6%95%B0%E6%8D%AE%E8%A1%A8%E7%A4%BA-%E5%BC%A0%E9%87%8FTensor/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Alston's blog