1. 程式人生 > >[Pytorch]Pytorch中tensor常用語法

[Pytorch]Pytorch中tensor常用語法

無偏 圖片 包括 分享圖片 位置 sta 元素 返回結果 NPU

原文地址:https://zhuanlan.zhihu.com/p/31494491

上次我總結了在PyTorch中建立隨機數Tensor的多種方法的區別。

這次我把常用的Tensor的數學運算總結到這裏,以防自己在使用PyTorch做實驗時,忘記這些方法應該傳什麽參數。

總結的方法包括:

Tensor求和以及按索引求和:torch.sum() torch.Tensor.indexadd()

Tensor元素乘積:torch.prod(input)

對Tensor求均值、方差、極值:

torch.mean() torch.var()

torch.max() torch.min()

最後還有在NLP領域經常用到的:

求Tensor的平方根倒數、線性插值、雙曲正切

torch.rsqrt(input) torch.lerp(star,end,weight)

torch.tanh(input, out=None)


張量數學運算

元素求和

torch.sum(input) → float

返回輸入向量input中所有元素的和。

參數:

  • input (Tensor) - 輸入張量

例子:

a = torch.randn(1, 3)
a
1.5796 0.4102 -0.2885
[torch.FloatTensor of size 1x3]
torch.sum(a)
1.7013892233371735


torch.sum(input, dim, keepdim=False, out=None)

→ Tensor

返回新的張量,其中包括輸入張量input中指定維度dim中每行的和。

若keepdim值為True,則在輸出張量中,除了被操作的dim維度值降為1,其它維度與輸入張量input相同。否則,dim維度相當於被執行torch.squeeze()維度壓縮操作,導致此維度消失,最終輸出張量會比輸入張量少一個維度。

參數:

  • input (Tensor) - 輸入Tensor
  • dim (int) - 指定維度
  • keepdim (bool) - 輸出張量是否保持與輸入張量有相同數量的維度
  • out (Tensor,optional) - 結果張量

例子:

a = torch.rand(4, 4)
a
0.6117 0.2066 0.1838 0.5582
0.7751 0.5258 0.8898 0.4822
0.8238 0.4217 0.2266 0.2178
0.2121 0.6614 0.4635 0.0368
[torch.FloatTensor of size 4x4]
torch.sum(a, 1, True)
1.5602
2.6728
1.6900
1.3737
[torch.FloatTensor of size 4x1]

元素乘積

torch.prod(input) → float

返回輸入張量input所有元素的乘積。

參數:

  • input (Tensor) - 輸入張量

例子:

a = torch.randn(1, 3)
a
0.3618 1.2095 -0.3403
[torch.FloatTensor of size 1x3]
torch.prod(a)
-0.14892165020372308


torch.prod(input, dim, keepdim=False, out=None) → Tensor

返回新的張量,其中包括輸入張量input中指定維度dim中每行的乘積。

若keepdim值為True,則在輸出張量中,除了被操作的dim維度值降為1,其它維度與輸入張量input相同。否則,dim維度相當於被執行torch.squeeze()維度壓縮操作,導致此維度消失,最終輸出張量會比輸入張量少一個維度。

參數:

  • input (Tensor) - 輸入Tensor
  • dim (int) - 指定維度
  • keepdim (bool) - 輸出張量是否保持與輸入張量有相同數量的維度
  • out (Tensor,optional) - 結果張量

例子:

a = torch.randn(4, 2)
a
-1.8626 -0.5725
-0.6924 -0.8738
-0.2659 0.3540
-0.4500 1.4647
[torch.FloatTensor of size 4x2]
torch.prod(a, 1, True)
1.0664
0.6050
-0.0941
-0.6592
[torch.FloatTensor of size 4x1]

按索引求和

torch.Tensor.indexadd(dim, index, tensor) → Tensor

按索引參數index中所確定的順序,將參數張量tensor中的元素與執行本方法的張量的元素逐個相加。參數tensor的尺寸必須嚴格地與執行方法的張量匹配,否則會發生錯誤。

參數:

  • dim (int) - 索引index所指向的維度
  • index (LongTensor) - 包含索引數的張量
  • tensor (Tensor) - 含有相加元素的張量

例子:

