昇思MindSpore学习笔记3--张量 Tensor

一、张量Tensor概念

矢量、标量和其他张量的计算函数,有内积、外积、线性映射以及笛卡儿积

张量坐标在 n 维空间内,有 nr 个分量

每个分量都是坐标的函数,变换时每个坐标分量都按规则作线性变换

张量是一种特殊的数据结构,类似于数组和矩阵

张量是MindSpore网络运算中的基本数据结构

二、环境准备

1. 安装minspore模块

!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.3.0rc1

2.导入minspore、Tensor等相关模块

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

三、创建张量

支持Tensor、float、int、bool、tuple、listnumpy.ndarray

1.根据数据自动生成

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

输出:

[1 0 1 0] (4,) Int64

2.从NumPy数组生成

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

输出:[

[1 0 1 0] (4,) Int64

3.init初始化器构造张量

支持参数:

init     :initializer的子类,  例如init=One()主要用于并行模式

shapelist、tuple、int,   例如shape=(2, 2)

dtype mindspore.dtype,例如dtype=mindspore.float32

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.00247062  0.00723172][-0.00915686 -0.00984331]]

4.继承张量生成新张量

from mindspore import opsx_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   :形状(tuple)

dtype   :MindSpore数据类型

itemsize:单个元素占用字节数(整数)

nbytes  :整个张量占用总字节数(整数)

ndim    :维数,张量的秩=len(tensor.shape)(整数)

size    :张量所有元素的个数(整数)

strides :张量每一维步长,每一维字节数(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)

输出:

x_shape: (2, 2)
x_dtype: Int32
x_itemsize: 4
x_nbytes: 16
x_ndim: 2
x_size: 4
x_strides: (8, 4)

五、张量索引

从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]))

输出:

First row: [0. 1.]
value of bottom right corner: 3.0
Last column: [1. 3.]
First column: [0. 2.]

六、张量运算

包括算术、线性代数、矩阵处理(转置、标引、切片)、采样等

1.算术运算:

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 // xprint("add:", output_add)
print("sub:", output_sub)
print("mul:", output_mul)
print("div:", output_div)
print("mod:", output_mod)
print("floordiv:", output_floordiv)

输出:

add: [5. 7. 9.]
sub: [-3. -3. -3.]
mul: [ 4. 10. 18.]
div: [4.  2.5 2. ]
mod: [0. 1. 0.]
floordiv: [4. 2. 2.]

2. 连接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)

3. 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)

七、张量与NumPy转换

1. Tensor转换为NumPy

 Tensor.asnumpy()

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

输出:

t: [1. 1. 1. 1. 1.] <class 'mindspore.common.tensor.Tensor'>
n: [1. 1. 1. 1. 1.] <class 'numpy.ndarray'>

2.NumPy转换为Tensor

Tensor.from_numpy()

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

输出:

n: [2. 2. 2. 2. 2.] <class 'numpy.ndarray'>
t: [2. 2. 2. 2. 2.] <class 'mindspore.common.tensor.Tensor'>

八、稀疏张量

绝大部分元素的值为零或者某个确定值。

常用CSR和COO两种稀疏数据格式

稀疏张量的表达形式

<indices:Tensor, values:Tensor, shape:Tensor>

indices 非零下标元素

values 非零元素的值

shape 被压缩的稀疏张量的形状

三种稀疏张量结构:CSRTensor、COOTensor和RowTensor。

1.CSRTensor

Compressed Sparse Row压缩稀疏

values :非零元素的值,一维张量

indptr :维度,非零元素在values中起始位置和终止位置,一维整数张量

indices维度,非零元素在列中的位置,其长度与values相等,一维整数张量

       索引数据类型支持int16、int32、int64

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

参考mindspore.CSRTensor。

示例:

indptr = Tensor([0, 1, 2])
indices = Tensor([0, 1])
values = Tensor([1, 2], dtype=mindspore.float32)
shape = (2, 4)# Make a CSRTensor
csr_tensor = CSRTensor(indptr, indices, values, shape)print(csr_tensor.astype(mindspore.float64).dtype)

