Pytorch 中張量的理解
張量是一棵樹
長久以來,張量和其中維度的概念把我搞的暈頭轉(zhuǎn)向。
一維的張量是數(shù)組,二維的張量是矩陣,這也很有道理。
但是給一個二維張量,讓我算出它每一行的和,應(yīng)該用 sum(dim=0) 還是 sum(dim=1)? 這個問題還得讓我想個一會兒。
更別說四維的張量是什么,一百維的張量又是什么,這種問題了,我不知道,想想就頭大。
但是直到把張量看成一棵樹,許多問題就迎刃而解~
如下圖所示,分別表示三種不同形狀的張量:

基本規(guī)律是:
- 不算最上邊的樹根節(jié)點,剩下的節(jié)點有幾層,那這個張量就是幾維的。(換種說法:張量的維數(shù)=樹高-1)
- 維度dim=0對應(yīng)樹中的第二層,維度dim=1對應(yīng)樹中的第三層,以此類推。
- 每一層的維度 = 這一層的每個節(jié)點有幾個親兄弟節(jié)點。
帶有維度的運算
張量以某個維度進行運算,就是:
- 把對應(yīng)樹中這個維度的親兄弟節(jié)點都移動至重疊狀態(tài)
- 上述移動會導(dǎo)致部分葉子節(jié)點重疊,把重疊的葉子節(jié)點進行相應(yīng)運算
- 刪除該維度
以 shape 為 [1, 2, 2] 的張量t 舉例說明:
t.sum(dim=1)

最終張量的shape是 [1, 2]
t.sum(dim=0)
第0維的節(jié)點只有一個,所以不用進行兄弟節(jié)點之間的合并,自然也不會有重疊的葉子節(jié)點,所以就不用運算,只需要刪除第0維即可。

最終張量的shape是 [2, 2]
t.sum(dim=2)

刪掉的恰好是最后一層葉子節(jié)點,數(shù)據(jù)上移到新的葉子節(jié)點中。
最終張量的shape是 [1, 2]
增加刪除維度
給張量增加一個維度等價于給樹增加一層。
給張量刪除一個維度等價于給樹刪除一層。
但是,增刪的維度是有限制的:維度必須為1。
刪除一個維度為1的層

增加一個維度為1的層
示例1

示例2

總結(jié)
將張量看成一個樹形結(jié)構(gòu)能在某種程度更加直觀的理解張量的概念及其相關(guān)運算。

浙公網(wǎng)安備 33010602011771號