最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyTorch使用教程之Tensor包詳解

 更新時間:2025年01月19日 10:57:46   作者:深圖智能  
這篇文章介紹了PyTorch中的張量(Tensor)數(shù)據(jù)結(jié)構(gòu),包括張量的數(shù)據(jù)類型、初始化、常用操作、屬性等,張量是PyTorch框架中的核心數(shù)據(jù)結(jié)構(gòu),支持多種數(shù)據(jù)類型,可以通過工廠函數(shù)構(gòu)造張量,并提供了豐富的操作和屬性,感興趣的朋友跟隨小編一起看看吧

1、張量Tensor

張量(Tensor)是PyTorch深度學習框架中的核心數(shù)據(jù)結(jié)構(gòu),在PyTorch軟件框架中,幾乎所有的數(shù)據(jù)計算和信息流都是以Tensor的形式在表達。官方給出的定義是:

一個 torch.Tensor是一個包含單個數(shù)據(jù)類型元素的多維矩陣
關(guān)鍵詞

  • 單個數(shù)據(jù)類型:在一個張量數(shù)據(jù)結(jié)構(gòu)內(nèi),只會包含一種數(shù)據(jù)類型。
  • 多維矩陣:簡單來說張量就是為了高維矩陣而創(chuàng)建的,常用的NCHW格式矩陣,就是4維矩陣。

學習Tensor這個包的時候,主要是關(guān)注張量的數(shù)據(jù)類型、張量的一些基本操作。

2、數(shù)據(jù)類型

為了支持各種精度的訓練、推理,Tensor支持的數(shù)據(jù)類型繁多。這里,僅列出在做計算機視覺相關(guān)的常用數(shù)據(jù)類型。

數(shù)據(jù)類型dtype
32 位浮點數(shù)torch.float32 或 torch.float
64 位浮點數(shù)torch.float64 或 torch.double
16 位浮點數(shù)1torch.float16 或 torch.half
16 位浮點數(shù) 2torch.bfloat16
8 位整數(shù)(無符號)torch.uint8
32 位整數(shù)(無符號)torch.uint32
8 位整數(shù)(帶符號)torch.int8
32 位整數(shù)(帶符號)torch.int32 或 torch.int
布爾值torch.bool
量化 8 位整數(shù)(無符號)torch.quint8
量化 8 位整數(shù)(帶符號)ttorch.qint8
量化 32 位整數(shù)(帶符號)torch.qint32
量化 4 位整數(shù)(無符號)torch.quint4x2

要構(gòu)造張量,建議使用工廠函數(shù),例如 torch.empty(),其中使用 dtype 參數(shù)。 torch.Tensor 構(gòu)造函數(shù)是默認張量類型 (torch.FloatTensor) 的別名。也就是說,在構(gòu)造張量時,不傳入數(shù)據(jù)類型參數(shù),默認就是32位浮點數(shù)。

3、初始化(構(gòu)造張量)

可以使用 torch.tensor() 構(gòu)造函數(shù)從 Python list 或序列構(gòu)造張量。

>>> torch.tensor([[1., -1.], [1., -1.]])
tensor([[ 1.0000, -1.0000],
        [ 1.0000, -1.0000]])
>>> torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
tensor([[ 1,  2,  3],
        [ 4,  5,  6]])

有幾個注意點:

  • torch.tensor() 始終復制 data。也就是說使用list或者序列構(gòu)造張量時,均為以深拷貝的方式創(chuàng)建。
  • 可以通過將 torch.dtype 和/或 torch.device 傳遞給構(gòu)造函數(shù)或張量創(chuàng)建操作來構(gòu)造特定數(shù)據(jù)類型的張量。例如:
>>> torch.zeros([2, 4], dtype=torch.int32)
tensor([[ 0,  0,  0,  0],
        [ 0,  0,  0,  0]], dtype=torch.int32)
>>> cuda0 = torch.device('cuda:0')
>>> torch.ones([2, 4], dtype=torch.float64, device=cuda0)
tensor([[ 1.0000,  1.0000,  1.0000,  1.0000],
        [ 1.0000,  1.0000,  1.0000,  1.0000]], dtype=torch.float64, device='cuda:0')

更多的張量構(gòu)造方式可以參考我的上一篇博文《PyTorch使用教程(2)-torch包》。

4、常用操作

張量支持索引、切片、連接、修改等操作,也支持大量的數(shù)學計算操作。常見的操作可以參考我的上一篇博文《PyTorch使用教程(2)-torch包》。這里,僅講述張量操作需注意的幾個點。

