午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

PyTorch:初學(xué)者全面指南torch函數(shù)使用

 netouch 2024-08-03

目錄

引言

多維張量數(shù)據(jù)結(jié)構(gòu)

數(shù)學(xué)運(yùn)算

序列化功能

CUDA 支持

其他實(shí)用工具

PyTorch的關(guān)鍵特性

torch相關(guān)函數(shù)演示和簡介 

is_tensor

函數(shù)作用

使用技巧

使用方法和示例

展示結(jié)果

is_storage

存儲對象(Storage)簡介

函數(shù)作用

使用技巧

使用方法和示例

 is_complex

函數(shù)作用

使用技巧

使用方法和示例

 is_conj

函數(shù)作用

使用技巧

使用方法和示例

is_floating_point

函數(shù)作用

使用技巧

使用方法和示例

is_nonzero

函數(shù)作用

使用注意點(diǎn)

使用方法和示例

set_default_dtype

函數(shù)作用

使用注意點(diǎn)

使用方法和示例

get_default_dtype

函數(shù)作用

使用注意點(diǎn)

使用方法和示例

set_default_device

函數(shù)作用

使用注意點(diǎn)

使用方法和示例

set_default_tensor_type

函數(shù)作用

使用注意點(diǎn)

使用方法和示例

numel

函數(shù)作用

使用方法和示例

set_printoptions

函數(shù)作用

參數(shù)詳解

使用方法和示例

set_flush_denormal

函數(shù)作用

使用注意點(diǎn)

使用方法和示例


引言

   torch 是一個功能豐富的庫,是 PyTorch 框架的核心,用于深度學(xué)習(xí)和張量計算。它提供了一系列工具和功能,使得科學(xué)計算和機(jī)器學(xué)習(xí)更加高效和易于操作。

多維張量數(shù)據(jù)結(jié)構(gòu)

  • torch 提供了多維張量(Tensor)的數(shù)據(jù)結(jié)構(gòu),這是其最基本的組成部分。張量在 PyTorch 中類似于 NumPy 的數(shù)組,但與此同時,它們還能在 GPU 上進(jìn)行計算以加速運(yùn)行速度。
  • 張量用于存儲和操作數(shù)據(jù),是深度學(xué)習(xí)模型中各種計算的基礎(chǔ)。

數(shù)學(xué)運(yùn)算

  • torch 定義了一系列的數(shù)學(xué)運(yùn)算來操作這些張量,例如加法、乘法、轉(zhuǎn)置等,以及更高級的操作,如矩陣乘法、卷積等。
  • 這些運(yùn)算是構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型的基石,用于實(shí)現(xiàn)前向傳播和反向傳播算法。

序列化功能

  • torch 提供了有效的工具來序列化和反序列化張量數(shù)據(jù),使得數(shù)據(jù)的保存和加載變得容易。
  • 序列化對于模型的持久化存儲、分享和部署至關(guān)重要。

CUDA 支持

  • 通過其 CUDA 對應(yīng)部分,torch 允許張量計算在 NVIDIA GPU 上運(yùn)行,條件是 GPU 的計算能力需要大于等于 3.0。
  • 使用 GPU 可以顯著加快訓(xùn)練過程,特別是在處理大型神經(jīng)網(wǎng)絡(luò)和大規(guī)模數(shù)據(jù)集時。

其他實(shí)用工具

  • torch 還包括其他多種實(shí)用工具,如自動微分(重要于神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的反向傳播)、數(shù)據(jù)集加載和處理工具等。
  • 這些工具使得從數(shù)據(jù)處理到模型訓(xùn)練的整個流程更加高效和標(biāo)準(zhǔn)化。

        總之,torch 包作為 PyTorch 框架的核心,為深度學(xué)習(xí)和廣泛的科學(xué)計算提供了強(qiáng)大的工具和功能。它的靈活性和易用性使得開發(fā)、訓(xùn)練和部署深度學(xué)習(xí)模型變得更加簡單和高效。

PyTorch的關(guān)鍵特性

  1. 張量(Tensors):PyTorch的核心是張量。張量在PyTorch中是多維數(shù)組,類似于NumPy數(shù)組,但它們具有在GPU上運(yùn)行的附加優(yōu)勢。它們是PyTorch的基礎(chǔ)構(gòu)件,用于各種操作。

  2. CUDA支持:PyTorch提供對CUDA的支持,允許在NVIDIA GPU上進(jìn)行張量計算,前提是GPU的計算能力需要大于等于3.0。這意味著你可以將你的張量計算無縫遷移到GPU上,從而實(shí)現(xiàn)顯著的性能提升。

torch相關(guān)函數(shù)演示和簡介 

is_tensor

         torch.is_tensor 是 PyTorch 中的一個函數(shù),用來判斷給定的對象是否是一個 PyTorch 張量(Tensor)。這個函數(shù)非常有用,特別是在你處理多種數(shù)據(jù)類型時,需要確認(rèn)某個對象是否為PyTorch張量的情況下。

