张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 n 维空间内,有 nr 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。r 称为该张量的秩或阶(与矩阵的秩和阶均无关系)。
张量是一种特殊的数据结构,与数组和矩阵非常相似。张量(Tensor)是MindSpore网络运算中的基本数据结构,本教程主要介绍张量和稀疏张量的属性及用法。
把它理解为数组也可以。
首先,先引入:
import mindspore
import numpy as np
from mindspore import Tensor
请看:
list = [1, 2, 3, 4]
tensor_from_list = Tensor(list)
print(tensor_from_list)
[1 2 3 4]
十分简单,可以直接转换。
先定义一个numpy:
array = np.array(list)
然后一样的步骤:
tensor_from_array = Tensor(array)
print(tensor_from_array)
[1 2 3 4]
直接用Tensor来实现:
tensor_from_init = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=这里填什么?)
当使用 init
初始化器对张量进行初始化时,支持传入的参数有 init
、 shape
、 dtype
。
shape
: Tensor形状。
dtype
: Tensor数据类型。
还有:
init
: 初始化方法。
这个初始化方法可填 initializer 的子类。
那么:
from mindspore.common.initializer import One, Normal
tensor_from_init = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=One())
这时就全部初始化为1了。看:
print(tensor_from_init)
[[1. 1.]
[1. 1.]]
如果有另一个Tensor——tensor_dad,那么tensor_son可以继承他的父亲。见:
from mindspore import ops
tensor_dad = Tensor([1, 2, 3, 4])
tensor_son = ops.ones_like(tensor_dad)
print(tensor_son)
[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。
tensor = Tensor(np.array([[1, 2], [3, 4]]), mindspore.int32)
print("tensor_shape:", tensor.shape)
print("tensor_dtype:", tensor.dtype)
print("tensor_itemsize:", tensor.itemsize)
print("tensor_nbytes:", tensor.nbytes)
print("tensor_ndim:", tensor.ndim)
print("tensor_size:", tensor.size)
print("tensor_strides:", tensor.strides)
tensor_shape: (2, 2)
tensor_dtype: Int32
tensor_itemsize: 4
tensor_nbytes: 16
tensor_ndim: 2
tensor_size: 4
tensor_strides: (8, 4)