僅對一個單個值的張量的使用進行說明:
使用 torch.Tensor.item() 從包含單個值的張量中獲取 Python 數(shù)字。

>>> x = torch.tensor([[1]])
>>> x
tensor([[ 1]])
>>> x.item()
1
>>> x = torch.tensor(2.5)
>>> x
tensor(2.5000)
>>> x.item()
2.5

操作張量的方法如果用下劃線后綴標記,則表示該操作時inplace操作:操作后的張量和輸入張量共享一個Storage。使用inplace操作,可以減小GPU緩存的使用。如torch.FloatTensor.abs_() 在原地計算絕對值并返回修改后的張量,而 torch.FloatTensor.abs() 在新張量中計算結(jié)果。

>>> x = torch.tensor([[1., -1.], [1., -1.]])
>>> x2=x.abs_()
>>> x.storage
<bound method Tensor.storage of tensor([[1., 1.],
        [1., 1.]])>
>>> x2.storage
<bound method Tensor.storage of tensor([[1., 1.],
        [1., 1.]])>

5、常用屬性

5.1 存儲(storage)

每個張量都與一個關(guān)聯(lián)的 torch.Storage,它保存其數(shù)據(jù),可以理解為數(shù)據(jù)緩地址。

>>> t = torch.rand((2,2))
>>> t.storage 
<bound method Tensor.storage of tensor([[0.3267, 0.8759],
        [0.9612, 0.1931]])>

5.2 形狀(shape)

可以使用shape屬性或者size()方法查看張量在每一維的長度。

>>> x = torch.randn((3,3))
>>> x.shape
torch.Size([3, 3])
>>> x.size()
torch.Size([3, 3])

可以通過torch的reshape方法或者張量本身的View()方法進行形狀的改變。

>>> t = torch.rand((3, 3))
>>> t
tensor([[0.8397, 0.6708, 0.8727],
        [0.8286, 0.3910, 0.9540],
        [0.8672, 0.4297, 0.1825]])
>>> m=t.view(1,9) 
>>> m
tensor([[0.8397, 0.6708, 0.8727, 0.8286, 0.3910, 0.9540, 0.8672, 0.4297, 0.1825]])

5.3 數(shù)據(jù)類型(dtype)

張量的數(shù)據(jù)類型(如torch.float32, torch.int64等)。

>>> t = torch.rand((3, 3))
>>> t.dtype
torch.float32

5.4 設(shè)備(device)

張量所在的設(shè)備(如CPU或GPU)。

>>> m = torch.rand((3, 3))
>>> m.device
device(type='cpu')

如需要在CPU和GPU之間進行張量的移動,可以使用張量的to()方法。

將張量移動到GPU(如果可用)。

>>> m=torch.rand((2,2))
>>> m.device
device(type='cpu')
>>> m.to('cuda')
tensor([[0.5340, 0.0079],
        [0.2983, 0.5315]], device='cuda:0')

將張量移動至CPU

>>> m.to('cpu')
tensor([[0.5340, 0.0079],
        [0.2983, 0.5315]])

6、小結(jié)下

用一個表格,匯總下PyTorch中tensor(張量)的常用數(shù)據(jù)結(jié)構(gòu)及其相關(guān)屬性:

屬性/方法描述示例代碼
維度(Dimension)張量的維度,標量為0維,向量為1維,矩陣為2維,以此類推x = torch.tensor([[1, 2], [3, 4]]) (2維張量)
形狀(Shape)張量在各維度上的大小,返回一個元組print(x.shape) 輸出: torch.Size([2, 2])
大?。⊿ize)張量中元素的總數(shù),或各維度大小的元組(通過size()方法)print(x.size()) 輸出: torch.Size([2, 2])print(x.numel()) 輸出: 4
數(shù)據(jù)類型(Dtype)張量中元素的數(shù)據(jù)類型x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32);print(x.dtype) 輸出: torch.float32
設(shè)備(Device)張量所在的設(shè)備(CPU或GPU)x = x.to('cuda')(如果GPU可用);print(x.device) 輸出: cuda:0(或類似的)
是否要求梯度(Requires Grad)一個布爾值,指示是否需要對該張量進行梯度計算x.requires_grad_(True);print(x.requires_grad) 輸出: True
梯度(Grad)如果requires_grad=True,則存儲該張量的梯度y = x.sum()y.backward();print(x.grad) 輸出張量的梯度
數(shù)據(jù)(Data)張量中存儲的實際數(shù)據(jù)x = torch.tensor([[1, 2], [3, 4]])print(x) 輸出張量的數(shù)據(jù)
索引與切片使用整數(shù)、切片或布爾索引來訪問或修改張量的元素x[0, 1] 訪問第1行第2列的元素;x[:, 0] 訪問第1列的所有元素
視圖操作.view().reshape()改變張量的形狀,但不改變其數(shù)據(jù)x_reshaped = x.view(4)x_reshaped = x.reshape(4) 將2x2張量變?yōu)?x4張量
數(shù)學運算支持加法、減法、乘法、除法、冪運算等y = x + 2;z = x.pow(2)
統(tǒng)計函數(shù)如求和(.sum())、均值(.mean())、最大值(.max())等sum_val = x.sum();mean_val = x.mean()
類型轉(zhuǎn)換轉(zhuǎn)換為其他數(shù)據(jù)類型或設(shè)備上的張量x_float64 = x.to(dtype=torch.float64);x_cpu = x.to('cpu')

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