函數(shù)作用

  • 目的: torch.is_tensor 的主要目的是進(jìn)行類型檢查,即確認(rèn)一個對象是否為 PyTorch 的 Tensor 類型。
  • 使用場景: 在混合不同類型數(shù)據(jù)(如列表、數(shù)組、張量等)的處理或計算中,確保進(jìn)行張量相關(guān)操作的對象確實(shí)是張量。

使用技巧

  • 類型檢查: 盡管 torch.is_tensor 可以用來檢查一個對象是否為張量,但在進(jìn)行類型檢查時,使用 isinstance(obj, Tensor) 通常更推薦。這是因為 isinstance 對于類型檢查來說更加明確,且更適合于類型提示工具(如mypy)。
  • 調(diào)試和驗證: 當(dāng)編寫涉及多種數(shù)據(jù)結(jié)構(gòu)的復(fù)雜代碼時,使用 torch.is_tensor 可以幫助調(diào)試和驗證數(shù)據(jù)類型,確保傳入的參數(shù)是正確的類型。

使用方法和示例

以下是一個使用 torch.is_tensor 的簡單例子:

  1. import torch
  2. # 創(chuàng)建一個PyTorch張量
  3. x = torch.tensor([1, 2, 3])
  4. # 使用torch.is_tensor來檢查x是否為張量如果是則返回true,不是則返回false
  5. if torch.is_tensor(x):
  6. print("x is a tensor")
  7. else:
  8. print("x is not a tensor")

展示結(jié)果

在上面的代碼中,輸出將會是:

x is a tensor

         這是因為變量 x 被創(chuàng)建為一個 PyTorch 張量,所以 torch.is_tensor(x) 返回 True。

is_storage

        torch.is_storage 是 PyTorch 庫中的一個函數(shù),用于判斷給定的對象是否是一個 PyTorch 存儲對象(Storage Object)。在深入了解其用途之前,我們首先需要明白什么是 PyTorch 的存儲對象。

存儲對象(Storage)簡介

PyTorch 中的存儲對象是一種底層數(shù)據(jù)結(jié)構(gòu),用于持有張量(Tensor)的數(shù)據(jù)。每個張量都與一個存儲對象相關(guān)聯(lián),該對象實(shí)際上包含了張量的數(shù)據(jù)。雖然多個張量可以共享相同的存儲,但它們可以有不同的視圖(比如不同的大小和步長)。

函數(shù)作用

  • 目的: torch.is_storage 的主要目的是確認(rèn)一個對象是否為 PyTorch 的存儲對象。
  • 使用場景: 這個函數(shù)在底層數(shù)據(jù)操作和高級張量處理中非常有用,尤其是在你需要處理直接存儲數(shù)據(jù)或者進(jìn)行優(yōu)化和內(nèi)存管理時。

使用技巧

  • 內(nèi)存和性能優(yōu)化: 在進(jìn)行內(nèi)存優(yōu)化或者性能調(diào)優(yōu)時,了解張量背后的存儲機(jī)制是非常重要的。使用 torch.is_storage 可以幫助你在調(diào)試和開發(fā)過程中確認(rèn)對象是否為存儲對象。
  • 深入理解張量: 理解存儲對象可以幫助你更深入地理解張量是如何在 PyTorch 中表示和處理的。

使用方法和示例

以下是使用 torch.is_storage 的一個示例:

  1. import torch
  2. # 創(chuàng)建一個PyTorch張量
  3. x = torch.tensor([1, 2, 3])
  4. # 獲取與張量x關(guān)聯(lián)的存儲對象
  5. storage = x.storage()
  6. # 檢查storage是否為PyTorch存儲對象
  7. if torch.is_storage(storage):
  8. print("storage is a PyTorch storage object")
  9. else:
  10. print("storage is not a PyTorch storage object")
  11. # 在上述代碼中,輸出將會是:
  12. ## storage is a PyTorch storage object
  13. ## 這表明變量 storage 是與張量 x 相關(guān)聯(lián)的 PyTorch 存儲對象。

 is_complex

    torch.is_complex 是 PyTorch 中的一個函數(shù),用于判斷給定的張量是否是復(fù)數(shù)數(shù)據(jù)類型。這個函數(shù)特別有用在處理涉及復(fù)數(shù)運(yùn)算的場景中,比如信號處理或者某些特定的數(shù)學(xué)計算。

函數(shù)作用

  • 目的: 確認(rèn)輸入張量的數(shù)據(jù)類型是否為復(fù)數(shù)類型。在 PyTorch 中,復(fù)數(shù)類型主要有 torch.complex64torch.complex128。
  • 使用場景: 當(dāng)你的代碼涉及到復(fù)數(shù)運(yùn)算時,使用 torch.is_complex 可以確保你的輸入是合適的數(shù)據(jù)類型,從而避免類型不匹配導(dǎo)致的錯誤。

