許多深度學習的應用中,都是將一種特定類型的輸入資料,透過模型的轉換產生另一種類型的結果,例如:輸入一張圖片,輸出標籤及信心分數,上述的例子可以特過專家們以訓練好的resnet這個模型來達成,我們運用起來十分方便的模型,其實在處理大量輸入的資料時都會將它轉換成浮點數,方便電腦去進行計算與處理.
張量就像是一個容器,就好比我們要從水龍頭取一些水去煮沸成飲用水,那我們一定會找一個水壺去盛水,而我們要將輸入的資料轉換成浮點數前,則必須準備好張量(即PyTorch中的容器),而張量是用來表示純量
,向量
,矩陣
及多維資料
的資料結構或容器.
Python的串列是直接寫出串列中所有元素的值,再利用索引的方式去讀取,修改元素.
In:
a = [2.0, 3.0, 5.0, 7.0, 8.0]
#這裡有五個元素,而索引值則是0到4
In:
a[4]
Out:
8.0
#透過索引值4,取得第4個元素
In:
a[2] = 9.0
a
Out:
[2.0, 3.0, 9.0, 7.0, 8.0]
#利用索引值修改特定元素
PyTorch的張量則是利用torch模組創建一個張量,再利用索引來提取元素或修改.
In:
import torch
a = torch.zeros(3)
a
Out:
tensor([0., 0.,0.])
#建立一個元素皆為0的3維一軸張量
In:
a[2]
Out:
tensor(0.)
#印出索引值為2的元素
In:
a[1] = 9.0
a
Out:
tensor([0., 9., 0.])
#修改張量中索引值為1的元素值
從上面的程式碼來看PyTorch的張量與Python的串列看起來並沒有太大的差異,但事實上張量與串量在記憶體中的配置是截然不同的,串列在記憶體空間中是獨立區塊的Python物件,而張量則能看成是記憶體空間中一個連續區塊,而這個連續區塊中的每一個元素都是32位元的浮點數.