目前所有机器学习系统都使用张量(tensor)作为基本数据结构,张量是一个数据容器,其包含的通常是数值数据,因此属于一个数字容器。
我们熟悉的矩阵为2阶矩阵。张量就是矩阵向任意维度dimensionality(张量的维度通常称为轴axis)的推广。张量轴的个数也叫作阶(rank)。
张量主要有以下3个属性来定义:
- 轴的个数:也称为张量的ndim;
- 形状:为一个整数元祖,表示张量沿每个轴的维度大小,即元素个数。
- 数据类型:张量所包含的数据的类型,例如,float16、float32、float64、unit8等。在tensorflow中还可能会遇到string类型的张量。
1.标量(0阶张量):
仅包含一个数字的张量叫做标量(scalar),也称作标量张量、0阶张量、0维张量。
在NumPy中,一个float32 类型或float64 类型的数字就是一个标量张量(或标量数组)。
可以用ndim
属性来查看NumPy 张量的轴的个数。
>>> import numpy as np
>>> x = np.array(1)
>>> x
array(1)
>>> x.ndim
0
>>> x.shape
()
2.向量(1阶张量):
数字组成的数组叫做向量(vector),也称作1阶张量、1维张量。
# 该向量包含5个元素,也称为5为向量
>>> x = np.array([1, 2, 3, 4, 5])
>>> x
array([1, 2, 3, 4, 5])
>>> x.ndim
1
>>> x.shape
(5,)
3.矩阵(2阶张量):
向量组成的数组叫做矩阵(matrix),也称为2阶张量、2维张量。
# 第一个轴叫做行(row),第二个轴叫做列(column)
>>> x = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
>>> x.ndim
2
>>> x.shape
(3, 4)
4.3阶张量或更高阶张量:
多个矩阵(2阶张量)组成的数组为3阶张量,多个3阶张量组成的数组为4阶张量,以此类推,得到更高阶张量。
>>> x = np.array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]],
[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]],
[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]]])
>>> x.ndim
3
>>> x.shape
(3, 3, 4)
5.MNIST数据:
首先加载MNIST数据集。
# 下载的数据集保存位置 C:/Users/用户名/.keras、datasets,为npz 格式
# npz格式实际上是numpy提供的数组存储方式,简单的可看做是一系列npy数据的组合
from tensorflow.keras.datasets import mnist
(train_images , train_labels) , (test_images , test_labels) = mnist.load_data()
查看数据属性。
# 查看张量train_images 的轴的个数,即ndim 属性----→3维张量
train_images.ndim
# 查看张量形状----→(60000, 28, 28)
train_images.shape
# 查看张量数据类型----→dtype('uint8')
train_images.dtype
可以看出,train_images 是一个由8 位整数组成的3 阶张量。
使用Matplotlib 库来显示这个3 阶张量中的第1个数字。
import matplotlib.pyplot as plt
digit = train_images[0]
plt.imshow(digit,cmap=plt.cm.binary)# cmap参数将标量数据映射到色彩图,具体颜色见本文附录
plt.show()
运行代码,可以看到第一个数字为5。
6.现实世界中的数据张量实例:
深度学习中需要处理的数据主要包括以下几种:
- 向量数据:形状为(samples, features)的 2 阶张量,每个样本都是一个数值(“特征”)向量。
- 时间序列数据或序列数据:形状为 (samples, timesteps, features)的 3 阶张量,每个样本都是特征向量组成的序列(序列长度为timesteps)。
- 图像数据:形状为 (samples, height, width, channels)的 4 阶张量,每个样本都是一个二维像素网格,每个像素则由一个“通道”(channel)向量表示。
- 视频数据:形状为 (samples, frames, height, width, channels) 的 5 阶张量,每个样本都是由图像组成的序列(序列长度为frames)。
通常来说,深度学习中所有数据张量的第一个轴(也就是轴0,因为索引从0 开始)都是样本轴[samples axis,有时也叫样本维度(samples dimension)]。
附录:
plt.imshow()中 cmap参数所能映射的颜色表,名字后加_r
表示颜色取反。
References:《Deep Learning with Python(Second Editon)》