1.Tensor(张量)
张量是一个数据容器,包含的数据几乎总是数值数据,因此是数字的容器。矩阵是二维张量。
2.scalar(标量,标量张量,零维张量,0D张量)
标量张量有0个轴(ndim == 0)。张量轴的个数也叫阶。
- >>>import numpy as np #将numpy加载为np
- >>>x=np.array(12)
- >>>x
- array(12)
- >>>x.ndim
- 0
3.vector(向量,1D张量)
数字组成的数组叫做向量或一维张量。一位张量只有一个轴
- >>>x=np.array([12,3,6,14,7]) #5D向量,但轴是1
- >>>x
- array([12,3,6,14,7])
- >>>x.ndim
- 1
4.matrix(矩阵,2D张量)
矩阵有两个轴(第一个轴上的元素叫做行(row),第二个轴上的元素叫做列(column))
- >>>x=np.array([[5,78,2,34,0],
- [6,79,3,35,1],
- [7,80,4,36,2]])
- >>>x.ndim
- 2
5. 3D张量与更高维张量
将多个矩阵组合成一个新的数组,可以得到一个3D张量,直观理解为数字组成的立方体。
6.关键属性
阶的个数(ndim)、形状(shape)、数据类型(dtype)
- #加载MNIST数据集
- from keras.datasets import mnist
- (train_images,train_labels),(test_images,test_labels)=mnist.load_data()
-
- >>>print(train_images.ndim)
- 3
- >>>print(train_images.shape)
- (60000,28,28)
- >>>print(train_images.dtype)
- uint8
- #这里的train_images是由60000个矩阵组成的数组,每个矩阵由28*28个整数组成
显示该3D张量中第4个数字(第4个图像样本)
- digit=train_images[4]
- import matplotlib.pyplot as plt
- plt.imshow(digit,cmap=plt.cm.binary)
- plt.show()
7.张量切片
选择张量的特定元素叫做张量切片。
- #选择第10~100个数字,将其放在形状位(90,28,28)的数组中
- >>>my_slice=train_images[10:100]
- >>>print(my_slice.shape)
- (90,28,28)
-
- #等同于以下,给出了切片沿张量轴(row,column)的起始索引和结束索引
- >>>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:]
-
- #所有图像中心裁剪出14*14像素区域
- my_slice=train_images[:,7:-7,7:-7]
8.数据批量
通常,深度学习中所有数据张量的第一个轴(0轴)都是样本轴。
深度学习模型不会同时处理整个数据集,而是将数据拆分成小批量(batch)。
- batch=train_images[:128] #第一个批量
- batch=train_images[128:256] #第二个批量
- batch=train_images[128*n:128*(n+1)] #第n个批量
对于这种批量张量,第一个轴叫做批量轴或批量维度。
9.图像数据
128张灰度图像组成的批量可以保存在一个形状为(128,256,256,1)的张量中
128张彩色图像组成的批量可以保存在一个形状为(128,256,256,3)的张量中
10.视频数据
一个以每秒4帧采样的60秒YouTube视频片段,视频尺寸为144*256,这个视频共有240帧。
4个这样的视频片段组成的批量将保存在形状为(4,240,144,256,3)的张量中。