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

Python之維度dim的定義及其理解使用方式

 更新時間:2023年02月02日 09:32:39   作者:靜靜喜歡大白  
這篇文章主要介紹了Python之維度dim的定義及其理解使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、dim的定義

TensorFlow對張量的階、維度、形狀有著明確的定義,而在pytorh中對其的定義卻模糊不清,僅僅有一個torch.size()的函數(shù)來查看張量的大小(我理解的這個大小指的就是TensorFlow對張量的形狀描述,也和numpy的.shape類似)。

所以,首先要搞清楚如何看一個張量的形狀。

import torch
z = torch.ones(2,3,4)
print(z)
print(z.size())
print(z.size(0))
print(z.size(1))
print(z.size(2))

以上代碼的控制臺輸出為:

tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],
 
        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]])
torch.Size([2, 3, 4])
2
3
4

可見,我們成功創(chuàng)建了一個(2,3,4)大小的張量,那么我們?nèi)斯?yīng)該怎么辨別一個張量的大小呢?

為了直觀,我把這個張量的中括號調(diào)整一個位置:

[
    [
         [1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]
    ],
 
    [
         [1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]
    ]
]

我們可以看到:

  • 第一層(最外層)中括號里面包含了兩個中括號(以逗號進(jìn)行分割),這就是(2,3,4)中的2
  • 第二層中括號里面包含了三個中括號(以逗號進(jìn)行分割),這就是(2,3,4)中的3
  • 第三層中括號里面包含了四個數(shù)(以逗號進(jìn)行分割),這就是(2,3,4)中的4

結(jié)論:pytorch中的tensor維度可以通過第一個數(shù)前面的中括號數(shù)量來判斷,有幾個中括號維度就是多少。拿到一個維度很高的向量,將最外層的中括號去掉,數(shù)最外層逗號的個數(shù),逗號個數(shù)加一就是最高維度的維數(shù),如此循環(huán),直到全部解析完畢。

我們還看到:

z.size(0) = 2,z.size(1) = 3,z.size(2) = 4

第0維度為2,第1維度為3,第2維度為4,即維度的標(biāo)號是以0開始的

二、dim 的理解

網(wǎng)上很多對dim的理解,比如,dim=0,表示的是行,函數(shù)的意思就是不要行這一維度,保留列巴拉巴拉之類的,個人覺得不好理解。

比如下圖博主的理解

那我的理解就是:

控制變量法大家知道嗎??或者消融實驗?就是幾個方法或者實驗的比較,保持只有一個因素是可變的,其他都是一致的,就是控制變量法,論文術(shù)語也叫消融實驗。

所以,dim的使用也是這樣,只有dim指定的維度是可變的,其他都是固定不變的

  • dim = 0,列不變(按列-將當(dāng)前列所有行數(shù)據(jù)-計算),指定的是行,那就是行變,理解成:針對每一列中,所有行之間的數(shù)據(jù)比較或者求和等操作,是每一行的比較,因為行是可變的。
  • dim = 1,行不變(按行-將當(dāng)前行所有列數(shù)據(jù)-計算),指定的是列,那就是列變,理解成:針對每一行中,所有列之間的數(shù)據(jù)比較或者求和等操作,是每一行的比較,因為行是可變的。

三、舉例

torch.argmax()  

  •  得到最大值的序號索引
  • dim=0保留列維度,不要行了,保留列的size就可以了
  • dim=1保留行維度,不要列了,保留行的size就可以了
a = torch.rand((3,4))
print(a)
b = torch.argmax(a, dim=1) ##行不變,指定列,列之間的比較,對下面每列數(shù)值進(jìn)行比較,將最大值對應(yīng)序號存下,比如下面第一列中第一個值最大,為0,第二列中第二個是最大值,為1,第三列同
print(b)
>>tensor([[0.8338, 0.6953, 0.7558, 0.5803],
        [0.2105, 0.7638, 0.0912, 0.3341],
        [0.5585, 0.8019, 0.6590, 0.2268]])
>>tensor([0, 1, 1])

說明:dim=1,指定列,也就是行不變,列之間的比較,所以原來的a有三行,最后argmax()出來的應(yīng)該也是三個值,第一行的時候,同一列之間比較,最大值是0.8338,索引是0,同理,第二行,最大值的索引是1……

sum()

求和

a = t.arange(0,6).view(2,3)
a
>>tensor([[0, 1, 2],
        [3, 4, 5]])
