首页 > 其他分享 >[MindSpore快速入门]Tensor张量:初始化,属性,索引,转换。01

[MindSpore快速入门]Tensor张量:初始化,属性,索引,转换。01

时间:2022-11-07 21:32:33浏览次数:79  
标签:01 Tensor dtype 张量 init MindSpore print mindspore

​MindSpore​

​03 张量_哔哩哔哩_bilibili​

注意本文多次引用官网的教程,以及其在b站上发的视频。这并不是我的文章,只能说我把细节打印整理下来,故我会将其标注为转载。

让我们引入张量的概念。下图是我们常见的数据

[MindSpore快速入门]Tensor张量:初始化,属性,索引,转换。01_数据

[MindSpore快速入门]Tensor张量:初始化,属性,索引,转换。01_初始化_02

这是一个三维的张量

[MindSpore快速入门]Tensor张量:初始化,属性,索引,转换。01_初始化_03

他的三种表现形式

[MindSpore快速入门]Tensor张量:初始化,属性,索引,转换。01_张量_04

这是一个四维张量

可以把Tensor的数学概念理解为高维的数据结构或者数据类型

Q:Tensor在mindspore中起什么作用呢?

A:Tensor是mindspore网络运算的一个基本数据结构,这意味着mindspore的所有运算或者数学操作都是基于Tensor的。

创建Tensor

1.创建tensor的方法有很多,首先我们可以根据数据直接生成tensor,数据类型可以设置或者通过框架自动推断。

>>> from mindspore import Tensor
>>> x=0.5
>>> tensor=Tensor(x)
>>> print(type(x)) #x的数据类型依然是float
<class 'float'>
>>> print(tensor)
0.5 #数据依然没有变,但数据类型已经变成mindspore的tensor了
>>> print(type(tensor))
<class 'mindspore.common.tensor.Tensor'>

Q:mindspore还支持其他数据类型转化成tensor吗?

>>> x=[0.5]                #列表可以
>>> print(type(tensor))
<class 'mindspore.common.tensor.Tensor'>

2.从NumPy数组生成

import numpy as np
>>> arr=np.array([1,0,1,0])
>>> print(type(arr))
<class 'numpy.ndarray'>
>>> x_np=Tensor(arr)
>>> print(type(x_np))
<class 'mindspore.common.tensor.Tensor'>
#numpy的数据类型直接转化为张量

3.使用init初始化器构造张量

Q:Tensor在构建的时候已经指定过数据了【例如Tensor(x)】,那为什么还需要构造器来指定张量呢?

A:在神经网络里面张量是一个高维的数据,如果张量一开始初始化做的好,可能会有助于神经网络模型的学习

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

init:支持传入initializer的子类

shape:支持传入list, tuple, int。

dtype:支持传入mindspore.dtype。

from mindspore import Tensor
from mindspore import set_seed
from mindspore import dtype as mstype
from mindspore.common import initializer as init#通过这个init初始化构造器来定义张量
#假设希望能够得到一个全1的张量

set_seed(1)

tensor1 = Tensor(shape=(2,2), dtype=mstype.float32, init=init.One())#用init.One作为第三入参
print(tensor1)
print(type(tensor1))

tensor2 = Tensor(shape=(2,2), dtype=mstype.float32, init=init.Normal())
print(tensor2)
print(type(tensor2))
[[1. 1.]            #结果
[1. 1.]]
<class 'mindspore.common.tensor.Tensor'>
[[-0.00128023 -0.01392901]
[ 0.0130886 -0.00107818]]
<class 'mindspore.common.tensor.Tensor'>

Q:有更复杂的数据分布吗?

A:mindspore提供了非常丰富的init函数,从mindspore官网查看API

​MindSpore官网​

​MindSpore​

4.继承一个张量的属性,然后形成一个同一维度的张量

from mindspore import ops
from mindspore import Tensor
from mindspore import dtype as astype
import numpy as np

