引言
用数学量来表示物理量,可是标量加上向量,都不足以表达所有的物理量,几何代数中定义的张量是基于向量和矩阵的推广,所以就需要扩大数学量的概念,张量就出现了。
这里我将配合python的numpy库,帮助理解张量
预先环境
1. numpy
2. 线性代数
神经网络的数据表示——张量
在Numpy中,数据存储在多维的数组中,也叫张量(tensor)。一般来说,现在机器学习系统都是使用张量作为基本的数据结构。张量对AI领域特别重要,重要到Google的TensorFlow都使用他来命名
张量是一个数据容器,类型基本都是数值,因此也可以认为是一个数字容器。例如咱们所知的线性代数中的矩阵,就是二维张量。
张量是矩阵向任意维度的推广。其中,张量的维度通常也叫轴(axis)
1.标量
仅包含一个数字的张量叫标量,也叫标量张量、零维张量、0D 张量。在Numpy中,一个float32,、float64的数字就是一个标量张量
>>>import numpy as np
>>>x = np.array(1)
>>>x.ndim
0
2.向量
数字组成的数组叫做向量(vector)或一维张量(1D张量)。一维张量只有一个轴。
>>>import numpy as np
>>>x = np.array([1,2,3])
>>>x.ndim
1
3.矩阵
向量组成的数组叫做矩阵(matrix)或二维张量(2D张量)。二维张量有2个轴,也叫行和列
>>>import numpy as np
>>>x = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
>>>x.ndim
2
4.3D张量与更高维张量
多个矩阵组合成一个新的数组就可以得到一个3D矩阵,可以直观理解为一个数字组成的立体
>>>import numpy as np
>>>x = np.array([[[1],[2],[3]],
[[4],[5],[6]],
[[7],[8],[9]]])
>>>x.ndim
3
将3D张量组合成一个数组,就可以创建一个4D张量,以此类推。通常深度学习处理的一般是0D到4D的张量,处理视频数据可能遇到5D张量
张量的性质
张量是由以下三个关键属性来定义的:
- 轴的个数(阶)。3D张量有3个轴,矩阵有2个轴,向量一个轴。在numpy中为ndim
- 形状。这是一个整数元组,表示张量沿每个轴的维度大小。例如前面的矩阵python例子形状为(3,3),特别的,向量的形状为(3,),标量的形状为()
- 数据类型,由于张量存储在预先分配好的连续内存段,所以在大部分科学计算库,张量的计算通常是float32 float64 uint8,基本没有字符张量