本文是《Python深度学习》一书的相关笔记。
张量(tensor)是一个数据容器,它所包含的一般是数值数据。下面是张量中的一些名词:
>>> import numpy as np
>>> x = np.array(12)
>>> x
array(12)
>>> x.ndim
0
>>> 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 个轴(沿着每个轴可能有任意个维度)。
>>> x = np.array([[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]])
>>> x.ndim
2
>>> 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
#下面这个例子选择第 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)
#你可以在所有图像的右下角选出 14 像素× 14 像素的区域:
my_slice = train_images[:, 14:, 14:]
#也可以使用负数索引。与 Python 列表中的负数索引类似,它表示与当前轴终点的相对位置。
#你可以在图像中心裁剪出 14 像素× 14 像素的区域:
my_slice = train_images[:, 7:-7, 7:-7]
(1)向量数据: 2D 张量,形状为 (samples, features)
(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)