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