首頁  >  文章  >  科技週邊  >  深入理解Pytorch核心,Tensor的突破之路!

深入理解Pytorch核心,Tensor的突破之路!

王林
王林轉載
2024-01-09 20:50:24960瀏覽

今天會把Pytorch在張量這方面的內容做一個記錄。

同時希望可以提供大家一丟丟幫助!

因為今兒分享的內容,絕對是一些非常乾貨的例子。

先簡單介紹下,在PyTorch中,張量是核心資料結構,它是一個多維數組,類似NumPy中的數組。張量不僅是儲存資料的容器,也是進行各種數學運算和深度學習操作的基礎。

下面從三方面做一個總結:

  • 張量的概念
  • #張量的原理
  • 張量的運算

突破Pytorch核心,Tensor !!圖片

張量的概念

#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中張量的基礎概念、原理以及常見運算。

張量作為深度學習中的基本資料結構,對於理解和實現神經網路非常關鍵。

以上是深入理解Pytorch核心,Tensor的突破之路!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除