a.sum()
a.sum(dim=0) #列不變,指定行,行是可變的,對每一列中的所有行之間的數(shù)值進(jìn)行求和,比如這個例子中,第一列0+3,第二列1+4,第三列2+5
a.sum(dim=1) #行不變,指定列,列是可變的,對每一行中的所有列之間的數(shù)值進(jìn)行求和,比如這個例子中,第一行0+1+2,第二行3+4+5
>>tensor(15.)
>>tensor([3., 5., 7.])
>>tensor([ 3., 12.])

說明:dim=0,指定行,行是可變的,列是不變,所以就是同一列中,每一個行的比較,所以a.sum(dim = 0),第一列的和就是3,第二列的和就是5,第三列的和就是7.

同理,a.sum(dim=1),指定列,列是可變的,行是不變的,所以就是同一列之間的比較或者操作,所以第一行的求和是3,第二行的求和是12

cumsum()

累加

a = t.arange(0,6).view(2,3)
a
>>tensor([[0, 1, 2],
        [3, 4, 5]])
a.cumsum(dim=0)  # 指定行,列不變,行變,從第一行到最后一行的累加
>>tensor([[0, 1, 2],
        [3, 5, 7]])
        
a.cumsum(dim=1) # 指定列,行不變,列變,從第一列到最后一列的累加
>>tensor([[ 0,  1,  3],
        [ 3,  7, 12]])

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用Python腳本生成Android SALT擾碼的方法

    用Python腳本生成Android SALT擾碼的方法

    發(fā)布Android 有償應(yīng)用時需要隨機生成 SALT 擾碼夾在文件中,以下是 Python腳本(當(dāng)然你選擇 C/Java/SHELL/Perl 或別的都行)
    2013-09-09
  • Python 控制終端輸出文字的實例

    Python 控制終端輸出文字的實例

    今天小編就為大家分享一篇Python 控制終端輸出文字的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python 可愛的大小寫

    Python 可愛的大小寫

    和其他語言一樣,Python為string對象提供了轉(zhuǎn)換大小寫的方法:upper() 和 lower()。還不止這些,Python還為我們提供了首字母大寫,其余小寫的capitalize()方法,以及所有單詞首字母大寫,其余小寫的title()方法。
    2008-09-09
  • Python控制鍵盤鼠標(biāo)pynput的詳細(xì)用法

    Python控制鍵盤鼠標(biāo)pynput的詳細(xì)用法

    這篇文章主要介紹了Python控制鍵盤鼠標(biāo)pynput的詳細(xì)用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 基于Flask框架添加多個AI模型的API并進(jìn)行交互

    基于Flask框架添加多個AI模型的API并進(jìn)行交互

    這篇文章主要介紹了如何基于 Flask 框架開發(fā) AI 模型 API 管理系統(tǒng),允許用戶添加、刪除不同 AI 模型的 API 密鑰,感興趣的可以了解下
    2025-03-03
  • selenium?drag_and_drop不生效的解決辦法

    selenium?drag_and_drop不生效的解決辦法

    本文主要介紹了selenium?drag_and_drop不生效的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python 利用opencv實現(xiàn)圖像網(wǎng)絡(luò)傳輸

    python 利用opencv實現(xiàn)圖像網(wǎng)絡(luò)傳輸

    這篇文章主要介紹了python 如何利用opencv實現(xiàn)圖像網(wǎng)絡(luò)傳輸,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Python多線程編程(五):死鎖的形成

    Python多線程編程(五):死鎖的形成

    這篇文章主要介紹了Python多線程編程(五):死鎖的形成,本文講解了死鎖的概念、死鎖示例、避免死鎖的方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)動態(tài)條形圖的示例詳解

    Python實現(xiàn)動態(tài)條形圖的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Python中的pynimate模塊實現(xiàn)動態(tài)條形圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • python2.7 json 轉(zhuǎn)換日期的處理的示例

    python2.7 json 轉(zhuǎn)換日期的處理的示例

    這篇文章主要介紹了python2.7 json 轉(zhuǎn)換日期的處理的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論

双牌县| 甘孜县| 萨嘎县| 搜索| 巨鹿县| 涞水县| 定日县| 黑龙江省| 九江市| 温州市| 卫辉市| 湘潭市| 三明市| 姚安县| 南昌县| 兰坪| 寿阳县| 涞源县| 海宁市| 图木舒克市| 太谷县| 乌拉特后旗| 修文县| 景洪市| 隆林| 普安县| 石柱| 虎林市| 昌乐县| 桐梓县| 广南县| 韩城市| 北海市| 繁峙县| 横峰县| 竹山县| 天水市| 汝南县| 武冈市| 盐山县| 莱阳市|