输出:

Float64

生成的CSRTensor:

2.COOTensor

Coordinate Format坐标格式

values :非零元素的值,一维张量,形状:[N]

indices:每行代表非零元素下标,二维整数张量,形状:[N, ndims]

索引数据类型支持int16、int32、int64。

shape  :压缩稀疏张量的形状,目前仅支持二维COOTensor

参考mindspore.COOTensor。

示例:

indices = Tensor([[0, 1], [1, 2]], dtype=mindspore.int32)
values = Tensor([1, 2], dtype=mindspore.float32)
shape = (3, 4)# Make a COOTensor
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 to float64

输出:

[1. 2.]
[[0 1][1 2]]
(3, 4)
Float64

生成的COOTensor:

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

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

相关文章

利用深度学习模型进行语音障碍自动评估

语音的产生涉及器官的复杂协调&#xff0c;因此&#xff0c;语音包含了有关身体各个方面的信息&#xff0c;从认知状态和心理状态到呼吸条件。近十年来&#xff0c;研究者致力于发现和利用语音生物标志物——即与特定疾病相关的语音特征&#xff0c;用于诊断。随着人工智能&…

js基础学习

1、js概述 js是javascript的简称&#xff0c;作用是实现页面和用户的交互 js由浏览器解析运行&#xff0c;不需要编译 js由es基础语法&#xff0c;bom浏览器相关&#xff0c;dom文档操作相关 三大部分组成 2、html引入js <!DOCTYPE html> <html lang"zh-CN&qu…

Vue项目打包上线

Nginx 是一个高性能的开源HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它在设计上旨在处理高并发的请求&#xff0c;是一个轻量级、高效能的Web服务器和反向代理服务器&#xff0c;广泛用于提供静态资源、负载均衡、反向代理等功能。 1、下载nginx 2、…

k8s学习--k8s群集ELK日志收集部署最详细的过程与应用(收集k8s群集日志)(图形化界面手把手教学)

