欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyTorch使用教程中的torch包詳解

 更新時間:2025年01月19日 10:57:12   作者:深圖智能  
文章介紹了PyTorch框架中torch包的基礎(chǔ)組件,包括張量的創(chuàng)建和基本操作、張量的保存和加載、隨機(jī)數(shù)生成以及張量的基礎(chǔ)數(shù)學(xué)運(yùn)算,感興趣的朋友跟隨小編一起看看吧

1、簡介

torch包是PyTorch框架最外層的包,主要是包含了張量的創(chuàng)建和基本操作、隨機(jī)數(shù)生成器、序列化、局部梯度操作的上下文管理器等等,內(nèi)容很多。我們基礎(chǔ)學(xué)習(xí)的時候,只有關(guān)注張量的創(chuàng)建、序列化,隨機(jī)數(shù)、張量的數(shù)學(xué)數(shù)學(xué)計算等常用的點(diǎn)即可。

2、什么是張量

在PyTorch中,張量(Tensor)是一個核心概念,它是深度學(xué)習(xí)和科學(xué)計算的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。在PyTorch的整個計算過程中,所有的數(shù)據(jù)結(jié)構(gòu)都是以張量的形式表現(xiàn)。例如輸入的圖像、標(biāo)簽,輸出的結(jié)構(gòu)等,最終都是以張量的形式進(jìn)入PyTorch的計算圖。

  • 定義:張量是一個多維數(shù)組,可以看作是標(biāo)量、向量、矩陣的高維擴(kuò)展。
  • 性質(zhì):
    • 張量具有任意維度,可以是0維(標(biāo)量)、1維(向量)、2維(矩陣)或更高維度。
    • 張量支持各種數(shù)學(xué)運(yùn)算,包括加法、乘法、卷積等,這些運(yùn)算可以高效地在CPU或GPU上執(zhí)行。
    • 張量可以跟蹤計算圖,并通過反向傳播計算梯度,這對于深度學(xué)習(xí)中的優(yōu)化任務(wù)至關(guān)重要。
  • 張量的屬性:
    • 形狀(shape):張量的形狀定義了其維度和每個維度上的大小,如形狀為(2, 3, 4)的張量表示具有2個深度、每個深度包含3行4列的3D數(shù)組。
    • 數(shù)據(jù)類型(dtype):張量中的元素具有特定的數(shù)據(jù)類型,如浮點(diǎn)數(shù)(float32、float64)或整數(shù)(int32、int64)等。
    • 設(shè)備(device):張量可以存儲在CPU或GPU上,通過指定設(shè)備參數(shù)可以在不同設(shè)備之間創(chuàng)建或移動張量。

3、torch包的張量操作

3.1 張量創(chuàng)建

1. 創(chuàng)建全0的張量

torch.zeros(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

參數(shù)

size (int…) – 定義輸出張量形狀的整數(shù)序列。可以是可變數(shù)量的參數(shù)或類似列表或元組的集合。

示例

>>> torch.zeros(2, 3)
tensor([[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]])
>>> torch.zeros(5)
tensor([ 0.,  0.,  0.,  0.,  0.])

2. 創(chuàng)建全1的張量

torch.ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

參數(shù)

size (int…) – 定義輸出張量形狀的一系列整數(shù)??梢允强勺償?shù)量的參數(shù)或類似列表或元組的集合。

示例

>>> torch.ones(2, 3)
tensor([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]])
>>> torch.ones(5)
tensor([ 1.,  1.,  1.,  1.,  1.])

3. 創(chuàng)建未初始化數(shù)據(jù)的張量

torch.empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False, memory_format=torch.contiguous_format) → Tensor

參數(shù)

size (int…) – 定義輸出張量形狀的整數(shù)序列??梢允强勺償?shù)量的參數(shù)或集合,如列表或元組。

示例

>>> torch.empty((2,3), dtype=torch.int64)
tensor([[ 9.4064e+13,  2.8000e+01,  9.3493e+13],
        [ 7.5751e+18,  7.1428e+18,  7.5955e+18]])

