《昇思25天學習打卡營第2天 | 張量 Tensor》
《昇思25天學習打卡營第2天 | 張量 Tensor》
- 《昇思25天學習打卡營第2天 | 張量 Tensor》
- 什么是張量(Tensor)
- 張量的創建方式
- 根據數據直接生成
- 從NumPy數組生成
- 使用init初始化器構造張量
- 繼承另一個張量的屬性,形成新的張量
- 張量的屬性
什么是張量(Tensor)
張量(Tensor)是一個多維數組或矩陣的概念,它是向量和矩陣的推廣。
在數學和物理學中,張量是一個具有多個分量的量,這些分量之間的關系可以通過一組坐標變換來描述。
在計算機科學和工程領域,特別是在機器學習和深度學習中,張量通常指的是多維數組,它是數據的基本表示形式。
在 MindSpore 網絡運算中張量(Tensor)是基本的數據結構。張量是一種特殊的數據結構,與數組和矩陣非常相似。
張量的創建方式
根據數據直接生成
可以根據數據創建張量,數據類型可以設置或者通過框架自動推斷。
data = [1, 0, 1, 0]
x_data = Tensor(data)
print(x_data, x_data.shape, x_data.dtype)
[1 0 1 0] (4,) Int64
從NumPy數組生成
可以從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
使用init初始化器構造張量
當使用init初始化器對張量進行初始化時,支持傳入的參數有init、shape、dtype。
-
init: 支持傳入initializer的子類。如:下方示例中的 One() 和 Normal()。
-
shape: 支持傳入 list、tuple、 int。
-
dtype: 支持傳入mindspore.dtype。
from mindspore.common.initializer import One, Normal# Initialize a tensor with ones
# init主要用于并行模式下的延后初始化,在正常情況下不建議使用init對參數進行初始化。
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.01183298 0.00573333]
[ 0.01764924 -0.00527418]]
繼承另一個張量的屬性,形成新的張量
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):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)