使用技巧

  • 數(shù)據(jù)類型驗證: 在執(zhí)行涉及復(fù)數(shù)的操作之前,使用 torch.is_complex 來驗證數(shù)據(jù)類型可以確保代碼的正確性和穩(wěn)定性。
  • 調(diào)試和開發(fā): 在開發(fā)和調(diào)試階段,特別是在進(jìn)行數(shù)學(xué)和算法的實(shí)現(xiàn)時,確認(rèn)輸入是否為復(fù)數(shù)類型非常重要。

使用方法和示例

以下是 torch.is_complex 的使用示例:

  1. import torch
  2. # 創(chuàng)建一個復(fù)數(shù)類型的張量
  3. z = torch.tensor([1 + 1j, 2 + 2j], dtype=torch.complex64)
  4. # 使用torch.is_complex來檢查z是否為復(fù)數(shù)類型
  5. is_complex = torch.is_complex(z)
  6. print(is_complex) # 輸出結(jié)果: True
  7. # 創(chuàng)建一個非復(fù)數(shù)類型的張量
  8. x = torch.tensor([1, 2, 3])
  9. # 再次使用torch.is_complex來檢查x
  10. is_complex_x = torch.is_complex(x)
  11. print(is_complex_x) # 輸出結(jié)果: False

         在上述代碼中,torch.is_complex(z) 的結(jié)果是 True,因為 z 是一個復(fù)數(shù)類型的張量。而 torch.is_complex(x) 的結(jié)果是 False,因為 x 是一個實(shí)數(shù)類型的張量。

 is_conj

    torch.is_conj 是 PyTorch 庫中的一個函數(shù),用于判斷一個張量是否為共軛張量。這個函數(shù)在處理涉及復(fù)數(shù)張量的場景,特別是在涉及共軛運(yùn)算的數(shù)學(xué)和工程計算中非常有用。

函數(shù)作用

  • 目的: torch.is_conj 的主要作用是檢查輸入的張量是否已經(jīng)被設(shè)置為共軛狀態(tài),即其共軛位是否為True。
  • 使用場景: 在執(zhí)行涉及復(fù)數(shù)張量的共軛操作時,這個函數(shù)可以確保你正在處理的是正確的張量類型。這在某些算法中非常重要,比如在信號處理和復(fù)數(shù)域中的數(shù)學(xué)計算。

使用技巧

  • 共軛狀態(tài)確認(rèn): 在進(jìn)行共軛操作或處理共軛數(shù)據(jù)時,使用 torch.is_conj 確認(rèn)張量的共軛狀態(tài)可以避免可能的錯誤。
  • 算法實(shí)現(xiàn)與調(diào)試: 在實(shí)現(xiàn)和調(diào)試涉及復(fù)數(shù)運(yùn)算的算法時,torch.is_conj 是一個有用的工具,可以幫助開發(fā)者理解和追蹤張量的狀態(tài)。

使用方法和示例

以下是 torch.is_conj 的使用示例:

  1. import torch
  2. # 創(chuàng)建一個復(fù)數(shù)張量
  3. z = torch.tensor([1 + 1j, 2 + 2j], dtype=torch.complex64)
  4. # 假設(shè)我們對z進(jìn)行了共軛操作
  5. # 注意:PyTorch在某些版本中可能沒有提供直接的共軛操作函數(shù)
  6. conj_z = z.conj()
  7. # 使用torch.is_conj來檢查z是否為共軛張量
  8. is_conjugated = torch.is_conj(conj_z)
  9. print(is_conjugated) # 輸出結(jié)果: True 或 False,取決于是否進(jìn)行了共軛操作

         在上述代碼中,由于 PyTorch 在某些版本中可能還沒有提供直接的共軛操作或共軛位的設(shè)置,所以 torch.is_conj 函數(shù)的具體使用可能受到限制。但是,其基本用途是用于檢查一個張量是否被設(shè)置為共軛狀態(tài)。

is_floating_point

        torch.is_floating_point 是 PyTorch 中的一個函數(shù),用于判斷一個張量的數(shù)據(jù)類型是否為浮點(diǎn)類型。這個函數(shù)在處理涉及浮點(diǎn)運(yùn)算的場景中非常有用,尤其是在精度和性能優(yōu)化方面。

函數(shù)作用

  • 目的: 確認(rèn)輸入張量的數(shù)據(jù)類型是否為浮點(diǎn)類型。PyTorch 中的浮點(diǎn)類型包括 torch.float64 (雙精度浮點(diǎn)), torch.float32 (單精度浮點(diǎn)), torch.float16 (半精度浮點(diǎn)), 和 torch.bfloat16
  • 使用場景: 在執(zhí)行數(shù)值計算時,尤其是涉及到精度要求或性能優(yōu)化的計算時,使用 torch.is_floating_point 可以確保輸入數(shù)據(jù)具有合適的數(shù)據(jù)類型。