文章目录 FilebeatFilebeat主要特点Filebeat使用场景 ELK简介Elasticsearch简介Elasticsearch主要特点Elasticsearch使用场景 Logstash简介Logstash主要特点Logstash使用场景 Kibana简介Kibana主要特点Kibana使用场景 简单理解 环境一、ELK集群部署1.软件安装2.软件配置及启动(…

Webpack: Loader开发 (2)

概述 在上一篇文章中&#xff0c;我们已经详细了解了开发 Webpack Loader 需要用到的基本技能&#xff0c;包括&#xff1a;Loader 基本形态、如何构建测试环境、如何使用 Loader Context 接口等。接下来我们继续拓展学习一些 Loader 辅助工具&#xff0c;包括&#xff1a; 了…

什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术

什么是自然语言处理&#xff1f; 自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能的一个重要分支&#xff0c;旨在让计算机理解、解释和生成人类的自然语言。打个比方&#xff0c;你和Siri对话&#xff0c;或使用谷歌翻译翻译一…

2024广州国际米粉产业展览会暨米粉节

2024广州国际米粉产业展览会 时间&#xff1a;2024年11月16-18日 地点&#xff1a;广州中国进出口商品交易会展馆 主办单位&#xff1a;企阳国际会展集团 【展会简介】 米粉作为一种历史悠久&#xff0c;人们日常食用的食物&#xff0c;其市场需求稳定&#xff0c;且随着人…

WSL2安装ContOS7并更新gcc

目录 WSL2安装CentOS7下载安装包安装启动CentOS7 CentOS7更换国内源gcc从源码安装gcc卸载gcc CMake中使用gcc关于linux配置文件参考 WSL2安装CentOS7 Windows11官方WSL2已经支持Ubuntu、Open SUSE、Debian。但是没有centos&#xff0c;所以centos的安装方式略有不同。 下载安…

家政小程序的开发:打造现代式便捷家庭服务

随着现代生活节奏的加快&#xff0c;人们越来越注重生活品质与便利性。在这样的背景下&#xff0c;家政服务市场迅速崛起&#xff0c;成为许多家庭日常生活中不可或缺的一部分。然而&#xff0c;传统的家政服务往往存在信息不对称、服务效率低下等问题。为了解决这些问题&#…

【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(三)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形 ✔️ 第一部分第二部分【第三部分】✔️ 1.2.3 Canvas 与 WebGL&#xff08;精译中 ⏳&#xff09;1.2.4 C…

独立站新风口:TikTok达人带货背后的双赢合作之道

TikTok以其庞大的用户基础、高度互动性和创新的内容形式&#xff0c;为独立站带来了前所未有的发展机遇。独立站与TikTok达人的合作&#xff0c;不仅能够帮助独立站快速提升品牌知名度和销售额&#xff0c;还能为TikTok达人带来更多商业机会和影响力。本文Nox聚星将和大家探讨独…

Android sdk 安装已经环境配置

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Android ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 一、下载 二、安装 三、环境配置 我的其他博客 正文 一、下载 1、大家可去官网下载 因为需要魔法 所以就不展示了 2、去下面这…

【JS】纯web端使用ffmpeg实现的视频编辑器-视频合并

纯前端实现的视频合并 接上篇ffmpeg文章 【JS】纯web端使用ffmpeg实现的视频编辑器 这次主要添加了一个函数&#xff0c;实现了视频合并的操作。 static mergeArgs(timelineList) {const cmd []console.log(时间轴数据,timelineList)console.log("文件1",this.readD…

Vue+ElementUi实现录音播放上传及处理getUserMedia报错问题

1.Vue安装插件 npm install --registryhttps://registry.npmmirror.com 2.Vue页面使用 <template><div class"app-container"><!-- header --><el-header class"procedureHeader" style"height: 20px;"><el-divid…

vue2 接口文档

const assetmanagementIndex (params) > getAction("/asset/assetmanagementsystem/page", params); //资产管理制度表分页列表 const assetmanagementPost (params) > postAction("/asset/assetmanagementsystem", params); //资产管理制度表新增…

维护Nginx千字经验总结

Hello , 我是恒 。 维护putty和nginx两个项目好久了&#xff0c;用面向底层的思路去接触 在nginx社区的收获不少&#xff0c;在这里谈谈我的感悟 Nginx的夺冠不是偶然 高速:一方面&#xff0c;在正常情况下&#xff0c;单次请求会得到更快的响应&#xff1b;另一方面&#xff0…

从零开始学量化~Ptrade使用教程——安装与登录

PTrade交易系统是一款高净值和机构投资者专业投资软件&#xff0c;为用户提供普通交易、篮子交易、日内回转交易、算法交易、量化投研/回测/实盘等各种交易工具&#xff0c;满足用户的各种交易需求和交易场景&#xff0c;帮助用户提高交易效率。 运行环境及安装 操作系统&…

昇思25天学习打卡营第3天 | 数据集 Dataset

数据是深度学习的基础&#xff0c;高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎&#xff0c;通过数据集&#xff08;Dataset&#xff09;和数据变换&#xff08;Transforms&#xff09;实现高效的数据预处理。其中Dataset是Pipel…

将数据切分成N份,采用NCCL异步通信,让all_gather+matmul尽量Overlap

将数据切分成N份,采用NCCL异步通信,让all_gathermatmul尽量Overlap 一.测试数据二.测试环境三.普通实现四.分块实现 本文演示了如何将数据切分成N份,采用NCCL异步通信,让all_gathermatmul尽量Overlap 一.测试数据 1.测试规模:8192*8192 world_size22.单算子:all_gather:0.035…

代理IP的10大误区:区分事实与虚构

在当今的数字时代&#xff0c;代理已成为在线环境不可或缺的一部分。它们的用途广泛&#xff0c;从增强在线隐私到绕过地理限制。然而&#xff0c;尽管代理无处不在&#xff0c;但仍存在许多围绕代理的误解。在本博客中&#xff0c;我们将探讨和消除一些最常见的代理误解&#…