4. 創(chuàng)建對角線上的元素為1的二維張量

torch.eye(n, m=None, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

參數(shù)

n (int) – 行數(shù)

示例

>>> torch.eye(3)
tensor([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])

5. 創(chuàng)建填充指定值的張量

torch.full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

參數(shù)

  • size (int…) – 定義輸出張量形狀的整數(shù)列表、元組或 torch.Size。
  • fill_value (標(biāo)量) – 用于填充輸出張量的值。

示例

>>> torch.full((2, 3), 3.141592)
tensor([[ 3.1416,  3.1416,  3.1416],
        [ 3.1416,  3.1416,  3.1416]])

6. 從NumPy 數(shù)組創(chuàng)建的張量:from_numpy
示例

>>> a = numpy.array([1, 2, 3])
>>> t = torch.from_numpy(a)
>>> t
tensor([ 1,  2,  3])
>>> t[0] = -1
>>> a
array([-1,  2,  3])

7. 判斷一個Obj是不是張量:is_tensor
示例

>>> x = torch.tensor([1, 2, 3])
>>> torch.is_tensor(x)
True

3.2 張量操作

1. reshape操作

torch.reshape(input, shape) → Tensor

參數(shù)

  • input (Tensor) – 需要形狀改變的張量
  • shape (tuple of int) – 新形狀

示例

>>> a = torch.arange(4.)
>>> torch.reshape(a, (2, 2))
tensor([[ 0.,  1.],
        [ 2.,  3.]])
>>> b = torch.tensor([[0, 1], [2, 3]])
>>> torch.reshape(b, (-1,))
tensor([ 0,  1,  2,  3])

2. cat操作
在給定的維度上連接給定的張量序列。所有張量必須具有相同的形狀(連接維度除外),或者是一個大小為 (0,) 的一維空張量。

torch.cat(tensors, dim=0, *, out=None) → Tensor

參數(shù)

  • tensors (sequence of Tensors) – 任何相同類型的張量 Python 序列。提供的非空張量必須具有相同的形狀,連接維度除外。
  • dim (int, optional) – 連接張量的維度

示例

>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 0)
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 1)
tensor([[ 0.6580, -1.0969, -0.4614,  0.6580, -1.0969, -0.4614,  0.6580,
         -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497, -0.1034, -0.5790,  0.1497, -0.1034,
         -0.5790,  0.1497]])

3. squeeze操作
返回一個張量,其中所有指定維度的 input 大小為 1 的維度都被移除。

torch.squeeze(input, dim=None) → Tensor

示例

>>> x = torch.zeros(2, 1, 2, 1, 2)
>>> x.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x)
>>> y.size()
torch.Size([2, 2, 2])
>>> y = torch.squeeze(x, 0)
>>> y.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x, 1)
>>> y.size()
torch.Size([2, 2, 1, 2])
>>> y = torch.squeeze(x, (1, 2, 3))
torch.Size([2, 2, 2])

4、 隨機(jī)數(shù)

4.1隨機(jī)數(shù)發(fā)生器配置

1. seed操作
將所有設(shè)備上生成隨機(jī)數(shù)的種子設(shè)置為非確定性隨機(jī)數(shù)。返回用于為 RNG 播種的 64 位數(shù)字。
示例

>>> torch.seed()
269874079427000

2. 手動設(shè)置隨機(jī)數(shù)的種子值:manual_seed
設(shè)置所有設(shè)備上生成隨機(jī)數(shù)的種子。
示例

>>> torch.manual_seed(torch.seed())
<torch._C.Generator object at 0x0000022952198270>

4.2 創(chuàng)建隨機(jī)張量

1. torch.rand
創(chuàng)建一個張量,其中填充了來自 [0,1) 區(qū)間上的均勻分布的隨機(jī)數(shù)。

torch.rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor

參數(shù)

size (int…) – 定義輸出張量形狀的整數(shù)序列??梢允强勺償?shù)量的參數(shù)或像列表或元組這樣的集合。

示例

