张量Tensor@最强分析
如果你的張量理解程度還停留在只能想象出三維的張量維度的話,相信這篇文章一定能讓你徹底理解各種維度的張量!
文章目錄
- 如果你的張量理解程度還停留在只能想象出三維的張量維度的話,相信這篇文章一定能讓你徹底理解各種維度的張量!
- 理解第一步(一維張量):
- 理解第二步(二維張量):
- 理解第三步(三維張量):
- 理解第四步(高維張量):
- 當然,我們還可以通過簡圖通俗理解以及想象高維張量長啥樣!:
理解第一步(一維張量):
對張量最初級的理解可以舉例為python中的列表,這里的list就可以理解為一維張量:
list=[1,2,3,4,5]我們也可以通過常見的張量生成函數torch.rand()來生成一位張量(torch.rand的作用通俗來說就是產生均勻分布的數據!
torch.rand()里面有幾個數字那么就是生成幾維張量!
例如這里生成一維張量:
import torch# 生成一個有四個隨機張量元素的一維張量 x = torch.rand(4)print(x)生成結果:
tensor([0.0235, 0.5347, 0.4886, 0.4133])OK,到這你就完成了理解張量的第一步了!
矩陣就是理解張量的第一步
理解第二步(二維張量):
理解張量的第二步也不難,其實就可以理解為我們大學課程中學習的矩陣!
例如這個兩行兩列的矩陣B就可以看作一個二維張量:
同樣我們用torch.rand()生成一個二維張量,再次強調,torch.rand()括號里面輸入幾個數那就是生成幾維張量,這里我們輸入兩個數:
生成了個兩行四列的張量(矩陣):
tensor([[0.0988, 0.4283, 0.6238, 0.5235],[0.1831, 0.0804, 0.4846, 0.5573]])二維張量常見于灰度圖像當中,灰度圖像即為一個二維張量數據!
理解第三步(三維張量):
理解三維張量也相對容易,二維張量可以看作一個平面,而三維張量就可以看作很多個二維張量平面兩兩平行擺放。
例如我們常見的RGB圖像就可以理解為3個二維灰度圖像并排擺放。
同樣,我們用torch.rand()生成三維張量:
生成結果:
tensor([[[0.7657, 0.6422, 0.3424, 0.3820],[0.0910, 0.5460, 0.1790, 0.5021],[0.7869, 0.1970, 0.8491, 0.9219]],[[0.8981, 0.2356, 0.3094, 0.0314],[0.9902, 0.8836, 0.8478, 0.1059],[0.5204, 0.3140, 0.9305, 0.3709]]])這里通俗理解為,生成了2個平行擺放的3行4列的二維張量!
理解第四步(高維張量):
相信大多數人的想象力就到上面為止了,我們的張量其實不但有3維,還有33維、333維、333333維。。。
在理解高維張量之前,我先想到了俄羅斯套娃,哈哈……
其實高維張量就可以理解為俄羅斯套娃,單位為“套”
一“套”張量 = 一維張量
n’‘套’'張量 = n維張量
張量有專屬的高維張量單位,那就是batch,相信跑過深度的同學都知道,訓練網絡之前都得調batchsize大小,其實本質上就是調的張量維度,維度高了計算機也會吃不消,畢竟理論上可以將batchsize調成9999999哈哈。
同樣我們可以通過torch.rand()生成高維張量:
import torch''' 這里的rand()括號里面的參數從第四維開始其實就是不斷加入一個新的參數---batch! 例如我這里4維張量就是(batch, channel, heigth, width) 那如果是6維張量那就是(batch, batch, batch, channel, heigth, width) 不斷地在前面加batch就好啦! ''' x = torch.rand(2, 3, 4, 5)print(x)生成結果:
tensor([[[[0.3507, 0.2650, 0.4203, 0.6650, 0.9264],[0.0372, 0.7468, 0.4858, 0.1521, 0.0588],[0.7570, 0.2222, 0.6243, 0.1668, 0.2480],[0.0759, 0.3870, 0.8078, 0.0019, 0.7025]],[[0.9906, 0.7294, 0.1512, 0.2580, 0.9308],[0.3207, 0.9315, 0.5995, 0.4642, 0.6465],[0.8916, 0.8987, 0.0457, 0.9936, 0.0683],[0.0167, 0.5090, 0.6432, 0.7025, 0.9202]],[[0.6409, 0.1199, 0.6162, 0.7897, 0.9580],[0.4882, 0.8031, 0.3614, 0.3455, 0.1440],[0.2205, 0.9850, 0.4896, 0.3791, 0.6387],[0.5410, 0.6443, 0.6870, 0.5172, 0.9992]]],[[[0.6450, 0.5450, 0.5042, 0.3609, 0.7601],[0.8083, 0.9958, 0.6853, 0.5153, 0.3479],[0.2294, 0.9824, 0.3542, 0.6019, 0.7602],[0.8068, 0.0328, 0.9990, 0.5347, 0.9353]],[[0.2620, 0.0935, 0.3777, 0.4553, 0.3261],[0.9518, 0.4248, 0.2831, 0.0669, 0.4071],[0.3266, 0.9508, 0.4695, 0.6182, 0.0342],[0.1116, 0.3320, 0.7976, 0.3882, 0.1616]],[[0.2976, 0.7540, 0.2132, 0.0451, 0.0510],[0.1716, 0.3817, 0.2071, 0.5533, 0.4266],[0.1548, 0.7449, 0.8091, 0.3496, 0.6603],[0.6606, 0.5282, 0.8939, 0.8655, 0.2171]]]])用我們俄羅斯套娃的話術將就是:我們生成了個2套3層4行5列的四維張量!
當然我們還可以生成5套6套7套8套9層10行11列的張量哈哈,即:torch.rand(5,6,7,8,9,10,11)
當然,我們還可以通過簡圖通俗理解以及想象高維張量長啥樣!:
例如:
三維張量為一套(1個batch),那么四維張量很簡單就是把三維張量排成一列擺放:
好啦,三套張量排排放!這就是我們的四維張量啦!
那五維張量長啥樣呢?我們來看看:
這就是五維張量啦,也就是3套四維張量并排放!
其實在這我們就可以看到張量的升維其實也是在降維!
怎么理解呢,其實不知道大家有沒發現上面2張圖的過程很像我們第三步的那張圖,我們的三維張量在上圖五維張量中就可以看作為當初最基礎的單位:那個小方格。
同樣如果是六維張量就是把五維張量這個“平面”平行疊多層,即是升維。
換言之,batch不斷地充當最初的那個小方格了,只不過是大套包小套,小套變小格!
總結
以上是生活随笔為你收集整理的张量Tensor@最强分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IP数据包、ICMP协议以及ARP协议简
- 下一篇: 单表代换密码体制