使用技巧

  • 精度和性能優(yōu)化: 在進(jìn)行深度學(xué)習(xí)模型的訓(xùn)練和推斷時,不同的浮點(diǎn)精度對性能和內(nèi)存占用有顯著影響。使用 torch.is_floating_point 可以幫助你確認(rèn)當(dāng)前的數(shù)據(jù)類型,從而做出相應(yīng)的優(yōu)化決策。
  • 數(shù)據(jù)類型驗證: 在復(fù)雜的計算中,特別是涉及不同數(shù)據(jù)類型的操作時,使用 torch.is_floating_point 確保你的輸入數(shù)據(jù)是浮點(diǎn)類型,可以防止類型不匹配導(dǎo)致的錯誤。

使用方法和示例

以下是 torch.is_floating_point 的使用示例:

  1. import torch
  2. # 創(chuàng)建不同數(shù)據(jù)類型的張量
  3. tensor_float64 = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float64)
  4. tensor_int = torch.tensor([1, 2, 3])
  5. # 檢查tensor_float64是否為浮點(diǎn)類型
  6. print(torch.is_floating_point(tensor_float64)) # 輸出: True
  7. # 檢查tensor_int是否為浮點(diǎn)類型
  8. print(torch.is_floating_point(tensor_int)) # 輸出: False

         在上述代碼中,torch.is_floating_point(tensor_float64) 的結(jié)果是 True,因為 tensor_float64 是一個雙精度浮點(diǎn)類型的張量。而 torch.is_floating_point(tensor_int) 的結(jié)果是 False,因為 tensor_int 是一個整數(shù)類型的張量。

is_nonzero

    torch.is_nonzero 是 PyTorch 中的一個函數(shù),用于判斷一個單元素張量(tensor)是否非零。這個函數(shù)在進(jìn)行條件檢查和斷言時特別有用,尤其是在處理只包含一個元素的張量時。

函數(shù)作用

  • 目的: 確認(rèn)輸入張量是一個單元素張量,并且這個元素的值不等于零。
  • 使用場景: 通常用于條件判斷和斷言,特別是在需要驗證某個計算結(jié)果是否為非零值時。這在數(shù)學(xué)和算法編程中非常常見。

使用注意點(diǎn)

  • 單元素張量: torch.is_nonzero 只對單元素張量有效。如果輸入張量包含多于一個元素,或者是空的,函數(shù)將拋出 RuntimeError。
  • 類型轉(zhuǎn)換: 函數(shù)會根據(jù)需要進(jìn)行類型轉(zhuǎn)換。例如,布爾值 False 被視為 0,浮點(diǎn)數(shù)或整數(shù)中的 0 也被視為 0

使用方法和示例

以下是一些使用 torch.is_nonzero 的示例,包括它如何對不同的輸入做出反應(yīng):

  1. import torch
  2. # 對于單元素張量且元素為0,返回False
  3. print(torch.is_nonzero(torch.tensor([0.]))) # 輸出: False
  4. # 對于單元素張量且元素不為0,返回True
  5. print(torch.is_nonzero(torch.tensor([1.5]))) # 輸出: True
  6. # 對于單元素布爾型張量False,返回False
  7. print(torch.is_nonzero(torch.tensor([False]))) # 輸出: False
  8. # 對于單元素整數(shù)型張量且元素不為0,返回True
  9. print(torch.is_nonzero(torch.tensor([3]))) # 輸出: True
  10. # 對于多元素張量,拋出RuntimeError
  11. try:
  12. torch.is_nonzero(torch.tensor([1, 3, 5]))
  13. except RuntimeError as e:
  14. print(e) # 輸出: bool value of Tensor with more than one value is ambiguous
  15. # 對于空張量,拋出RuntimeError
  16. try:
  17. torch.is_nonzero(torch.tensor([]))
  18. except RuntimeError as e:
  19. print(e) # 輸出: bool value of Tensor with no values is ambiguous

        在這些示例中,我們可以看到 torch.is_nonzero 如何對不同類型和大小的張量做出反應(yīng)。特別需要注意的是,它只適用于單元素張量,且當(dāng)張量為空或包含多個元素時,會引發(fā)錯誤。

set_default_dtype

    torch.set_default_dtype 是 PyTorch 庫中的一個函數(shù),用于設(shè)置 PyTorch 中默認(rèn)的浮點(diǎn)數(shù)據(jù)類型(dtype)。這個設(shè)置對于控制浮點(diǎn)數(shù)張量的默認(rèn)精度非常重要,特別是在創(chuàng)建新的張量時沒有明確指定數(shù)據(jù)類型的情況下。

