文章目录
- 前言
- 1、张量
- **注意**:
- 2、**标量** (scalar):0阶的张量,0个轴,一个单独的数(整数或实数);
- 3、**向量**(vector):1阶的张量,也叫矢量,1个轴,一个数组;
- 4、**矩阵** (matrix):2阶的张量,2个轴通常称为行和列;
- 5、标量向量矩阵张量之间的联系:
前言
深度学习的表现之所以能够超过传统的机器学习算法离不开神经网络,然而神经网络最基本的数据结构就是
向量
和矩阵
,神经网络的输入是向量,然后通过每个矩阵对向量进行线性变换,再经过激活函数的非线性变换,通过层层计算最终使得损失函数的最小化,完成模型的训练。所以要想学好深度学习,对这些基础的数据结构还是要非常了解。
1、张量
学过线性代数的童鞋都知道,矩阵可以进行各种运算,比如:矩阵的加减法,矩阵的转置、矩阵的点乘、矩阵的叉乘,为了方便存储矩阵及进行矩阵之间的运算,大神们抽象出了PyTorch库,PyTorch库中有一个类叫torch.Tensor,这个类存储了一个矩阵变量,并且有一系列方法用于对这个矩阵进行各种运算,上面的这些矩阵运算都可以通过torch.Tensor类的相应方法实现。Tensor 这个单词一般可译作 “张量”,但是上面我们进行的都是矩阵运算,为什么要给这个类型起名字叫张量呢,直接叫矩阵不就行了吗?张量又是什么意思呢?通常我们不但要对矩阵进行运算,还要处理,零维的(单纯的一个数字)、一维矩阵(数组)、二维矩阵(矩阵)、三维的(三维矩阵)、还有多维矩阵,Pytorch为了把这些各种维统一起来,所以起名叫张量。这样,数组就是一阶张量,二维矩阵就是二阶张量,还有三阶张量,四阶张量、五阶张量、六阶张量等。pytorch中的 Tensor
支持超过一百种多操作,包括转置、索引、切片、数学运算、线性代数、随机数等等,总之,凡是你能想到的操作,在pytorch里都有对应的方法去完成。
下图是一个三维矩阵:
注意:
- 维(dimension)通常用来描述向量,比如:N维向量,128维特征值。这里的维和张量的轴定义不一样,这种N维向量描述的仍然是向量(即1阶张量)其中的N描述的是数组的元素个数;
- 由于2阶张量(即矩阵)形似2维平面,3阶张量形似3维空间,而N阶张量又可以用N维数组来表示,导致维有时会被拿来形容张量的 阶,为了避免混淆,不要用 维 来描述 张量的阶,阶的数量,代表这个张量有几个轴;
2、标量 (scalar):0阶的张量,0个轴,一个单独的数(整数或实数);
Python中定义一个标量:
x = 1
3、向量(vector):1阶的张量,也叫矢量,1个轴,一个数组;
Python中定义一个向量:(向量在python中表示成一维数组)
import numpy as np
#行向量
a = np.array([1,2,3,4])
4、矩阵 (matrix):2阶的张量,2个轴通常称为行和列;
Python中定义一个矩阵:(矩阵在python中表示成二维数组)
import numpy as np
#矩阵
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
Python中定义一个三维矩阵,3阶的张量(三维矩阵,3阶的张量在python中表示成三维数组)
import numpy as np
#张量
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
我们以numpy.ndarrry类型的变量 t 的形状(t.shape)来说明:
- (1,):标量,0阶张量,1维向量,只有1个数值;
- (3,):矢量,1阶张量,3维向量,有3个数值;
- (5,):矢量,1阶张量,5维向量,有5个数值;
- (2, 3):矩阵,2阶张量,有6个数值,t[0]为3维向量;
- (3, 1):矩阵,2阶张量,有3个值,t[0]为1维向量;
- (3, 4, 5):3阶张量,有60个数值,t[0,0]为5维向量,t[0]为矩阵;
5、标量向量矩阵张量之间的联系:
标量是
0维空间中的一个点
,向量是一维空间中的一条线
,矩阵是二维空间的一个面
,三阶张量是三维空间中的一个体
。也就是说,向量是由标量组成的,矩阵是向量组成的,张量是矩阵组成的