昇思25天学习打卡营第二天|张量

news2024/10/9 14:41:04

张量 Tensor

张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 𝑛𝑛 维空间内,有  𝑛𝑟𝑛𝑟 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。𝑟𝑟 称为该张量的秩或阶(与矩阵的秩和阶均无关系)。

张量是一种特殊的数据结构,与数组和矩阵非常相似。张量(Tensor)是MindSpore网络运算中的基本数据结构。

import numpy as np
import mindspore
from mindspore import ops
from mindspore import Tensor, CSRTensor, COOTensor

创建张量

张量的创建方式有多种,构造张量时,支持传入Tensorfloatintbooltuplelistnumpy.ndarray类型。

  • 根据数据直接生成

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

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初始化器构造张量

    当使用init初始化器对张量进行初始化时,支持传入的参数有initshapedtype

    • init: 支持传入initializer的子类。如:下方示例中的 One() 和 Normal()。

    • shape: 支持传入 listtuple、 int

    • dtype: 支持传入mindspore.dtype。

from mindspore.common.initializer import One, Normal

# Initialize a tensor with ones
tensor1 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=One())
# Initialize a tensor from normal distribution
tensor2 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=Normal())

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

#
tensor1:
 [[1. 1.]
 [1. 1.]]
tensor2:
 [[ 0.00333083  0.01302023]
 [-0.0137493   0.02081333]]

 init主要用于并行模式下的延后初始化,在正常情况下不建议使用init对参数进行初始化。

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")

#
Ones Tensor: 
 [1 1 1 1] 

Zeros Tensor: 
 [0 0 0 0] 

张量的属性

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

  • 形状(shape):Tensor的shape,是一个tuple。

  • 数据类型(dtype):Tensor的dtype,是MindSpore的一个数据类型。

  • 单个元素大小(itemsize): Tensor中每一个元素占用字节数,是一个整数。

  • 占用字节数量(nbytes): Tensor占用的总字节数,是一个整数。

  • 维数(ndim): Tensor的秩,也就是len(tensor.shape),是一个整数。

  • 元素个数(size): Tensor中所有元素的个数,是一个整数。

  • 每一维步长(strides): Tensor每一维所需要的字节数,是一个tuple。

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)

#
[[0. 1.]
 [2. 3.]
 [4. 5.]
 [6. 7.]]
shape:
 (4, 2)

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

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

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

#
[[[0. 1.]
  [2. 3.]]

 [[4. 5.]
  [6. 7.]]]
shape:
 (2, 2, 2)

Tensor与NumPy转换

Tensor可以和NumPy进行互相转换。

Tensor转换为NumPy

与张量创建相同,使用 Tensor.asnumpy() 将Tensor变量转换为NumPy变量。

NumPy转换为Tensor

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

CSRTensor

CSR(Compressed Sparse Row)稀疏张量格式有着高效的存储与计算的优势。其中,非零元素的值存储在values中,非零元素的位置存储在indptr(行)和indices(列)中。各参数含义如下:

  • indptr: 一维整数张量, 表示稀疏数据每一行的非零元素在values中的起始位置和终止位置, 索引数据类型支持int16、int32、int64。

  • indices: 一维整数张量,表示稀疏张量非零元素在列中的位置, 与values长度相等,索引数据类型支持int16、int32、int64。

  • values: 一维张量,表示CSRTensor相对应的非零元素的值,与indices长度相等。

  • shape: 表示被压缩的稀疏张量的形状,数据类型为Tuple,目前仅支持二维CSRTensor

CSRTensor的详细文档,请参考mindspore.CSRTensor。

MindSpore与PyTorch的张量操作在设计和使用体验上有一些显著的区别:

  • MindSpore提供了丰富的数据类型,包括标准的Tensor,以及针对稀疏数据优化的CSRTensor和COOTensor。这些数据类型使得MindSpore在处理稀疏数据时更加高效。
  • PyTorch主要使用标准的Tensor数据结构,对于稀疏数据的处理可能需要借助额外的库或手动实现。
  • 在数据类型转换方面,MindSpore和PyTorch都提供了方便的方法。例如,在MindSpore中,可以通过astype方法轻松转换Tensor的数据类型。
  • 张量操作
    • MindSpore的张量操作设计得更为简洁和直观。例如,MindSpore的ops模块提供了大量的张量操作函数,这些函数通常具有明确的语义和简洁的接口。
    • PyTorch的张量操作也非常强大,但有时可能需要更复杂的调用方式或额外的步骤来实现相同的功能。

