突破Pytorch核心,Tensor !!
今天會把Pytorch在張量這方面的內容做一個記錄。
同時希望可以給大家提供一丟丟幫助!
因為今兒分享的內容,絕對是非常干貨的一些示例。
先簡單介紹下,在PyTorch中,張量是核心數據結構,它是一個多維數組,類似于NumPy中的數組。張量不僅僅是存儲數據的容器,還是進行各種數學運算和深度學習操作的基礎。
下面從三方面做一個總結:
- 張量的概念
- 張量的原理
- 張量的操作
圖片
張量的概念
1.張量的定義
張量是一種多維數組,它可以是標量(零維數組)、向量(一維數組)、矩陣(二維數組)或具有更高維度的數組。
在PyTorch中,張量是torch.Tensor的實例,可以通過不同的方式創建,如直接從Python列表、NumPy數組或通過特定函數生成。
import torch
# 創建一個標量
scalar_tensor = torch.tensor(3.14)
# 創建一個向量
vector_tensor = torch.tensor([1, 2, 3])
# 創建一個矩陣
matrix_tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 創建一個3D張量
tensor_3d = torch.rand((2, 3, 4)) # 2行3列4深度
2.張量的屬性
每個張量都有一些重要的屬性,包括形狀(shape)、數據類型(dtype)和設備(device)。
# 獲取張量的形狀
shape = tensor_3d.shape
# 獲取張量的數據類型
dtype = tensor_3d.dtype
# 獲取張量所在的設備
device = tensor_3d.device
3.張量的形狀
張量的形狀定義了其維度和每個維度上的大小。例如,形狀為(2, 3, 4)的張量具有2行、3列和4個深度。形狀對于理解和操作張量非常重要。
# 獲取張量的形狀
shape = tensor_3d.shape
# 改變張量的形狀
reshaped_tensor = tensor_3d.view(3, 8) # 將原始形狀(2, 3, 4)變為(3, 8)
張量的原理
PyTorch中的張量是基于Tensor類實現的,它提供了對底層存儲的抽象。
張量包含三個主要組件:
- 存儲(storage)
- 形狀(shape)
- 步幅(stride)
1.存儲
(Storage)存儲是實際存儲數據的地方,它是一塊連續的內存區域。多個張量可以共享相同的存儲,從而減少內存消耗。存儲中的數據按照張量的形狀進行排列。
# 獲取張量的存儲
storage = tensor_3d.storage()
2.形狀(Shape)
張量的形狀定義了其維度和每個維度上的大小。形狀信息有助于解釋存儲中數據的組織方式。
# 獲取張量的形狀
shape = tensor_3d.shape
3.步幅(Stride)
步幅是指在存儲中移動到下一個元素所需的步數。了解步幅有助于理解在張量中進行索引和切片時的性能。
# 獲取張量的步幅
stride = tensor_3d.stride()
張量的操作
PyTorch提供了豐富的張量操作,包括數學運算、邏輯運算、索引和切片等。
這里列舉最最常見的集中操作:
1.數學運算
# 加法
result_add = tensor_3d + 2
# 乘法
result_mul = tensor_3d * 3
# 矩陣乘法
matrix_a = torch.rand((2, 3))
matrix_b = torch.rand((3, 4))
result_matmul = torch.mm(matrix_a, matrix_b)
2. 邏輯運算
# 大小比較
result_compare = tensor_3d > 0.5
# 邏輯運算
result_logical = torch.logical_and(result_add, result_compare)
3. 索引和切片
# 索引
element = tensor_3d[0, 1, 2]
# 切片
sliced_tensor = tensor_3d[:, 1:3, :]
4. 形狀操作
# 改變形狀
reshaped_tensor = tensor_3d.view(3, 8)
# 轉置
transposed_tensor = tensor_3d.transpose(0, 2)
5.廣播
廣播是一種自動擴展張量的操作,使得形狀不同的張量可以進行逐元素的數學運算。
# 廣播
tensor_a = torch.rand((1, 3, 1))
tensor_b = torch.rand((2, 1, 4))
result_broadcast = tensor_a + tensor_b
最后
今兒介紹的是關于PyTorch中張量的基礎概念、原理以及常見操作。
張量作為深度學習中的基本數據結構,對于理解和實現神經網絡非常關鍵。