x_data=Tensor(np.array([[0,1],[1,2]]).astype(np.int32))
print(x_data)

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_ones} \n")
[[0 1]
[1 2]]
Ones Tensor:
[[1 1] #与原来的shape相同
[1 1]]

Zeros Tensor:
[[1 1]
[1 1]]

张量的属性

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

  • 形状(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)
x_shape: (2, 2)
x_dtype: Int32
x_itemsize: 4
x_nbytes: 16
x_ndim: 2
x_size: 4
x_strides: (8, 4)

张量索引

Tensor索引与Numpy索引类似,索引从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)
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.]

Tensor与NumPy之间可以相互转换

Tensor转换为NumPy

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

t = ops.ones(5, mindspore.float32)
print(f"t: {t}")
n = t.asnumpy()
print(f"n: {n}")

NumPy转换为Tensor

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

n = np.ones(5)
t = Tensor.from_numpy(n)

本章小结

1.学习了Tensor的基本概念

2.学习了Mindspore Tensor的作用

3.学习了如何构建,索引和张量的运算

(对于mindspore的快速入门,我可能在明天再出一期,尽情期待)

感谢阅读

标签:01,Tensor,dtype,张量,init,MindSpore,print,mindspore
From: https://blog.51cto.com/u_15818358/5831411

相关文章

  • golang-ssh-01:执行远程命令
    golang-ssh-01:执行远程命令Go&Rust......
  • P3205 [HNOI2010]合唱队
    P3205[HNOI2010]合唱队题目大意:一个排队方式,共\(n\)个人($n\leq1000$),如果当前人的身高大于前一个,那么将这个人排在前一个人右边,如果当前人身高小于前一个人,那么......
  • 前端学习-CSS-01-CSS基础认知
    学习时间:2022.11.06CSS基础认知CSS初识<!--01-CSS初识.html--><!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-C......
  • [AGC001E] BBQ Hard
    发现\(A_i\)\(B_i\)的值很小,那么本题可能可以使用几何意义求解这个组合数。对于一个组合数,其方案数的几何意义为起点为\((0,0)\)终点为\((a_i+a_j,b_i+b_j)\)的路......
  • Go_day01
    Go基础语法注释注释是为了增强代码的可读性,不会参与程序的一切功能,go语言注释分为单行注释与多行注释单行注释//双斜杠每行都要添加//多行注释/**/一次标记......
  • 0001-华为ENSP WLAN配置实验-郑锦程
    0001-华为ENSPWLAN配置实验-郑锦程创建管理vlan和业务vlan​​[AC6605]vlanbatch100101​​​​Info:Thisoperationmaytakeafewseconds.Pleasewaitforamome......
  • [WC2019] I 君的商店
    首先考虑,若我们知道一个数,我们如何知道其他数是1还是0假设已知\(a\),对于\(b\leqc\)可知:若\(a\leqb+c\)则有\(a\leqc\)(否则\(a=0,c=1\)不满足条件)若\(a\ge......
  • SB20100LFCT-ASEMI半塑封肖特基二极管SB20100LFCT
    编辑-ZSB20100LFCT在ITO-220AB封装里采用的2个芯片,其尺寸都是82MIL,是一款半塑封肖特基二极管。SB20100LFCT的浪涌电流Ifsm为180A,漏电流(Ir)为6uA,其工作时耐温度范围为-65~15......
  • SB20100LFCT-ASEMI半塑封肖特基二极管SB20100LFCT
    编辑-ZSB20100LFCT在ITO-220AB封装里采用的2个芯片,其尺寸都是82MIL,是一款半塑封肖特基二极管。SB20100LFCT的浪涌电流Ifsm为180A,漏电流(Ir)为6uA,其工作时耐温度范围为-65~......
  • PX01如何脱机支持内置多个点屏项目
    当我们点屏项目非常多,而随身携带的PG又不方便随时用电脑进行点屏工程更新,有没有什么办法可以在PX01内放置多个点屏工程脱机就能随时切换呢?没问题!可以用PX01内SD卡来实现这......