张量Tensor基本介绍
张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在维空间内,有
个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。
称为该张量的秩或阶(与矩阵的秩和阶均无关系)。
张量是一种特殊的数据结构,与数组和矩阵非常相似。与大多AI框架一样,张量(Tensor)是MindSpore网络运算中的基本数据结构,MindSpore中各种API的实现基本离不开张量。了解并熟悉使用张量是学好MindSpore的必经之路。
张量Tensor的基本操作
MindSpore的张量基本操作与其他AI框架大同小异,如果有使用其他AI框架的经验,比如Pytorch,上手MindSpore就很快,反过来也一样。
1. 创建张量
MindSpore支持从Python部分数据类型,比如list、tuple,和numpy.ndarray创建,而Tensor和numpy.ndarray之间可以互相转换,不过二者有些不同,具体可自行到官方文档查看;或者直接输入数据进行创建,其数据类型可由框架自行推导;又或者从另一个Tensor进行复制。
2. 张量的属性
张量的属性包括形状、数据类型、转置张量、单个元素大小、占用字节数量、维数、元素个数和每一维步长。
3. 索引方式
张量的索引方式与numpy.array几乎一样,从0开始,负索引表示倒序/
4. 张量运算
张量之间有很多运算,包括算术、线性代数、矩阵处理(转置、标引、切片)、采样等,张量运算和NumPy的使用方式类似。但是在深度学习模型中,处理加减乘除等基本算术外,最常用的便是concat、stack、
5. 稀疏张量
与我之前所使用过的一些AI框架不同,MindSpore对稀疏张量有额外的原生支持,使得MindSpore在某些应用场景,比如推荐系统、分子动力学、图神经网络等涉及较多的稀疏张量的场景下编程更方便,性能更好些。MindSpore支持两种稀疏张量的格式CSRTensor,COOTensor,CSR和COO都是压缩稀疏张量的方法,在大学的数据结构课程上可能会教过,如果不会就搜索引擎走起咯~
本人是第一次见到AI框架支持两种稀疏张量格式,了解也不多,如果有兴趣深入了解MindSpore中的这两种稀疏张量格式,请参考mindspore.CSRTensor和mindspore.COOTensor。
jupyter在线运行情况
与昨日一样,采用jupyter在线运行学习MindSpore中的张量,可以很快速的了解和上手。其运行情况如下: