文章目錄
- 前言:
- 今日所學:
- 1. 創建張量
- 2. 張量的屬性
- 3.張量索引與運算
- 4. NumPy與Tensor的轉換
- 5. 稀疏張量
前言:
張量?張亮?張量是什么?
張量是一個可以用來表示在一些矢量、標量和其他張量之間的線性關系的多線性函數,張量作為一種特殊的數據結構,和數組和矩陣都有一定的相似性,是MindSpore網絡運算中的基本數據結構。在本節當中主要介紹了張量以及稀疏張量的屬性和用法。
今日所學:
1. 創建張量
其中第一部分講述了創建張量,其包含了根據數據直接生成,從Numpy數組生成,使用init初始化器構造,繼承另一個張量的屬性,形成新的張量等方法來進行創建。
比如,直接由數據生成的方式如下:
data = [1, 0, 1, 0]
x_data = Tensor(data)print(x_data, x_data.shape, x_data.dtype)
結果如下:
使用init初始化器構造張量的方式如下代碼:
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)
結果如下:
2. 張量的屬性
第二個部分介紹了張量的屬性,它的屬性包括了形狀、數據類型、轉置張量、單個元素大小、占用字節數量、維數、元素個數和每一維步長等內容。
其屬性事例如下:
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)
結果如下:
3.張量索引與運算
然后介紹了張量索引以及張量的運算,其中索引與Numpy索引類似。對于張量的運算。有許多包含了算術、線性代數、矩陣處理、采樣等多種運算。
其中普通的運算代碼事例如下:
x = Tensor(np.array([1, 2, 3]), mindspore.float32)
y = Tensor(np.array([4, 5, 6]), mindspore.float32)output_add = x + youtput_sub = x - youtput_mul = x * youtput_div = y / xoutput_mod = y % xoutput_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)
結果如下:
4. NumPy與Tensor的轉換
將Tensor變量轉換為NumPy變量,可以使用使用 Tensor.asnumpy() 來轉換;
將NumPy變量轉換為Tensor變量,可以使用Tensor()來轉換。
5. 稀疏張量
在本節還介紹了稀疏張量。稀疏張量是作為一種特殊的張量,它的大部分元素的值為零。稀疏張量可以減少不必要的運算、儲存和通訊開銷等,從而更加的高效。
以上就是今天我所學習的內容啦~