相關(guān)文章

  • python 常見數(shù)學公式函數(shù)使用詳解(最新推薦)

    python 常見數(shù)學公式函數(shù)使用詳解(最新推薦)

    文章介紹了Python的數(shù)學計算工具,涵蓋內(nèi)置函數(shù)、math/cmath標準庫及numpy/scipy/sympy第三方庫,支持從基礎(chǔ)算術(shù)到復雜數(shù)學運算(如符號計算、積分、矩陣操作)的多樣化需求,感興趣的朋友一起看看吧
    2025-06-06
  • Python字符串的全排列算法實例詳解

    Python字符串的全排列算法實例詳解

    這篇文章主要介紹了Python字符串的全排列算法,結(jié)合實例形式較為詳細的總結(jié)分析了Python字符串全排列的常見操作技巧,需要的朋友可以參考下
    2019-01-01
  • pytorch自動求梯度autograd的實現(xiàn)

    pytorch自動求梯度autograd的實現(xiàn)

    autograd是一個自動微分引擎,它可以自動計算張量的梯度,本文主要介紹了pytorch自動求梯度autograd的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • Python matplotlib安裝和使用的完整教程

    Python matplotlib安裝和使用的完整教程

    Python Matplotlib是一個強大的數(shù)據(jù)可視化庫,它允許用戶創(chuàng)建各種類型的靜態(tài)、動態(tài)圖表和圖形,Matplotlib基于NumPy和Pandas等科學計算庫,提供了豐富的繪圖選項,本文介紹了Python matplotlib安裝和使用的完整教程,需要的朋友可以參考下
    2024-07-07
  • 解決python有時候import不了當前的包問題

    解決python有時候import不了當前的包問題

    今天小編就為大家分享一篇解決python有時候import不了當前的包問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • OpenCV圖像旋轉(zhuǎn)(單點旋轉(zhuǎn)與圖片旋轉(zhuǎn))的實現(xiàn)

    OpenCV圖像旋轉(zhuǎn)(單點旋轉(zhuǎn)與圖片旋轉(zhuǎn))的實現(xiàn)

    本文主要介紹了OpenCV圖像旋轉(zhuǎn)(單點旋轉(zhuǎn)與圖片旋轉(zhuǎn))的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-06-06
  • Django 模型類(models.py)的定義詳解

    Django 模型類(models.py)的定義詳解

    這篇文章主要介紹了Django 模型類(models.py)的定義詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python中if有多個條件處理方法

    Python中if有多個條件處理方法

    在本篇文章里小編給大家整理的是一篇關(guān)于Python中if有多個條件處理方法,需要的朋友們可以學習參考下。
    2020-02-02
  • python 異步async庫的使用說明

    python 異步async庫的使用說明

    這篇文章主要介紹了python 異步async庫的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 微信跳一跳游戲python腳本

    微信跳一跳游戲python腳本

    這篇文章主要為大家詳細介紹了微信跳一跳游戲python腳本,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

察哈| 阜平县| 正阳县| 肥城市| 荥阳市| 晴隆县| 获嘉县| 佛坪县| 石林| 舞钢市| 丹棱县| 元朗区| 东乌珠穆沁旗| 万山特区| 农安县| 寿宁县| 长汀县| 平果县| 信宜市| 鹿邑县| 宜黄县| 屏南县| 辽阳市| 科技| 泾阳县| 小金县| 龙游县| 原阳县| 高阳县| 蓬溪县| 云安县| 东港市| 南丹县| 卢湾区| 灵川县| 襄垣县| 陆丰市| 北宁市| 荣昌县| 右玉县| 葵青区|