pytorch中資料集用tensor來表示,tensor與python中的list類似,但是其內部儲存時以連續記憶體單元儲存,可以通過下標計算出記憶體位址,然後直接讀出數值,因此訪問效率很高,同時由於與numpy的記憶體儲存基本相同,所以numpy的ndarray與tensor之間轉換,不論有多少元素,其轉換只需數毫秒,非常高效。同時,tensor可以在gpu上執行,因此比numpy的效率要高。
建立空張量
建立空的x∈r
5\boldsymbol \in r^
x∈r5
向量:
x = torch.empty(
5)
注意此時x
\boldsymbol
x中的元素xix_
xi的值是對應記憶體位址中的值,可以是任意無意義的值。
我們同樣可以生成空的任意維度的張量,例如在深度學習中經常用到的設計矩陣(design matrix),x∈r
10×
5x \in r^
x∈r10×
5,表示共有10個樣本,每個樣本維度為5。可以用如下**建立:
x = torch.empty([10
,5])
張量建立並初始化
對於連線權值,我們通常使用隨機數來初始化,在pytorch中也有隨機數初始化方法。我們先來看採用均勻分布來初始化:
w = torch.rand(5,
3)
我們也可以用標準正態分佈來進行初始化:
w = torch.randn(5,
3)
用初始值建立
建立元素值為0或1的張量:
b = torch.zeros(5,
3, torch.
float
)c = torch.ones(5,
3, torch.double)
用已知值初始化
通過已知值初始化張量:
x = torch.tensor(
[1.0
,2.0
,3.0
,4.0
,5.0
])
numpy互操作性
在前面我們已經提到,由於與numpy在記憶體儲存上是共用的,所以numpy的ndarray和tensor之間互相轉換,幾乎是零成本的。如下所示:
a = np.ones(5)
b = torch.from_numpy(a)
# ndarray轉tensor
c = torch.tensor(
[1.0
,2.0
,3.0])
d = c.numpy(
)# tensor轉ndarray
我們通常想知道tensor的形狀:
a = torch.ones(5,
3)print
(a.size(
))
我們以加法為例,來看加法的幾種表示方式:
x = torch.ones(5,
3)y = torch.ones(5,
3)print
(x+y)
print
(torch.add(x, y)
)# 加法函式
result = torch.empty(5,
3)torch.add(x, y, out=result)
# result返回和
print
(result)
y.add_(x)
# 將x加入到y中
print
(y)
改變tensor形狀:
x = torch.ones(6,
3)y = x.view(2,
9)y_ = x.view(-1
,9)# 與上一行效果一致,第一維通過第二維推出
tensor索引與numpy中相同,對於每一維:開始索引(0開始包含): 結束索引(不包括): 步長,並且-1代表最後乙個元素,依此類推。 pytorch 學習筆記(一) 張量
pytorch 是乙個基於 python 的科學計算包,主要定位兩類人群 tensors 類似於 numpy 的 ndarrays 同時 tensors 可以使用 gpu 進行計算。1.匯入 from future import print function import torch2.構造乙個5x...
PyTorch入門(二) 張量的建立
張量的建立 2.依據數值建立 依據概率分布 張量是乙個多維陣列,它是標量 向量 矩陣的高維拓展。特殊的張量 標量 0維張量 向量 1維張量 矩陣 2維張量 variable是torch.autograd中的資料型別主要用於封裝tensor,進行自動求導。variable的屬性有 data 被包裝的t...
深度學習準備(1) 張量
中文 張量 英文 tensor 數學上,把一維陣列叫向量 帶有方向的數量,線性代數有這個概念 把二維陣列叫矩陣 像矩形的乙個形狀,古代把一群士兵組成的方陣,叫陣 由於,矩形這個詞語被占用了,就發明了這個詞兒 三維,三維以上陣列,就叫張量,也叫做多維陣列 張量計算,就是多維陣列計算 另外,一般化之後的...