函數(shù)作用

  • 目的: 設(shè)置 PyTorch 中的默認(rèn)浮點(diǎn)數(shù)據(jù)類型。PyTorch 初始化時,默認(rèn)的浮點(diǎn)類型是 torch.float32。torch.set_default_dtype 可以將其改為 torch.float32torch.float64。
  • 使用場景: 用于控制新創(chuàng)建張量的默認(rèn)數(shù)據(jù)類型,尤其是在從 Python 的浮點(diǎn)數(shù)或復(fù)數(shù)創(chuàng)建張量時。此外,它還會影響復(fù)數(shù)張量的默認(rèn)數(shù)據(jù)類型和張量類型提升的結(jié)果。

使用注意點(diǎn)

  • 支持類型: 僅支持 torch.float32torch.float64 作為輸入。雖然其他數(shù)據(jù)類型可能被接受而不報錯,但它們并不受支持,且可能無法按預(yù)期工作。
  • 類型推斷: 類似于 NumPy,當(dāng)設(shè)置默認(rèn)類型為 torch.float64 時,會促進(jìn)類似 NumPy 的類型推斷。
  • 復(fù)數(shù)數(shù)據(jù)類型影響: 默認(rèn)的浮點(diǎn)類型也隱式?jīng)Q定了默認(rèn)的復(fù)數(shù)數(shù)據(jù)類型。例如,當(dāng)默認(rèn)浮點(diǎn)類型為 float32 時,默認(rèn)復(fù)數(shù)類型為 complex64;當(dāng)為 float64 時,默認(rèn)為 complex128

使用方法和示例

以下是 torch.set_default_dtype 的使用示例:

  1. import torch
  2. # 初始默認(rèn)的浮點(diǎn)類型為torch.float32
  3. print(torch.tensor([1.2, 3]).dtype) # 輸出: torch.float32
  4. # 初始默認(rèn)的復(fù)數(shù)類型為torch.complex64
  5. print(torch.tensor([1.2, 3j]).dtype) # 輸出: torch.complex64
  6. # 設(shè)置默認(rèn)的浮點(diǎn)類型為torch.float64
  7. torch.set_default_dtype(torch.float64)
  8. # 現(xiàn)在Python浮點(diǎn)數(shù)被解釋為float64
  9. print(torch.tensor([1.2, 3]).dtype) # 輸出: torch.float64
  10. # 現(xiàn)在復(fù)數(shù)Python數(shù)字被解釋為complex128
  11. print(torch.tensor([1.2, 3j]).dtype) # 輸出: torch.complex128

         在這個示例中,我們可以看到在調(diào)用 torch.set_default_dtype(torch.float64) 后,新創(chuàng)建的浮點(diǎn)數(shù)和復(fù)數(shù)張量的數(shù)據(jù)類型分別變?yōu)?torch.float64torch.complex128

get_default_dtype

    torch.get_default_dtype 是 PyTorch 庫中的一個函數(shù),它用于獲取當(dāng)前設(shè)置的默認(rèn)浮點(diǎn)數(shù)據(jù)類型(dtype)。這個函數(shù)在需要確認(rèn)或記錄當(dāng)前環(huán)境的默認(rèn)浮點(diǎn)數(shù)據(jù)類型時非常有用,尤其是在進(jìn)行多種數(shù)據(jù)處理任務(wù)時,了解當(dāng)前的默認(rèn)數(shù)據(jù)類型有助于保持代碼的一致性和準(zhǔn)確性。

函數(shù)作用

  • 目的: 獲取當(dāng)前 PyTorch 環(huán)境中的默認(rèn)浮點(diǎn)數(shù)據(jù)類型。
  • 使用場景: 在需要根據(jù)當(dāng)前的默認(rèn)數(shù)據(jù)類型調(diào)整算法行為或者在進(jìn)行數(shù)據(jù)類型敏感的操作之前,使用此函數(shù)可以確保你了解當(dāng)前的默認(rèn)設(shè)置。

使用注意點(diǎn)

  • set_default_dtype配合使用: torch.get_default_dtypetorch.set_default_dtype 通常一起使用,前者用于獲取當(dāng)前默認(rèn)的浮點(diǎn)類型,后者用于設(shè)置默認(rèn)的浮點(diǎn)類型。
  • 受其他設(shè)置影響: 設(shè)置默認(rèn)張量類型(如通過 torch.set_default_tensor_type)也會影響默認(rèn)的浮點(diǎn)數(shù)據(jù)類型,因為不同的張量類型可能有不同的默認(rèn)數(shù)據(jù)類型。

使用方法和示例

