Pytorch 中張量的理解

張量是一棵樹

長久以來,張量和其中維度的概念把我搞的暈頭轉向。
一維的張量是數組,二維的張量是矩陣,這也頗有道理。
可是給一個二維張量,讓我算出它每一行的和,應該用 sum(dim=0) 仍是 sum(dim=1)? 這個問題還得讓我想個一下子。
更別說四維的張量是什麼,一百維的張量又是什麼,這種問題了,我不知道,想一想就頭大。
可是直到把張量當作一棵樹,許多問題就迎刃而解~數組

以下圖所示,分別表示三種不一樣形狀的張量:
3d

基本規律是:blog

  1. 不算最上邊的樹根節點,剩下的節點有幾層,那這個張量就是幾維的。(換種說法:張量的維數=樹高-1)
  2. 維度dim=0對應樹中的第二層,維度dim=1對應樹中的第三層,以此類推。
  3. 每一層的維度 = 這一層的每一個節點有幾個親兄弟節點。

帶有維度的運算

張量以某個維度進行運算,就是:im

  1. 把對應樹中這個維度的親兄弟節點都移動至重疊狀態
  2. 上述移動會致使部分葉子節點重疊,把重疊的葉子節點進行相應運算
  3. 刪除該維度

以 shape 爲 [1, 2, 2] 的張量t 舉例說明:d3

t.sum(dim=1)


最終張量的shape是 [1, 2]總結

t.sum(dim=0)

第0維的節點只有一個,因此不用進行兄弟節點之間的合併,天然也不會有重疊的葉子節點,因此就不用運算,只須要刪除第0維便可。

最終張量的shape是 [2, 2]數據

t.sum(dim=2)


刪掉的剛好是最後一層葉子節點,數據上移到新的葉子節點中。
最終張量的shape是 [1, 2]db

增長刪除維度

給張量增長一個維度等價於給樹增長一層。
給張量刪除一個維度等價於給樹刪除一層。
可是,增刪的維度是有限制的:維度必須爲1。img

刪除一個維度爲1的層

增長一個維度爲1的層

示例1
移動

示例2

總結

將張量當作一個樹形結構能在某種程度更加直觀的理解張量的概念及其相關運算。

相關文章
相關標籤/搜索