>>> torch.rand(4)
tensor([ 0.5204,  0.2503,  0.3525,  0.5673])
>>> torch.rand(2, 3)
tensor([[ 0.8237,  0.5781,  0.6879],
        [ 0.3816,  0.7249,  0.0998]])

2. randint
創(chuàng)建一個張量,其中填充了在 low(包含)和 high(不包含)之間均勻生成的隨機(jī)整數(shù)。

torch.randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

參數(shù)

  • low (int, 可選) – 從分布中抽取的最低整數(shù)。默認(rèn)值:0。
  • high (int) – 從分布中抽取的最高整數(shù)加 1。
  • size (tuple) – 定義輸出張量形狀的元組。

示例

>>> torch.randint(3, 5, (3,))
tensor([4, 3, 4])
>>> torch.randint(10, (2, 2))
tensor([[0, 2],
        [5, 5]])
>>> torch.randint(3, 10, (2, 2))
tensor([[4, 5],
        [6, 7]])

5、張量的保存和加載

1. 保存
將張量保存到磁盤文件。

torch.save(obj, f, pickle_module=pickle, pickle_protocol=DEFAULT_PROTOCOL, _use_new_zipfile_serialization=True)

PyTorch 的常見約定是使用 .pt 文件擴(kuò)展名保存張量。

參數(shù)

  • obj (對象) – 保存的對象
  • f -保存的命名

示例

>>> x = torch.tensor([0, 1, 2, 3, 4])
>>> torch.save(x, "tensor.pt")

2. 加載
從文件中加載使用 torch.save() 保存的對象。

torch.load(f, map_location=None, pickle_module=pickle, *, weights_only=False, mmap=None, **pickle_load_args)

參數(shù)

  • f 類文件對象(必須實現(xiàn) read()、readline()、tell() 和 seek()),或包含文件名的字符串或 os.PathLike 對象
  • map_location (可選[聯(lián)合[可調(diào)用[[Storage, str], Storage], device, str, Dict[str, str]]]) – 一個函數(shù)、torch.device、字符串或一個字典,指定如何重新映射存儲位置

