100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【MindSpore深度学习框架】MindSpore中的张量Tensor

【MindSpore深度学习框架】MindSpore中的张量Tensor

时间:2022-08-05 05:37:58

相关推荐

【MindSpore深度学习框架】MindSpore中的张量Tensor

文章目录

一、Tensor是什么二、构造张量三、Tensor的运算、属性、方法1.运算2.属性3.方法

欢迎回到MindSpore神经网络编程系列。在这篇文章中,我们将通过MindSpore的Tensor,讲解一些比较实用的API。废话不多说,我们开始吧。

一、Tensor是什么

Tensor是MindSpore中的一种存储数据的类型,像Pytorch中都存在这种数据类型,它的意思是张量意为多维矩阵,对于不同的维度张量给出解释:

0维张量:就是单纯一个数字,就是标量,例如11维张量:是一组向量,例如 [1,2,3,4,5][1,2,3,4,5][1,2,3,4,5]2维张量:就是我们经常使用的矩阵,用于表示数据的特征3维张量:一般的图像就是三维张量,每个维度分别代表高、宽、色彩通道,即RGB4维张量:一般视频较为常用,在图片的基础上添加一个时间轴,多了一个时间的维度

我们常见的张量就是这些。

至于为什么叫张量,它的起源是物理方面,众所周知,物理量在不同坐标系下的分量是不同的,而张量给出了物理量各分量在坐标变换时的变换规律。这意味着无论坐标系怎么改变,我们都能正确地描述该物理量,这就是引入张量的必要性。(据《物理学中的张量分析》,刘连寿)

二、构造张量

对于MindSpore中的张量,我们可以传入多种数据类型进行初始化,比如int、float、list、tuple、numpy数据类型等,同时在初始化的过程中,我们可以指定张量的数据类型,例如 mindspore.float64等,如果我们初始没有进行指出,则会默认与传入的数据类型相同转换成mindspore中与之对应的数据类型。

代码样例如下:

x=Tensor(np.array([1,2,3]),ms.float64)>>>Tensor(shape=[3], dtype=Float64, value= [1.00000000e+000, 2.00000000e+000, 3.00000000e+000])Tensor([1,2,3])>>>Tensor(shape=[3], dtype=Int32, value= [1, 2, 3])

在mindspore中,一般整数默认为Int32,浮点数默认为Float64

三、Tensor的运算、属性、方法

1.运算

张量的运算与numpy的运算几乎是一样的,都是多维矩阵之间的操作,而且大多数函数也是一样的,像Tensor中的运算中主要有两类:算数运算、逻辑运算。

算数运算:加、减法、乘、除、取模、取幂、取整等逻辑运算:等于、大于、小于等

代码样例如下:

a=Tensor(np.array([1,2,3]))b=Tensor(np.array([2,2,4]))print(a+b)print(a*b)print(a//b)>>>[3 4 7]>>>[ 2 4 12]>>>[0 1 0]print(a==b)print(a!=b)print(a>b)>>>[False True False]>>>[ True False True]>>>[False False False]

2.属性

对于Tensor存在很多个属性,比如shape、dtype、T、size、ndim、strides、itemsize、nbytes等

shape:返回张量的形状dtype:返回张量的数据类型T:返回张量的转置size:返回张量中的元素个数ndim:返回张量的形状的维度,也就是这个张量有多少个维度,返回多少,例如RGB图像则返回3,因为图像有3个维度strides:步长,即每个维度的字节数itemsize:张量中单个元素的字节数nbytes:返回整个张量的所有字节数

代码样例如下:

x=Tensor(np.array([[1,2,3],[4,5,6]]))print('shape:',x.shape)print('dtype:',x.dtype)print('T:',x.T)print('itemsize:',x.itemsize)print('nbytes:',x.nbytes)print('ndim:',x.ndim)print('strides:',x.strides)>>>shape: (2, 3)>>>dtype: Int32>>>T: [[1 4][2 5][3 6]]>>>itemsize: 4>>>nbytes: 24>>>ndim: 2>>>strides: (12, 4)

3.方法

对于张量的方法其实有很多,我们下面只将一些较为常用的方法

算数函数:abs、std、mean、var等

这里需要注意,我们使用这些运算函数时,要将tensor的数据类型转化为浮点类型,如果为整型,现版本会报错

x=Tensor(np.array([[1,2,3],[4,5,6]])).astype(ms.float64)print(x.abs())print(x.mean())print(x.std())>>>[[1. 2. 3.][4. 5. 6.]]>>>3.5>>>1.7078251838684082

argmax:指定维度,返回指定维度的最大值所在的索引,选取最小值同理,使用argmin

x=Tensor(np.arange(0,6).reshape(2,3))print(x)print(x.argmax())print(x.argmax(axis=0)) # 每列的最大值索引print(x.argmax(axis=1)) # 每行的最大值索引>>>[[0 1 2][3 4 5]]>>>5>>>[1 1 1]>>>[2 2]

asnumpy:将我们的张量数据转换为numpy数据类型

x=Tensor(np.array([1,2,3])).asnumpy()print(x)>>>[1 2 3]

copy:返回张量的副本

x=Tensor(np.array([1,2,3]))print(x.copy())>>>[1 2 3]

cumsum:按照指定维度进行累积求和,尤其对于时间这类数据较为有用

x=Tensor(np.ones((3,3)))print(x)print(x.cumsum())print(x.cumsum(axis=0))print(x.cumsum(axis=1))>>>[[1. 1. 1.][1. 1. 1.][1. 1. 1.]]>>>[1. 2. 3. 4. 5. 6. 7. 8. 9.]>>>[[1. 1. 1.][2. 2. 2.][3. 3. 3.]]>>>[[1. 2. 3.][1. 2. 3.][1. 2. 3.]]

diagonal:返回张量的主对角线数据

x=Tensor(np.array([[0,1],[2,3]]))print(x.diagonal())>>>[0 3]

fill:将张量按照给定值进行填充

x=Tensor(np.array([[0,1],[2,3]]))print(x.fill(999))>>>[[999 999][999 999]]

flatten:将我们的张量展开成一个一维向量

x=Tensor(np.array([[0,1],[2,3]]))print(x.flatten())>>>[0 1 2 3]

squeeze:移除维度为1的维度

x=Tensor(np.ones((2,1,3,1,5)))print(x.squeeze().shape)print(x.squeeze(axis=3).shape)>>>(2,3,5)>>>(2,1,3,5)

swapaxes:交换张量的两个维度

x=Tensor(np.ones((2,3,5)))print(x.swapaxes(0,2).shape)>>>(5,3,2)

swapaxes:交换张量的两个维度

x=Tensor(np.ones((2,3,5)))print(x.swapaxes(0,2).shape)>>>(5,3,2)

写在最后

大家好,我是阿光,觉得文章还不错的话,记得“一键三连”哦!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。