首页 > 其他分享 >【MindSpore学习打卡】初学教程-03张量Tensor-理解MindSpore中的张量(Tensor)操作

【MindSpore学习打卡】初学教程-03张量Tensor-理解MindSpore中的张量(Tensor)操作

时间:2024-06-21 20:58:59浏览次数:20  
标签:Tensor 张量 np mindspore print output MindSpore

03张量Tensor-理解MindSpore中的张量(Tensor)操作

在深度学习领域,张量(Tensor)是最基本的数据结构之一。它不仅可以表示标量、向量和矩阵,还可以表示更高维度的数据。张量在神经网络的构建和训练中扮演着至关重要的角色。在MindSpore中,张量是网络运算的基本单位。本篇博客将详细介绍如何在MindSpore中创建和操作张量,并探讨稀疏张量的使用。通过本文,你将深入了解张量的各种操作方法和应用场景,从而更好地掌握MindSpore的使用。

什么是张量?

张量是一种多维数组,可以表示标量、向量、矩阵以及更高维度的数据结构。张量的秩(rank)表示其维度的数量。例如,标量是0阶张量,向量是1阶张量,矩阵是2阶张量。张量(Tensor)是深度学习中最基本的数据结构之一,它可以表示标量、向量、矩阵甚至更高维度的数据。在MindSpore中,张量是网络运算的基本单位。

创建张量

在MindSpore中,可以通过多种方式创建张量:
展示了如何从不同的数据源创建张量。比如,直接从数据列表或NumPy数组创建张量。这些方法非常实用,因为在实际应用中,我们的数据可能来自不同的源,能够灵活地创建张量将使数据处理更加方便。

根据数据直接生成

可以直接根据数据创建张量,数据类型可以设置或者通过框架自动推断。

import numpy as np
import mindspore
from mindspore import Tensor

data = [1, 0, 1, 0]
x_data = Tensor(data)
print(x_data, x_data.shape, x_data.dtype)

从NumPy数组生成

可以从NumPy数组创建张量。

np_array = np.array(data)
x_np = Tensor(np_array)
print(x_np, x_np.shape, x_np.dtype)

使用初始化器构造张量

使用init初始化器对张量进行初始化。

from mindspore.common.initializer import One, Normal

tensor1 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=One())
tensor2 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=Normal())

print("tensor1:\n", tensor1)
print("tensor2:\n", tensor2)

继承另一个张量的属性

可以通过继承已有张量的属性创建新的张量。

from mindspore import ops

x_ones = ops.ones_like(x_data)
print(f"Ones Tensor: \n {x_ones} \n")

x_zeros = ops.zeros_like(x_data)
print(f"Zeros Tensor: \n {x_zeros} \n")

张量的属性

张量的属性包括形状、数据类型、转置张量、单个元素大小、占用字节数量、维数、元素个数和每一维步长。

x = Tensor(np.array([[1, 2], [3, 4]]), mindspore.int32)

print("x_shape:", x.shape)
print("x_dtype:", x.dtype)
print("x_itemsize:", x.itemsize)
print("x_nbytes:", x.nbytes)
print("x_ndim:", x.ndim)
print("x_size:", x.size)
print("x_strides:", x.strides)

张量索引

Tensor索引与NumPy索引类似,索引从0开始编制,负索引表示按倒序编制,冒号:...用于对数据进行切片。

tensor = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))

print("First row: {}".format(tensor[0]))
print("value of bottom right corner: {}".format(tensor[1, 1]))
print("Last column: {}".format(tensor[:, -1]))
print("First column: {}".format(tensor[..., 0]))

张量运算

张量之间有很多运算,包括算术、线性代数、矩阵处理(转置、标引、切片)、采样等。张量运算和NumPy的使用方式类似。

普通算术运算

x = Tensor(np.array([1, 2, 3]), mindspore.float32)
y = Tensor(np.array([4, 5, 6]), mindspore.float32)

output_add = x + y
output_sub = x - y
output_mul = x * y
output_div = y / x
output_mod = y % x
output_floordiv = y // x

print("add:", output_add)
print("sub:", output_sub)
print("mul:", output_mul)
print("div:", output_div)
print("mod:", output_mod)
print("floordiv:", output_floordiv)

张量连接与堆叠

concat将给定维度上的一系列张量连接起来。

data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))
data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))
output = ops.concat((data1, data2), axis=0)

print(output)
print("shape:\n", output.shape)

stack则是从另一个维度上将两个张量合并起来。

output = ops.stack([data1, data2])

print(output)
print("shape:\n", output.shape)

Tensor与NumPy转换

Tensor转换为NumPy

使用 Tensor.asnumpy() 将Tensor变量转换为NumPy变量。

t = Tensor([1., 1., 1., 1., 1.])
print(f"t: {t}", type(t))
n = t.asnumpy()
print(f"n: {n}", type(n))

NumPy转换为Tensor

使用Tensor()将NumPy变量转换为Tensor变量。

n = np.ones(5)
t = Tensor.from_numpy(n)
np.add(n, 1, out=n)
print(f"n: {n}", type(n))
print(f"t: {t}", type(t))

稀疏张量

稀疏张量是一种特殊张量,其中绝大部分元素的值为零。MindSpore支持CSRCOO两种稀疏数据格式。

CSRTensor

CSR(Compressed Sparse Row)稀疏张量格式有着高效的存储与计算的优势。

from mindspore import CSRTensor

indptr = Tensor([0, 1, 2])
indices = Tensor([0, 1])
values = Tensor([1, 2], dtype=mindspore.float32)
shape = (2, 4)