當(dāng)在包含 GPU 張量文件上調(diào)用torch.load()時,默認(rèn)情況下,這些張量將加載到 GPU??梢哉{(diào)用torch.load(…, map_location=‘cpu’),然后load_state_dict()來避免在加載模型檢查時出現(xiàn) GPU 內(nèi)存激增。

load函數(shù)的用法較多,可以通過pick_module參數(shù)傳入自定義的序列化和反序列化的模塊,可以通過字節(jié)流、文件對象等進(jìn)行張量加載。詳細(xì)的用法可以訪問官網(wǎng)的API文檔進(jìn)行查看:https://pytorch.ac.cn/docs/stable/generated/torch.load.html#torch.load。

示例

# 加載張量至CPU
>>> torch.load("tensors.pt", map_location=torch.device("cpu"), weights_only=True)
# 加載張量至 GPU 1
>>> torch.load(
...     "tensors.pt",
...     map_location=lambda storage, loc: storage.cuda(1),
...     weights_only=True,
... )  # type: ignore[attr-defined]

6、張量的基礎(chǔ)數(shù)學(xué)計算

張量的數(shù)學(xué)計算部分主要是包含了逐元素的線性計算、統(tǒng)計信息計算、比較操作、FFT相關(guān)的頻域操作等等。

1. 絕對值

torch.abs(input, *, out=None) → Tensor

示例

>>> torch.abs(torch.tensor([-1, -2, 3]))
tensor([ 1,  2,  3])

2. 三角函數(shù)相關(guān)
cos、acos、sin、asin、tan、atan、atan2等等。
示例

>>> a = torch.randn(4)
>>> a
tensor([-0.5461,  0.1347, -2.7266, -0.2746])
>>> torch.sin(a)
tensor([-0.5194,  0.1343, -0.4032, -0.2711])

3. 統(tǒng)計信息相關(guān)
和值sum、均值標(biāo)準(zhǔn)差std_mean、中值median、最大值max、最小值min等等。

>>> a = torch.tensor(
...     [[ 0.2035,  1.2959,  1.8101, -0.4644],
...      [ 1.5027, -0.3270,  0.5905,  0.6538],
...      [-1.5745,  1.3330, -0.5596, -0.6548],
...      [ 0.1264, -0.5080,  1.6420,  0.1992]])
>>> torch.std_mean(a, dim=0, keepdim=True)
(tensor([[1.2620, 1.0028, 1.0957, 0.6038]]),
 tensor([[ 0.0645,  0.4485,  0.8707, -0.0665]]))

7、小結(jié)

主要介紹了PyTorch框架中torch包的常用組件,包含張量的創(chuàng)建和基本操作、張量的保存和加載以及隨機(jī)數(shù)、張量的基礎(chǔ)數(shù)學(xué)運(yùn)算等相關(guān)操作。

到此這篇關(guān)于PyTorch使用教程中的torch包詳解的文章就介紹到這了,更多相關(guān)PyTorch torch包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PySpark中RDD的數(shù)據(jù)輸出問題詳解

    PySpark中RDD的數(shù)據(jù)輸出問題詳解

    RDD是 Spark 中最基礎(chǔ)的抽象,它表示了一個可以并行操作的、不可變得、被分區(qū)了的元素集合,這篇文章主要介紹了PySpark中RDD的數(shù)據(jù)輸出詳解,需要的朋友可以參考下
    2023-01-01
  • python使用nntp讀取新聞組內(nèi)容的方法

    python使用nntp讀取新聞組內(nèi)容的方法

    這篇文章主要介紹了python使用nntp讀取新聞組內(nèi)容的方法,實例分析了Python操作nntp讀取新聞組內(nèi)容的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • win10下Python3.6安裝、配置以及pip安裝包教程

    win10下Python3.6安裝、配置以及pip安裝包教程

    下面小編就為大家?guī)硪黄獁in10下Python3.6安裝、配置以及pip安裝包教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 一文詳解如何在Python中從字符串中提取部分內(nèi)容

    一文詳解如何在Python中從字符串中提取部分內(nèi)容

    這篇文章主要介紹了如何在Python中從字符串中提取部分內(nèi)容的相關(guān)資料,包括使用正則表達(dá)式、Pyparsing庫、AST(抽象語法樹)、字符串操作和函數(shù)式編程,每種方法都有其適用場景和優(yōu)缺點(diǎn),需要的朋友可以參考下
    2025-04-04
  • python scrapy腳本報錯問題及解決

    python scrapy腳本報錯問題及解決

    這篇文章主要介紹了python scrapy腳本報錯問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python實現(xiàn)

    Python實現(xiàn)"驗證回文串"的幾種方法

    這篇文章主要介紹了Python實現(xiàn)"驗證回文串"的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python實現(xiàn)樸素貝葉斯的學(xué)習(xí)與分類過程解析

    Python實現(xiàn)樸素貝葉斯的學(xué)習(xí)與分類過程解析

    這篇文章主要介紹了Python實現(xiàn)樸素貝葉斯的學(xué)習(xí)與分類過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python合并多個excel文件的示例

    python合并多個excel文件的示例

    這篇文章主要介紹了python合并多個excel文件的示例,幫助大家提高辦公效率,感興趣的朋友可以了解下
    2020-09-09
  • 比較兩個numpy數(shù)組并實現(xiàn)刪除共有的元素

    比較兩個numpy數(shù)組并實現(xiàn)刪除共有的元素

    這篇文章主要介紹了比較兩個numpy數(shù)組并實現(xiàn)刪除共有的元素,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 最新PyCharm 2021.3.1永久激活碼(親測有效)

    最新PyCharm 2021.3.1永久激活碼(親測有效)

    今天又有朋友反應(yīng)PyCharm2021提示激活碼過期了,下面再為大家分享一個2022年01月08日更新PyCharm2021最新激活碼,需要的朋友可以參考下
    2020-11-11

最新評論