中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch中的5個非常有用的張量操作分別是什么

發布時間:2021-12-04 18:38:12 來源:億速云 閱讀:164 作者:柒染 欄目:大數據

Pytorch中的5個非常有用的張量操作分別是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

導讀  

雖然也有其他方式可以實現相同的效果,但是這幾個操作可以讓使用更加方便。

PyTorch是一個基于Python的科學包,用于使用一種稱為張量的特殊數據類型執行高級操作。張量是具有規則形狀和相同數據類型的數字、向量、矩陣或多維數組。PyTorch是NumPy包的另一種選擇,它可以在GPU下使用。它也被用作進行深度學習研究的框架。

Pytorch中的5個非常有用的張量操作分別是什么

這5個操作是:

  • expand()
  • permute()
  • tolist()
  • narrow()
  • where()
 

1. expand()

將現有張量沿著值為1的維度擴展到新的維度。張量可以同時沿著任意一維或多維展開。如果你不想沿著一個特定的維度展開張量,你可以設置它的參數值為-1。

注意:只能擴展單個維度

# Example 1 - working 
a=torch.tensor([[[1,2,3],[4,5,6]]])
a.size()
>>torch.Size([1, 2, 3])

a.expand(2,2,3)
>>tensor([[[1, 2, 3],
         [4, 5, 6]],

        [[1, 2, 3],
         [4, 5, 6]]])
 

在這個例子中,張量的原始維數是[1,2,3]。它被擴展到[2,2,3]。

 

2. permute()

這個函數返回一個張量的視圖,原始張量的維數根據我們的選擇而改變。例如,如果原來的維數是[1,2,3],我們可以將它改為[3,2,1]。該函數以所需的維數順序作為參數。

# Example 1 - working
a=torch.tensor([[[1,2,3],[4,5,6]]])
a.size()
>>torch.Size([1, 2, 3])

a.permute(2,1,0).size()
>>torch.Size([3, 2, 1])

a.permute(2,1,0)
>>tensor([[[1],
         [4]],

        [[2],
         [5]],

        [[3],
         [6]]])
 

在這個例子中,原始張量的維度是[1,2,3]。使用permuting,我將順序設置為(2,1,0),這意味著新的維度應該是[3,2,1]。如圖所示,張量的新視圖重新排列了數字,使得張量的維度為[3,2,1]。

當我們想要對不同維數的張量進行重新排序,或者用不同階數的矩陣進行矩陣乘法時,可以使用這個函數。

 

3. tolist()

這個函數以Python數字、列表或嵌套列表的形式返回張量。在此之后,我們可以對它執行任何python邏輯和操作。

# Example 1 - working
a=torch.tensor([[1,2,3],[4,5,6]])
a.tolist()
>> [[1, 2, 3], [4, 5, 6]]
 

在這個例子中,張量以嵌套列表的形式返回。

 

4. narrow()

這個函數返回一個新的張量,這個張量是原來張量的縮小版。這個函數的參數是輸入張量、要縮小的維數、起始索引和新張量沿該維數的長度。它返回從索引start到索引(start+length-1)中的元素。

# Example 1 - working
a=torch.tensor([[1,2,3,4],[5,6,7,8],[9,10,11,12],[14,15,16,17]])
torch.narrow(a,1,2,2)
>> tensor([[ 3,  4],
        [ 7,  8],
        [11, 12],
        [16, 17]])
 

在這個例子中,張量要沿著第2維,也就是最里面的維度縮小。它接受列表中的元素,從索引2開始,到索引3(=2+2 -1,即start+length-1)。

Narrow()的工作原理類似于高級索引。例如,在一個2D張量中,使用[:,0:5]選擇列0到5中的所有行。同樣的,可以使用torch.narrow(1,0,5)。然而,在高維張量中,對于每個維度都使用range操作是很麻煩的。使用narrow()可以更快更方便地實現這一點。

 

5. where()

這個函數返回一個新的張量,其值在每個索引處都根據給定條件改變。這個函數的參數有:條件,第一個張量和第二個張量。在每個張量的值上檢查條件(在條件中使用),如果為真,就用第一個張量中相同位置的值代替,如果為假,就用第二個張量中相同位置的值代替。

# Example 1 - working
a=torch.tensor([[[1,2,3],[4,5,6]]]).to(torch.float32)
b=torch.zeros(1,2,3)
torch.where(a%2==0,b,a)
>>tensor([[[1., 0., 3.],
         [0., 5., 0.]]])
 

這里,它檢查張量a的值是否是偶數。如果是,則用張量b中的值替換,b中的值都是0,否則還是和原來一樣。

此函數可用于設定閾值。如果張量中的值大于或小于某一數值,它們可以很容易地被替換。

關于Pytorch中的5個非常有用的張量操作分別是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

包头市| 连城县| 罗定市| 涡阳县| 镇雄县| 宽甸| 临洮县| 扎鲁特旗| 黑龙江省| 崇阳县| 延津县| 汉沽区| 防城港市| 莒南县| 贵南县| 云安县| 海城市| 中宁县| 偃师市| 错那县| 阿荣旗| 东阿县| 石阡县| 景宁| 东辽县| 新乡县| 元谋县| 景洪市| 麦盖提县| 铁岭市| 敖汉旗| 逊克县| 新绛县| 阿合奇县| 古交市| 涿鹿县| 长治县| 台东县| 宜良县| 九江县| 北京市|