csr_tensor = CSRTensor(indptr, indices, values, shape)

print(csr_tensor.astype(mindspore.float64).dtype)

生成的CSRTensor如下所示:
[ 1 0 0 0 0 2 0 0 ] \left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 2 & 0 & 0 \end{matrix} \right] [10​02​00​00​]

COOTensor

COO(Coordinate Format)稀疏张量格式用来表示某一张量在给定索引上非零元素的集合。

from mindspore import COOTensor

indices = Tensor([[0, 1], [1, 2]], dtype=mindspore.int32)
values = Tensor([1, 2], dtype=mindspore.float32)
shape = (3, 4)

coo_tensor = COOTensor(indices, values, shape)

print(coo_tensor.values)
print(coo_tensor.indices)
print(coo_tensor.shape)
print(coo_tensor.astype(mindspore.float64).dtype)

生成的COOTensor如下所示:
[ 0 1 0 0 0 0 2 0 0 0 0 0 ] \left[ \begin{matrix} 0 & 1 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 0 \end{matrix} \right] ​000​100​020​000​
在这里插入图片描述
通过本篇博客的介绍,相信大家对MindSpore中的张量操作有了更加深入的理解。在实际应用中,掌握这些基本操作将极大地帮助我们构建和优化深度学习模型。无论是创建张量、进行张量运算,还是处理稀疏张量,这些技能都是必不可少的。希望这篇博客对你有所帮助,助你在深度学习的道路上走得更远。

标签:Tensor,张量,np,mindspore,print,output,MindSpore
From: https://blog.csdn.net/weixin_43427267/article/details/139834959

相关文章

  • 深度学习--tensorflow中操作张量的高频率api--87
    目录1.创建张量2.shape操作3.数学运算4逻辑运算5.张量之间的操作6.数据类型的转换7.聚合(规约)操作8argmax1.创建张量tf.constant(value,dtype=None,shape=None,name='Const')tf.zeros(shape,dtype=tf.float32,name=None)tf.ones(shape,dtype=tf.float32,name......
  • 【TensorFlow深度学习】开源社区支持与GitHub上贡献代码的流程
    开源社区支持与GitHub上贡献代码的流程开源社区支持与GitHub上贡献代码的流程:携手共创软件未来1.开源社区支持的意义2.如何在GitHub上找到合适的项目3.贡献代码的流程3.1.Fork与Clone3.2.创建分支3.3.修改代码3.4.提交与推送3.5.创建PullRequest......
  • 【TensorFlow深度学习】量化压缩技术在降低模型体积中的应用
    量化压缩技术在降低模型体积中的应用量化压缩技术在降低模型体积中的应用1.引言2.量化压缩基础3.实战:使用TensorFlowLite进行模型量化4.评估量化效果5.结果分析与优化建议6.结语量化压缩技术在降低模型体积中的应用在深度学习领域,模型的......
  • 使用 TensorRT C++ API 调用GPU加速部署 YOLOv10 实现 500FPS 推理速度——快到飞起!!
    ​NVIDIA®TensorRT™是一款用于高性能深度学习推理的SDK,包含深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法,通过消除NMS、优化模型架构和引入创新模块等策略,在保持高精度的同时显著降低了......
  • 昇思25天学习打卡营第2天|张量、数据集和数据变换
    张量Tensor张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在......
  • TensorFlow Object Detect API 实战与踩坑经验分享
    Apple-Banan-OrangeDetection全部代码已上传到本人github项目,欢迎来玩呀━(`∀´)ノ亻!简介本项目起源于本人《人工智能原理》一课的大作业,要求识别苹果、香蕉、橙子三种水果,并用IOU、Precision、Recall、mAP四个指标进行评估(谁拿前3个作为最终指标啊)。一通搜索下来......
  • PyTorch与TensorFlow模型互转指南
    在深度学习的领域中,PyTorch和TensorFlow是两大广泛使用的框架。每个框架都有其独特的优势和特性,因此在不同的项目中选择使用哪一个框架可能会有所不同。然而,有时我们可能需要在这两个框架之间进行模型的转换,以便于在不同的环境中部署或利用两者的优势。本文将详细介绍如何......
  • R语言动态广义相加模型GAM张量积交互项、傅立叶项、谐波回归分析季节性时间序列航空乘
    全文链接:https://tecdat.cn/?p=36497原文出处:拓端数据部落公众号季节性在真实的时间序列中是非常常见的。许多系列以周期性、规律性的方式变化。例如,冰淇淋销售在温暖的假期月份往往更高,而候鸟数量围绕年度迁徙周期强烈波动。由于季节性非常普遍,已经开发了许多时间序列和预测方......
  • 快速解决:使用Mindspore框架时报错!!libgomp-6e1a1d1b.so.1.0.0: cannot allocate memory
    前言:最近在用ms跑大模型,需要做好多步骤,遇到报错跟大家一起分析一下吧刚开始转换权重就遇到了下述报错:ImportError:/root/anaconda3/envs/MS/lib/python3.9/site-packages/torch/lib/../../torch.libs/libgomp-6e1a1d1b.so.1.0.0:cannotallocatememoryinstaticTLSblo......
  • GPU版PyTorch安装、GPU版TensorFlow安装(详细教程)
    目录一、介绍PyTorch、TensorFlow 1. PyTorch2.TensorFlow二、GPU版PyTorch安装1.确定CUDA版本2.确定python版本3.安装PyTorch3.1使用官网命令安装(速度慢)3.2本地安装(速度快)4.检验是否安装成功三、GPU版TensorFlow安装1.确定CUDA版本2.确定TensorFlow版本3.安......