以下是使用 torch.get_default_dtype 的示例:

  1. import torch
  2. # 獲取初始默認(rèn)的浮點(diǎn)數(shù)據(jù)類型
  3. print(torch.get_default_dtype()) # 輸出: torch.float32,初始默認(rèn)的浮點(diǎn)類型
  4. # 設(shè)置默認(rèn)的浮點(diǎn)數(shù)據(jù)類型為torch.float64
  5. torch.set_default_dtype(torch.float64)
  6. # 獲取更改后的默認(rèn)數(shù)據(jù)類型
  7. print(torch.get_default_dtype()) # 輸出: torch.float64
  8. # 設(shè)置默認(rèn)的張量類型為torch.FloatTensor
  9. torch.set_default_tensor_type(torch.FloatTensor)
  10. # 再次獲取默認(rèn)的浮點(diǎn)數(shù)據(jù)類型
  11. print(torch.get_default_dtype()) # 輸出: torch.float32,因為torch.FloatTensor的默認(rèn)類型是torch.float32

         在這個示例中,我們首先獲取了初始的默認(rèn)浮點(diǎn)數(shù)據(jù)類型(torch.float32),然后將其更改為 torch.float64,并驗證了這一更改。隨后,我們改變了默認(rèn)的張量類型為 torch.FloatTensor,這也導(dǎo)致默認(rèn)的浮點(diǎn)數(shù)據(jù)類型變回 torch.float32。

set_default_device

    torch.set_default_device 是 PyTorch 庫中的一個函數(shù),用于設(shè)置默認(rèn)的設(shè)備,以便在未明確指定設(shè)備時,新創(chuàng)建的 torch.Tensor 將被分配到該設(shè)備上。這個函數(shù)在需要統(tǒng)一管理張量分配位置的場景中非常有用,尤其是在進(jìn)行多設(shè)備計算時。

函數(shù)作用

  • 目的: 設(shè)置 PyTorch 張量默認(rèn)的分配設(shè)備。這對于優(yōu)化代碼,使其在特定設(shè)備(如 GPU)上運(yùn)行非常有用。
  • 使用場景: 在需要將大部分張量操作默認(rèn)在特定設(shè)備上執(zhí)行的情況下,如在 GPU 上進(jìn)行深度學(xué)習(xí)模型訓(xùn)練時。

使用注意點(diǎn)

  • 初始默認(rèn)設(shè)備: 初始情況下,PyTorch 的默認(rèn)設(shè)備是 CPU。使用 torch.set_default_device 可以將其更改為 GPU 或其他設(shè)備。
  • 不影響顯式指定的設(shè)備調(diào)用: 如果使用工廠函數(shù)(如 torch.tensor)并顯式指定了設(shè)備,這個設(shè)置不會影響那些調(diào)用。
  • 性能成本: 使用此函數(shù)會在每次調(diào)用 PyTorch API 時帶來輕微的性能成本。
  • 臨時更改設(shè)備: 如果只想臨時更改默認(rèn)設(shè)備,建議使用 with torch.device(device): 上下文管理器。

使用方法和示例

以下是 torch.set_default_device 的使用示例:

  1. import torch
  2. # 檢查一個新創(chuàng)建的張量默認(rèn)分配到哪個設(shè)備
  3. print(torch.tensor([1.2, 3]).device) # 輸出: device(type='cpu')
  4. # 將默認(rèn)設(shè)備設(shè)置為 CUDA 設(shè)備 0
  5. torch.set_default_device('cuda')
  6. # 再次檢查新創(chuàng)建的張量默認(rèn)分配到哪個設(shè)備
  7. print(torch.tensor([1.2, 3]).device) # 輸出: device(type='cuda', index=0)
  8. # 將默認(rèn)設(shè)備設(shè)置為 CUDA 設(shè)備 1 多個顯卡這么搞
  9. torch.set_default_device('cuda:1')
  10. # 再次檢查新創(chuàng)建的張量默認(rèn)分配到哪個設(shè)備
  11. print(torch.tensor([1.2, 3]).device) # 輸出: device(type='cuda', index=1)

         在這個示例中,我們首先檢查了新創(chuàng)建的張量默認(rèn)分配到 CPU。然后,我們將默認(rèn)設(shè)備更改為 CUDA 設(shè)備 0 和 CUDA 設(shè)備 1,并觀察到新創(chuàng)建的張量隨之分配到相應(yīng)的設(shè)備。

set_default_tensor_type

    torch.set_default_tensor_type 是 PyTorch 庫中的一個函數(shù),用于設(shè)置默認(rèn)的 torch.Tensor 類型。特別地,這個設(shè)置影響浮點(diǎn)張量的默認(rèn)類型,也用于 torch.tensor() 函數(shù)中的類型推斷。

函數(shù)作用

  • 目的: 設(shè)置默認(rèn)的 torch.Tensor 類型,特別是浮點(diǎn)張量的類型。這對于控制新創(chuàng)建的張量的數(shù)據(jù)類型非常重要。
  • 使用場景: 當(dāng)你希望改變 PyTorch 中新創(chuàng)建的浮點(diǎn)張量的默認(rèn)類型時,這個函數(shù)非常有用。例如,如果你想要默認(rèn)所有新的浮點(diǎn)張量都是雙精度(torch.float64),就可以使用這個函數(shù)來實(shí)現(xiàn)。

