PyTorch學習筆記1 張量

2021-10-01 04:53:37 字數 2088 閱讀 3569

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 數學上,把一維陣列叫向量 帶有方向的數量,線性代數有這個概念 把二維陣列叫矩陣 像矩形的乙個形狀,古代把一群士兵組成的方陣,叫陣 由於,矩形這個詞語被占用了,就發明了這個詞兒 三維,三維以上陣列,就叫張量,也叫做多維陣列 張量計算,就是多維陣列計算 另外,一般化之後的...