MindSpore和PyTorch都与NumPy具有良好的兼容性。两者都可以轻松地将NumPy数组转换为各自的张量格式,并提供了与NumPy相似的操作接口。

然而,MindSpore在处理大规模数据时可能会显示出更高的效率,特别是当利用其稀疏张量结构时。

  • MindSpore通过引入CSRTensor和COOTensor等专门的数据结构来优化稀疏数据的处理。这些结构能够更有效地存储和操作稀疏数据,从而降低内存消耗并提高计算效率。
  • 在PyTorch中,处理稀疏数据可能需要更多的手动工作,例如使用稀疏矩阵库或自定义操作。

体验总结

MindSpore在处理稀疏数据和大规模计算时表现出色,其简洁直观的API设计和高效的数据结构使得开发工作变得相对容易。

PyTorch则以其灵活的动态计算图和广泛的社区支持而闻名,但在处理稀疏数据方面可能需要额外的努力。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1863196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北尔Beijer软件iXDeveloper2触摸屏和使用说明手侧

北尔Beijer软件iXDeveloper2触摸屏和使用说明手侧

Python笔记 文件的写,追加,备份操作

一、文件的写操作 案例演示: # 1.打开文件 f open(python.txt,w)# 2.文件写入 f.write(hello world)# 3.内容刷新 f.flush() 注意: 直接调用write,内容并为真正的写入文件,二十会积攒在程序的内存中,称之为缓冲区…

SpringBoot控制反转和依赖注入

目录 一、内聚和耦合 二、分层解耦 三、具体实现 四、bean的组件扫描 五、bean注入 一、内聚和耦合 在了解分层解耦的概念之前我们我们要去先了解一下内聚和耦合。内聚:通常将的是软件中各个模块之间的功能联系。耦合衡量软件各个模块之间的依赖、关联的程度。一…

Lua网站开发之文件表单上传

