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)的张量中。