神经网络的数据表示 -- 张量(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、常用张量表示

(1)向量数据: 2D 张量,形状为 (samples, features)

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

(2)时间序列数据或序列数据: 3D 张量,形状为 (samples, timesteps, features)

  • 如时间序列数据或序列数据
    在这里插入图片描述

(3)图像: 4D 张量,形状为 (samples, height, width, channels) 或 (samples, channels, height, width)

  • 如图像数据,图像通常具有三个维度:高度、宽度和颜色深度。
    在这里插入图片描述

(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)。
发布了38 篇原创文章 · 获赞 18 · 访问量 6071

猜你喜欢

转载自blog.csdn.net/Sc0fie1d/article/details/103125115
今日推荐