訂閱
糾錯
加入自媒體

討論5種基本和最常用的張量運算

2021-02-16 20:35
磐創AI
關注

討論5種基本和最常用的張量運算

深度學習使我們能夠執行非常復雜的任務。為了有效地執行任務,我們需要一個靈活的工具。由于其簡單性,Pytorch為我們提供了此選項。它使用GPU(圖形處理單元)提供加速的操作。Pytorch是一個高性能的庫,因此它得到了普及。下面的notebook包含一些基本功能,這些功能對于執行張量運算非常有用。這些運算用于多維張量和算術運算。通用運算——逆運算創建運算——復數算術運算——轉置改變運算——添加減少運算——Amax我們將討論這5個基本功能的示例并觀察錯誤。在開始之前,讓我們安裝并導入PyTorch# Windows
# !pip install numpy torch==1.7.0+cpu torchvision==0.8.1+cpu torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
# Import torch and other required modules
import torch

1. 通用運算——逆運算

我們將使用的第一個函數是“反函數”。a = torch.randn(2,3,3)
print(a)
torch.inverse(a)

上面的“ randn”函數創建了一個3X3方陣,最外面具有2個行。然后,“逆”函數取矩陣中各個元素的逆a = torch.rand(4,4)
print(a)
torch.inverse(a)

上面是一個4X4方陣,其中每個元素都使用反函數進行反算。a = torch.rand(4,3)
print(a)
torch.inverse(a)
RuntimeError: A must be batches of square matrices, but they are 3 by 4 matrices

上面給出的第三個示例拋出錯誤。“逆”函數給出矩陣各個元素的逆。該錯誤歸因于矩陣不是正方形的事實。通過更改尺寸,可以獲得正確的結果。逆函數對于在Pytorch神經網絡上執行逆函數非常有用。

2. 創建運算——復數

讓我們使用函數通過創建矢量或矩陣來初始化對張量數據的處理。在這里,我們將使用復數的功能。為了獲得最終的complex64,我們需要輸入float32類型。real = torch.tensor([2,1], dtype=torch.float32)
imag = torch.tensor([2,3], dtype=torch.float32)
a= torch.complex(real, imag)
a.dtype

在下面,我們使用rand函數創建了名為“ real”和“ imag”的張量。使用“復數”函數,我們將兩個張量結合在一起,并形成了具有實數和虛數的單個方程real = torch.rand(2,3)
imag = torch.rand(1,3)
print(real)
print(imag)
x = torch.complex(real, imag,)
print(x)

在下面的示例中,它不是嘗試使用兩個值“ real”和“ imag”數據創建一個復數張量,而是嘗試創建一個復數張量。我們可能會因為缺少單個方括號而看到上述錯誤,而該方括號會給我們所需的結果。real = torch.tensor(2., 4)
imag = torch.tensor(7., 3)
x = torch.complex(real, imag,)
x
TypeError: tensor() takes 1 positional argument but 2 were given

我們可以使用上述函數來創建由實數和虛數數據組成的復數張量。

3. 算術運算——轉置

在這里,我們將使用轉置功能來處理張量數據,從而使我們的操作變得容易。a = torch.rand(2,3,5)
print(a)
torch.transpose(a,1,2)

從最外面的第1行開始,我們已換位了第一行的所有元素。a = torch.rand(2,5)
print(a)
torch.transpose(a, -1, 0)

這里,在上述情況下,我們給出了要轉置的第一維和第二維。TypeError: transpose() received an invalid combination of arguments - got (Tensor), but expected one of:  * (Tensor input, name dim0, name dim1)  * (Tensor input, int dim0, int dim1)

在張量數據上使用轉置功能時,我們還必須傳遞尺寸,以闡明需要轉置哪些尺寸。如果我們使用't'而不是'transpose'函數,那么上面的函數將可以正常工作。當必須轉置張量數據的給定維數,同時指定需要轉置的“ n”維數時,可以使用“轉置”函數。

4. 改變運算——添加

讓我們執行一些算術運算——在張量數據上添加一個函數。a = torch.randn(10)
print(a)
torch.add(a,5)

第二個屬性(在上述情況下為5)應為整數,必須將其添加到張量數據中(在上述情況下)。結果將是兩個的總和。a = torch.rand(5)
b = torch.rand(5)
print(a)
print(b)
torch.add(a,b)

“add”函數計算相同維數的兩個張量數據之和,并給出相同維數的結果。a = torch.rand(10)
b = torch.rand(5)
torch.add(a,b)
RuntimeError: The size of tensor a (10) must match the size of tensor b (5) at non-singleton dimension 0

在張量中執行任何算術運算時,我們需要注意輸入張量的尺寸彼此匹配!癆dd”函數可用于添加任何兩個給定的張量,或添加具有給定數字的張量數據。

5. 歸約運算——Amax

使用某些歸約運算——amax。這些將有助于對張量數據執行統計操作。這里,在下面的示例中,“ amax”函數用于給出每個尺寸中的最大元素,其中“ -1”表示要縮小的尺寸。a = torch.rand(3,2)
print(a)
torch.amax(a, dim = -1)

同樣,在以下情況下,“ amax”函數為每個切片提供張量數據中的最大值。a = torch.rand(5)
print(a)
torch.amax(a, dim=-2)

在以下情況下,amax函數的維數在-1到0之間變化。因此,“ dim”屬性必須在此范圍內。a = torch.tensor([[3,2], [1,2], [4,7],[6,5]])
print(a)
torch.amax(a, dim = 1)
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got -2)

結論

在本文中,我們涵蓋了從創建張量數據到執行算術運算所需的函數。

聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

發表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續

暫無評論

暫無評論

    人工智能 獵頭職位 更多
    掃碼關注公眾號
    OFweek人工智能網
    獲取更多精彩內容
    文章糾錯
    x
    *文字標題:
    *糾錯內容:
    聯系郵箱:
    *驗 證 碼:

    粵公網安備 44030502002758號