MindSpore之张量(Tensor)分析
对于初学深度学习的人(就比如我)一定会对张量(Tensor)感到疑惑,因为自己经常见到它但就是不知道它的具体含义。在这篇文章我们就来看一下MindSpore中的Tensor,在此之前我们先来了解一下张量是什么。
从神经网络来看,神经网络中的输入、输出和变换都是用张量表示的(张量是神经网络使用的主要数据结构)。从数学具体实例来看,张量可以是一个多维数组,就像这样:
标量是0维张量
向量是一维张量(一维数组)
矩阵是二维张量 (二维数组)
n维数组是n维张量
Tensor也可以被看成一种数据结构,该结构简洁而强大,非常适合进行矩阵类的数值计算。在MindSpore中Tensor是其网络运算中的基本数据结构,通常不同维度的张量表示不同的数据,前面已经说了标量是0维张量,矩阵是二维张量,而三维张量可以表示彩色图像的RGB三通道。而处理三维张量的图片数字集(MNIST),用来训练手写数字识别的模型可以说是深度学习里面的Hello world。接下来我们就来看正文吧。
Tensor的构造
首先导入需要的相应的模块和对外接口api:
import numpy as np #导入科学计算模块numpy
from mindspore import Tensor, context #导入Tensor模块与配置环境的context模块
from mindspore import dtype as mstype #导入dtype模块,该模块包含了相应的数据转化
context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
mode为样例运行使用的模式,这里选用的是图模式,device_target为选择实际的配置硬件信息,可以选择CPU,GPU,也可以选择华为自研的Ascend AI处理器上(Ascend)
构造的基本形式是:
tensor=Tensor(data,dtype)
参数data是指传入要将它构造成张量的数据类型,可以传入Tensor,int,float,bool,Numpy.array等,dtype是指构造的张量的数据类型,初始化时可以指定dtype也可以不指定dtype,在不指定的情况下,初始值的数据类型将默认转化为mindspore.dtype中的相关类型,即初始值int,float,bool分别生成mindspore.int32,mindspore.float64,mindspore.bool_的0维Tensor,其它的初始值也有类似的转化方法,具体有关mindspore.dtype的详情可看阳斯杰同学对于dtype的解读,下面我们通过有关代码看一下具体的构造:
x = Tensor(np.array([[1, 2], [3, 4]]), mstype.int32)
y = Tensor(1.0, mstype.int32)
z = Tensor(2, mstype.int32)
m = Tensor(True, mstype.bool_)
n = Tensor((1, 2, 3), mstype.int16)
p = Tensor([4.0, 5.0, 6.0], mstype.float64)
q = Tensor(p, mstype.float64)
print(x, "\n\n", y, "\n\n", z, "\n\n", m, "\n\n", n, "\n\n", p, "\n\n", q)
运行截图如下:
可以看到在上面的构造中,我们都指定了dtype的具体类型,因为这样可以加强我们对数据类型的概念,在熟练掌握之后我们就可以使用默认的。其中张量y是将1.0(float)转化为int32(1),张量q中传入的初始值p是也是一个张量,然后再给这个张量指定数据类型为float64。
Tensor的运算
Tensor的运算包括算数运算(即加,减,乘等等)与逻辑运算(>,=,