使用注意點(diǎn)

  • 默認(rèn)類型: 初始情況下,PyTorch 的默認(rèn)浮點(diǎn)張量類型是 torch.FloatTensor,即 torch.float32。
  • 類型設(shè)置: 該函數(shù)接受一個類型或其名稱作為參數(shù),用于設(shè)置默認(rèn)的張量類型。
  • 類型推斷影響: 設(shè)置的默認(rèn)類型也會用于 torch.tensor() 中的類型推斷。例如,如果設(shè)置了 torch.DoubleTensor(即 torch.float64),那么在使用 torch.tensor() 創(chuàng)建張量時,沒有顯式指定類型的浮點(diǎn)數(shù)將默認(rèn)為 torch.float64。

使用方法和示例

以下是 torch.set_default_tensor_type 的使用示例:

  1. import torch
  2. # 檢查一個新創(chuàng)建的浮點(diǎn)張量的默認(rèn)類型
  3. print(torch.tensor([1.2, 3]).dtype) # 輸出: torch.float32
  4. # 將默認(rèn)的浮點(diǎn)張量類型設(shè)置為雙精度浮點(diǎn)類型(torch.float64)
  5. torch.set_default_tensor_type(torch.DoubleTensor)
  6. # 再次檢查新創(chuàng)建的浮點(diǎn)張量的類型
  7. print(torch.tensor([1.2, 3]).dtype) # 輸出: torch.float64

        在這個示例中,我們首先檢查了新創(chuàng)建的浮點(diǎn)張量的默認(rèn)類型是 torch.float32。然后,我們將默認(rèn)的浮點(diǎn)張量類型設(shè)置為 torch.DoubleTensor(即 torch.float64),并觀察到新創(chuàng)建的浮點(diǎn)張量類型隨之變?yōu)?torch.float64。

numel

    torch.numel 是 PyTorch 庫中的一個函數(shù),用于返回輸入張量中的元素總數(shù)。這個函數(shù)在處理張量時非常有用,特別是當(dāng)你需要了解張量的大小或者在進(jìn)行形狀變換操作之前。

函數(shù)作用

  • 目的: 計算并返回一個張量中的元素總數(shù)。
  • 使用場景: 當(dāng)需要知道張量中包含多少個元素時,比如在分配內(nèi)存、調(diào)整張量形狀或在進(jìn)行某些特定的數(shù)學(xué)運(yùn)算之前,了解張量的總元素數(shù)量是非常重要的。

使用方法和示例

以下是 torch.numel 的使用示例:

  1. import torch
  2. # 創(chuàng)建一個隨機(jī)張量,形狀為1x2x3x4x5
  3. a = torch.randn(1, 2, 3, 4, 5)
  4. # 使用torch.numel獲取張量a的元素總數(shù)
  5. print(torch.numel(a)) # 輸出: 120
  6. # 創(chuàng)建一個4x4的零張量
  7. b = torch.zeros(4, 4)
  8. # 使用torch.numel獲取張量b的元素總數(shù)
  9. print(torch.numel(b)) # 輸出: 16

        在這個示例中,我們首先創(chuàng)建了一個形狀為 1x2x3x4x5 的張量 a,它有 120 個元素。隨后,我們創(chuàng)建了一個 4x4 的零張量 b,它有 16 個元素。使用 torch.numel 函數(shù),我們能夠快速得到這些張量中的元素數(shù)量。 

set_printoptions

    torch.set_printoptions 是 PyTorch 庫中的一個函數(shù),用于設(shè)置張量打印時的格式選項。這個函數(shù)借鑒了 NumPy 的打印選項,使得在控制臺或日志文件中輸出的張量更易于閱讀和理解。

函數(shù)作用

  • 目的: 自定義張量在打印時的顯示格式,包括浮點(diǎn)數(shù)精度、元素的顯示數(shù)量、每行的寬度等。
  • 使用場景: 當(dāng)你需要在控制臺輸出或記錄較大張量時,適當(dāng)設(shè)置打印選項可以使輸出更加清晰和有助于理解。這在調(diào)試和展示數(shù)據(jù)時特別有用。

參數(shù)詳解

  • precision: 浮點(diǎn)數(shù)輸出的數(shù)字精度(默認(rèn)值為4)。
  • threshold: 觸發(fā)摘要顯示而非完整顯示的元素總數(shù)(默認(rèn)值為1000)。
  • edgeitems: 摘要顯示時,在每個維度的開始和結(jié)束顯示的元素數(shù)量(默認(rèn)值為3)。
  • linewidth: 每行的字符數(shù),用于插入換行符(默認(rèn)值為80)。超過閾值的矩陣會忽略這個參數(shù)。
  • profile: 美化打印的默認(rèn)設(shè)置??梢允褂蒙鲜鋈魏芜x項進(jìn)行覆蓋(可選值包括'default', 'short', 'full')。
  • sci_mode: 啟用(True)或禁用(False)科學(xué)計數(shù)法。如果指定為None(默認(rèn)),則值由內(nèi)部的格式化設(shè)置決定。