x = torch.Tensor([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
x
1 1 1
1 1 1
1 1 1
[torch.FloatTensor of size 3x3]
t = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
index = torch.LongTensor([0, 2, 1])
x.index_add_(0, index, t)
x
2 3 4
8 9 10
5 6 7
[torch.FloatTensor of size 3x3]

平均數

torch.mean(input)

返回輸入張量input中每個元素的平均值。

參數:

  • input (Tensor) – 輸入張量

例子:

a = torch.randn(1, 3)
a
0.3361 -0.7302 0.5432
[torch.FloatTensor of size 1x3]
torch.mean(a)
0.04971998929977417


torch.mean(input, dim, keepdim=False, out=None)

返回新的張量,其中包含輸入張量input指定維度dim中每行的平均值。

若keepdim值為True,則在輸出張量中,除了被操作的dim維度值降為1,其它維度與輸入張量input相同。否則,dim維度相當於被執行torch.squeeze()維度壓縮操作,導致此維度消失,最終輸出張量會比輸入張量少一個維度。

參數:

  • input (Tensor) - 輸入張量
  • dim (int) - 指定進行均值計算的維度
  • keepdim (bool, optional) - 輸出張量是否保持與輸入張量有相同數量的維度
  • out (Tensor) - 結果張量

例子:

a = torch.randn(4, 5)
a
0.3168 0.4953 -0.6758 -0.5559 -0.6906
0.2241 2.2450 1.5735 -1.3815 -1.5199
0.0033 0.5236 -0.9070 -0.5961 -2.1281
0.9605 1.5314 -0.6555 -1.2584 -0.4160
[torch.FloatTensor of size 4x5]
torch.mean(a, 1, True)
-0.2220
0.2283
-0.6209
0.0324
[torch.FloatTensor of size 4x1]

方差

torch.var(input, unbiased=True) → float

返回輸入向量input中所有元素的方差。

參數:

  • input (Tensor) - 輸入張量
  • unbiased (bool) - 是否使用基於修正貝塞爾函數的無偏估計

例子:

a = torch.randn(1, 3)
a
0.4680 -0.5237 0.9480
[torch.FloatTensor of size 1x3]
torch.var(a)
0.5632950516419974


torch.var(input, dim, keepdim=False, unbiased=True, out=None) → Tensor

返回新的張量,其中包括輸入張量input中指定維度dim中每行的方差。

若keepdim值為True,則在輸出張量中,除了被操作的dim維度值降為1,其它維度與輸入張量input相同。否則,dim維度相當於被執行torch.squeeze()維度壓縮操作,導致此維度消失,最終輸出張量會比輸入張量少一個維度。

參數:

  • input (Tensor) - 輸入Tensor
  • dim (int) - 指定維度
  • keepdim (bool) - 輸出張量是否保持與輸入張量有相同數量的維度
  • unbiased (bool) - 是否使用基於修正貝塞爾函數的無偏估計
  • out (Tensor,optional) - 結果張量

例子:

a = torch.randn(4, 4)
a
0.4364 -0.5140 1.6462 0.7626
-1.2074 -0.3692 0.8664 -0.3861
0.7429 1.2400 -1.8987 1.9651
-0.6547 0.1685 -0.0441 -1.3670
[torch.FloatTensor of size 4x4]
torch.var(a, 1, True)
0.7958
0.7311
2.8353
0.4759
[torch.FloatTensor of size 4x1]

最大值

torch.max(input) → float

返回輸入張量所有元素的最大值。

參數:

  • input (Tensor) - 輸入張量

例子:

a = torch.randn(1, 3)
a
0.0504 -1.1855 -0.3644
[torch.FloatTensor of size 1x3]
torch.max(a)
0.0504443496465683


torch.max(input, dim, keepdim=False, out=None) -> (Tensor, LongTensor)

返回新的張量,其中包括輸入張量input中指定維度dim中每行的最大值,同時返回每個最大值的位置索引。

若keepdim值為True,則在輸出張量中,除了被操作的dim維度值降為1,其它維度與輸入張量input相同。否則,dim維度相當於被執行torch.squeeze()維度壓縮操作,導致此維度消失,最終輸出張量會比輸入張量少一個維度。

參數:

  • input (Tensor) - 輸入Tensor
  • dim (int) - 指定維度
  • keepdim (bool) - 輸出張量是否保持與輸入張量有相同數量的維度
  • out (tuple,optional) - 結果張量

例子:

a = torch.randn(4, 4)
a
-0.1219 -0.4721 0.4744 -0.5892
0.8172 0.3205 -0.5200 0.3159
-0.6057 0.1025 -0.9742 1.4213
-0.6369 -2.5809 -1.7359 1.3458
[torch.FloatTensor of size 4x4]
torch.max(a, 1, True)
(
0.4744
0.8172
1.4213
1.3458
[torch.FloatTensor of size 4x1],
2
0
3
3
[torch.LongTensor of size 4x1])


torch.max(input, other, out=None) → Tensor

逐個元素比較張量input與張量other,將比較出的最大值保存到輸出張量中。
兩個張量尺寸不需要完全相同,但需要支持自動擴展法則。

參數:

  • input (Tensor) - 輸入Tensor
  • other (Tensor) - 另一個輸入的Tensor
  • out (Tensor,optional) - 結果張量

例子:

a = torch.randn(4)
a
-0.1958
0.3234
1.1194
0.4719
[torch.FloatTensor of size 4]
b = torch.randn(1)
b
-0.3273
[torch.FloatTensor of size 1]
torch.max(a, b)
-0.1958
0.3234
1.1194
0.4719
[torch.FloatTensor of size 4]

最小值

torch.min(input) → float

返回輸入張量所有元素的最小值。

參數:

  • input (Tensor) - 輸入張量

例子:

a = torch.randn(1, 3)
a
-1.0276 0.5545 0.7714
[torch.FloatTensor of size 1x3]
torch.min(a)
-1.0276073217391968


torch.min(input, dim, keepdim=False, out=None) -> (Tensor, LongTensor)

返回新的張量,其中包括輸入張量input中指定維度dim中每行的最小值,同時返回每個最小值的位置索引。

若keepdim值為True,則在輸出張量中,除了被操作的dim維度值降為1,其它維度與輸入張量input相同。否則,dim維度相當於被執行torch.squeeze()維度壓縮操作,導致此維度消失,最終輸出張量會比輸入張量少一個維度。

參數:

  • input (Tensor) - 輸入Tensor
  • dim (int) - 指定維度
  • keepdim (bool) - 輸出張量是否保持與輸入張量有相同數量的維度
  • out (tuple,optional) - 結果張量

例子:

a = torch.randn(4, 4)
a
-0.7407 1.0871 1.1944 0.9493
0.1087 -0.0116 -1.6010 1.1703
-0.3727 -0.3540 -0.6574 0.1487
0.2522 1.9859 1.2496 -0.6711
[torch.FloatTensor of size 4x4]
torch.min(a, 1, True)
(
-0.7407
-1.6010
-0.6574
-0.6711
[torch.FloatTensor of size 4x1],
0
2
2
3
[torch.LongTensor of size 4x1])


torch.min(input, other, out=None) → Tensor

逐個元素比較張量input與張量other,將比較出的最小值保存到輸出張量中。
兩個張量尺寸不需要完全相同,但需要支持自動擴展法則。

參數:

  • input (Tensor) - 輸入Tensor
  • other (Tensor) - 另一個輸入的Tensor
  • out (Tensor,optional) - 結果張量

例子:

a = torch.randn(4)
a
-0.3359
-2.1027
0.5735
0.1926
[torch.FloatTensor of size 4]
b = torch.randn(1)
b
0.6484
[torch.FloatTensor of size 1]
torch.min(a, b)
-0.3359
-2.1027
0.5735
0.1926
[torch.FloatTensor of size 4]

平方根倒數

torch.rsqrt(input) → Tensor

返回新的張量,其中包含input張量每個元素平方根的倒數。

參數:

  • input (Tensor) – 輸入張量
  • out (Tensor, optional) – 輸出張量

例子:

a = torch.randn(4)
a
0.5471
0.3988
0.5291
-0.3464
[torch.FloatTensor of size 4]
torch.rsqrt(a)
1.3520
1.5836
1.3747
nan
[torch.FloatTensor of size 4]

線性插值

torch.lerp(star,end,weight) → Tensor

基於weight對輸入的兩個張量start與end逐個元素計算線性插值,結果返回至輸出張量。

返回結果是: 技術分享圖片

參數:

  • start (Tensor) – 起始點張量
  • end (Tensor) – 終止點張量
  • weight (float) – 插入公式的 weight
  • out (Tensor, optional) – 結果張量

例子:

start = torch.arange(1, 5)
end = torch.Tensor(4).fill_(10)
start
1
2
3
4
[torch.FloatTensor of size 4]
end
10
10
10
10
[torch.FloatTensor of size 4]
torch.lerp(start, end, 0.5)
5.5000
6.0000
6.5000
7.0000
[torch.FloatTensor of size 4]

雙曲正切

torch.tanh(input, out=None) → Tensor

返回新的張量,其中包括輸入張量input中每個元素的雙曲正切。

參數:

  • input (Tensor) - 輸入張量
  • out (Tensor,optional) - 結果張量

例子:

a = torch.randn(4)
a
-1.6516
-0.7318
-0.5905
0.0520
[torch.FloatTensor of size 4]
torch.tanh(a)
-0.9291
-0.6242
-0.5303
0.0520
[torch.FloatTensor of size 4]


[Pytorch]Pytorch中tensor常用語法