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

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

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


一、Tensor是什么

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

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

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

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

二、构造张量

对于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)


目录
相关文章
|
4天前
|
机器学习/深度学习 存储 人工智能
MNN:阿里开源的轻量级深度学习推理框架,支持在移动端等多种终端上运行,兼容主流的模型格式
MNN 是阿里巴巴开源的轻量级深度学习推理框架,支持多种设备和主流模型格式,具备高性能和易用性,适用于移动端、服务器和嵌入式设备。
42 18
MNN:阿里开源的轻量级深度学习推理框架,支持在移动端等多种终端上运行,兼容主流的模型格式
|
2月前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
53 7
|
2月前
|
机器学习/深度学习 自然语言处理 并行计算
DeepSpeed分布式训练框架深度学习指南
【11月更文挑战第6天】随着深度学习模型规模的日益增大,训练这些模型所需的计算资源和时间成本也随之增加。传统的单机训练方式已难以应对大规模模型的训练需求。
197 3
|
5月前
|
机器学习/深度学习 算法 TensorFlow
深入探索强化学习与深度学习的融合:使用TensorFlow框架实现深度Q网络算法及高效调试技巧
【8月更文挑战第31天】强化学习是机器学习的重要分支,尤其在深度学习的推动下,能够解决更为复杂的问题。深度Q网络(DQN)结合了深度学习与强化学习的优势,通过神经网络逼近动作价值函数,在多种任务中表现出色。本文探讨了使用TensorFlow实现DQN算法的方法及其调试技巧。DQN通过神经网络学习不同状态下采取动作的预期回报Q(s,a),处理高维状态空间。
78 1
|
5月前
|
机器学习/深度学习 算法 PyTorch
【深度学习】TensorFlow面试题:什么是TensorFlow?你对张量了解多少?TensorFlow有什么优势?TensorFlow比PyTorch有什么不同?该如何选择?
关于TensorFlow面试题的总结,涵盖了TensorFlow的基本概念、张量的理解、TensorFlow的优势、数据加载方式、算法通用步骤、过拟合解决方法,以及TensorFlow与PyTorch的区别和选择建议。
295 2
|
5月前
|
测试技术 数据库
探索JSF单元测试秘籍!如何让您的应用更稳固、更高效?揭秘成功背后的测试之道!
【8月更文挑战第31天】在 JavaServer Faces(JSF)应用开发中,确保代码质量和可维护性至关重要。本文详细介绍了如何通过单元测试实现这一目标。首先,阐述了单元测试的重要性及其对应用稳定性的影响;其次,提出了提高 JSF 应用可测试性的设计建议,如避免直接访问外部资源和使用依赖注入;最后,通过一个具体的 `UserBean` 示例,展示了如何利用 JUnit 和 Mockito 框架编写有效的单元测试。通过这些方法,不仅能够确保代码质量,还能提高开发效率和降低维护成本。
62 0
|
5月前
|
UED 开发者
哇塞!Uno Platform 数据绑定超全技巧大揭秘!从基础绑定到高级转换,优化性能让你的开发如虎添翼
【8月更文挑战第31天】在开发过程中,数据绑定是连接数据模型与用户界面的关键环节,可实现数据自动更新。Uno Platform 提供了简洁高效的数据绑定方式,使属性变化时 UI 自动同步更新。通过示例展示了基本绑定方法及使用 `Converter` 转换数据的高级技巧,如将年龄转换为格式化字符串。此外,还可利用 `BindingMode.OneTime` 提升性能。掌握这些技巧能显著提高开发效率并优化用户体验。
71 0
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
深度学习框架之争:全面解析TensorFlow与PyTorch在功能、易用性和适用场景上的比较,帮助你选择最适合项目的框架
【8月更文挑战第31天】在深度学习领域,选择合适的框架至关重要。本文通过开发图像识别系统的案例,对比了TensorFlow和PyTorch两大主流框架。TensorFlow由Google开发,功能强大,支持多种设备,适合大型项目和工业部署;PyTorch则由Facebook推出,强调灵活性和速度,尤其适用于研究和快速原型开发。通过具体示例代码展示各自特点,并分析其适用场景,帮助读者根据项目需求和个人偏好做出明智选择。
118 0
|
5月前
|
机器学习/深度学习 Serverless 数据处理
《零基础实践深度学习》 Numpy 线性代数 应用举例 张量表示
这篇文章介绍了NumPy在线性代数中的应用,包括矩阵操作和文件读写功能,并提供了使用NumPy进行图片处理和激活函数计算的示例,同时探讨了飞桨框架中张量(Tensor)的使用和与NumPy数组的转换。
|
6月前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。