这个代码示例演示如何上传文件或图片,获取上传信息及保存文件到本地。 local fw require("fastweb") local request require("fastweb.request") local response require("fastweb.response") local cjson require("cjson&q…

30-33、SpringBoot项目部署\属性配置方式\多环境开发(一个文件)\多环境分组(多个文件)

1、打包插件:和springboot的版本保持一致 根pom <build><plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.1.3</versi…

期末复习题中的问题

一、编程中&#xff08;包括函数&#xff09;的问题 1. malloc 头文件是stdlib.h 二、第二次写复习题的不会的 三、程序填空 总结&#xff1a; 删除节点m >>>>要有一个指针来遍历找到这个m >>>> 用另一个指针指向这个指针的下一 个 >>&…

【机器参数】安装适合的nvidia驱动

背景&#xff1a;我现在nvidia-smi没有显示&#xff0c;我的目标是让nvidia-smi正常显示 参考&#xff1a; nchttps://www.cnblogs.com/carle-09/p/11504544.html 可能是驱动版本不对&#xff0c;所以我重新去nvidia官网下载了驱动。 Official Drivers | NVIDIA 得到了NVID…

线性代数、矩阵计算

一、线性代数 1、对于向量&#xff0c;若a是标量&#xff0c;为a的绝对值乘以b的向量长度。 2、点乘 3、范数&#xff1a;向量或者矩阵的长度 L1范数&#xff1a;&#xff08;对向量&#xff09;每个元素的绝对值求和 L2范数&#xff1a;&#xff08;对向量&#xff09;torch.…

Cortex-M Fault

Cortex-M CPU 会在系统发生故障时引发异常。非法内存写入和读取、访问未通电的外设、执行无效指令、除以零以及其他问题都可能导致此类异常。通常在所有情况下都会引发 HardFault 异常。对于某些故障&#xff0c;可以启用不同的异常来专门处理这些情况。 Cortex-M 故障异常 …

Unity数据持久化3——Json

概述 基础知识 Json文件格式 Json基本语法 练习 可以搜索&#xff1a;Json在线&#xff0c;复制代码进去解析是否写错了。 Excel转Json C#读取存储Json文件 JsonUtility using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine;[Sy…

PCM、WAV,立体声,单声道,正弦波等音频素材

1&#xff09;PCM、WAV音频素材&#xff0c;分享给将要学习或者正在学习audio开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 常用的Audio PCM WAV不同采样率&#xff0c;不同采样深度&#…

Mac安装多版本node

Mac下使用n模块去安装多个指定版本的Node.js&#xff0c;并使用命令随时切换。 node中的n模块是&#xff0c;node专门用来管理node版本的模块&#xff0c;可以进行node版本的切换&#xff0c;下载&#xff0c;安装。 1.安装n npm install -g n 2.查看版本 n --version 3.展…

sql:between and日期毫秒精度过多导致的查询bug

复现 一般情况下&#xff0c;前端传的日期值大多都是yyyy-MM-dd HH:mm:ss(标准格式)&#xff0c;比如2024-06-25 10:49:50&#xff0c;但是在测试环境&#xff0c;测试人员测出了一个带毫秒的日期&#xff1a;比如2024-06-25 10:49:50.9999999 这种情况下会出现查询bug SELEC…

《昇思25天学习打卡营第2天 | 张量 Tensor》

《昇思25天学习打卡营第2天 | 张量 Tensor》 《昇思25天学习打卡营第2天 | 张量 Tensor》 《昇思25天学习打卡营第2天 | 张量 Tensor》什么是张量&#xff08;Tensor&#xff09;张量的创建方式根据数据直接生成从NumPy数组生成使用init初始化器构造张量继承另一个张量的属性&a…

OVS:standalone模式下测试添加tag之后的vlan隔离

目录 1.新建一个ovs交换机 2.创建两个端口&#xff0c;分别配置tag2000和tag2001 3.为网桥德默认internal端口配置IP地址 4.创建两个ns 5.对两个ns进行手动的网络配置 6.再端口处于不通tag时检测两个ns之间的连通性结果为不通-ping--fail 7.将两个端口p1,p2 的tag设成一致…

office宏绕过杀软诱导点击实现主机控制

绕过防病毒扫描已经成为 BHIS&#xff08;Black Hills Information Security&#xff09;的一项运动。当我们为客户进行指挥控制&#xff08;C2&#xff09;测试时&#xff0c;我们从内部网络上的主机开始&#xff0c;创建一个反向连接到我们的C2服务器。然后&#xff0c;我们继…

Mysql中varchar类型数字排序不对踩坑记录

场景 在进行表设计时将版本号字段设计了为varchar类型&#xff0c;尽量从表设计阶段将数字类型列设计为int型。 再进行排序时如果版本号累计到了10及以上&#xff0c;那么再进行排序时则会出现问题。 比如下面执行排序时发现10被排在了第一位。 这是因为 varchar类型对数字…

Lua流媒体服务器支持(MP4视频、桌面直播、摄像头)

本来在做FFMPEG的项目&#xff0c;忽然想到Lua封装FFMPEG与SRS实现一个简易的直播网站何尝不是一个大胆的想法。 示例为初级版本&#xff0c;主要是用来验证可行性和功能性DEMO 演示效果&#xff1a; Lua流媒体直播服务器(支持MP4、桌面直播、摄像头)_哔哩哔哩_bilibili 代码简…

①分析胃癌组蛋白脱乙酰酶HDS模型-配对转录组差异

目录 HDS评分构建 ①数据加载 ②评分计算 做样本及评分展示图 ①数据处理 ②进行作图 分析配对的单细胞及转录组胃癌数据的 HDS评分,数据源于gastric-cancer - GitCode①胃癌单细胞和配对转录组揭示胃肿瘤微环境(文献和数据)_代码笔记:处理迄今为止最大的单细胞胃癌数…

【漏洞复现】通天星CMSV6——sql注入漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 通天星CMSV6小于7.33.0.7版本存在接口pointManage存在注入漏洞&…