使用方法和示例

以下是 torch.set_printoptions 的使用示例:

  1. import torch
  2. # 限制元素的精度
  3. torch.set_printoptions(precision=2)
  4. print(torch.tensor([1.12345])) # 輸出: tensor([1.12])
  5. # 限制顯示的元素數(shù)量
  6. torch.set_printoptions(threshold=5)
  7. print(torch.arange(10)) # 輸出: tensor([0, 1, 2, ..., 7, 8, 9])
  8. # 恢復(fù)默認(rèn)設(shè)置
  9. torch.set_printoptions(profile='default')
  10. print(torch.tensor([1.12345])) # 輸出: tensor([1.1235])
  11. print(torch.arange(10)) # 輸出: tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

        在這個示例中,我們首先設(shè)置了浮點(diǎn)數(shù)的精度,然后設(shè)置了觸發(fā)摘要顯示的元素數(shù)量閾值。最后,我們使用 'default' 配置文件恢復(fù)了默認(rèn)的打印設(shè)置。 

set_flush_denormal

    torch.set_flush_denormal 是 PyTorch 庫中的一個函數(shù),用于在 CPU 上禁用非正規(guī)化(denormal)浮點(diǎn)數(shù)。這個功能主要用于優(yōu)化性能,因為處理非正規(guī)化浮點(diǎn)數(shù)在某些情況下可能會導(dǎo)致顯著的性能下降。

函數(shù)作用

  • 目的: 禁用 CPU 上的非正規(guī)化浮點(diǎn)數(shù)。非正規(guī)化數(shù)是非常接近于零的小數(shù),在浮點(diǎn)數(shù)運(yùn)算中它們可能導(dǎo)致性能問題。
  • 使用場景: 當(dāng)你遇到由于處理非正規(guī)化浮點(diǎn)數(shù)而導(dǎo)致的性能問題時,使用這個函數(shù)可以幫助提升性能。它特別適用于深度學(xué)習(xí)或高性能計算場景。

使用注意點(diǎn)

  • 系統(tǒng)支持: torch.set_flush_denormal 僅在支持 SSE3 指令集的 x86 架構(gòu)上受支持。
  • 返回值: 如果系統(tǒng)支持刷新非正規(guī)化數(shù)并且成功配置了刷新非正規(guī)化模式,則返回 True。

使用方法和示例

以下是 torch.set_flush_denormal 的使用示例:

  1. import torch
  2. # 啟用刷新非正規(guī)化模式
  3. result = torch.set_flush_denormal(True)
  4. print(result) # 輸出: True,表示設(shè)置成功
  5. # 創(chuàng)建一個非常小的浮點(diǎn)數(shù)張量,看其如何被處理
  6. print(torch.tensor([1e-323], dtype=torch.float64)) # 輸出: tensor([ 0.], dtype=torch.float64)
  7. # 禁用刷新非正規(guī)化模式
  8. result = torch.set_flush_denormal(False)
  9. print(result) # 輸出: True,表示設(shè)置成功
  10. # 再次創(chuàng)建同樣的浮點(diǎn)數(shù)張量,看其如何被處理
  11. print(torch.tensor([1e-323], dtype=torch.float64)) # 輸出: tensor([9.88131e-324], dtype=torch.float64)

         在這個示例中,我們首先啟用了刷新非正規(guī)化模式,然后創(chuàng)建了一個非常小的浮點(diǎn)數(shù)張量。由于刷新非正規(guī)化模式處于啟用狀態(tài),這個非常小的數(shù)被處理為零。隨后,我們禁用了該模式,再次創(chuàng)建同樣的張量時,這次這個小數(shù)沒有被處理為零。

總結(jié)

        這篇博客全面而詳細(xì)地介紹了 PyTorch 框架及其核心組件 torch 的多種關(guān)鍵功能和使用場景。從基本的多維張量數(shù)據(jù)結(jié)構(gòu)和數(shù)學(xué)運(yùn)算,到高級功能如序列化、CUDA 支持以及各種實(shí)用工具,每個方面都進(jìn)行了深入的探討。特別地,博客還詳細(xì)演示了一系列 torch 相關(guān)函數(shù)(如 is_tensor, is_storage, is_complex, is_conj, is_floating_point, is_nonzero, set_default_dtype, get_default_dtype, set_default_device, set_default_tensor_type, numel, set_printoptions, set_flush_denormal)的用途、應(yīng)用場景和示例使用方法。通過這些內(nèi)容,讀者可以獲得對 PyTorch 功能的全面理解,明白如何在實(shí)際項目中有效地應(yīng)用這些工具,以優(yōu)化深度學(xué)習(xí)和科學(xué)計算的流程。 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多