pytorch總結學習系列 操作

2021-10-01 19:29:49 字數 1617 閱讀 7230

算術操作

在pytorch中,同一種操作可能有很多種形式,下⾯用加法作為例⼦。

加法形式⼀

x = torch.tensor([5.5, 3])

y = torch.rand(5, 3)

print(x + y)

加法形式⼆

print(torch.add(x, y)) 

還可指定輸出:

result = torch.empty(5, 3)

torch.add(x, y, out=result)

print(result)

加法形式三、inplace

# adds x to y

y.add_(x)

print(y)索引

我們還可以使⽤用類似numpy的索引操作來訪問 tensor 的⼀部分,需要注意的是:索引出來的結果與

原資料共享記憶體,也即修改乙個,另乙個會跟著修改。

y = x[0, :]

y += 1

print(y)

print(x[0, :]) # 源tensor也被改了了

除了常⽤的索引選擇資料之外,pytorch還提供了一些高階的選擇函式:

改變形狀

⽤用 view() 來改變 tensor 的形狀:

y = x.view(15)

z = x.view(-1, 5) # -1所指的維度可以根據其他維度的值推出來

print(x.size(), y.size(), z.size())

輸出torch.size([5, 3]) torch.size([15]) torch.size([3, 5]) 

注意 view() 返回的新tensor與源tensor共享記憶體(其實是同⼀乙個tensor),也即更更改其中的⼀乙個,另

外⼀乙個也會跟著改變。(顧名思義,view僅僅是改變了了對這個張量量的觀察⻆角度)

x += 1

print(x)

print(y) # 也加了1

所以如果我們想返回⼀個真正新的副本(即不共享記憶體)該怎麼辦呢?pytorch還提供了了⼀一

個 reshape() 可以改變形狀,但是此函式並不不能保證返回的是其拷⻉貝,所以不不推薦使⽤用。推薦先

用 clone 創造乙個副本然後再使⽤ view 

x_cp = x.clone().view(15)

x -= 1

print(x)

print(x_cp)

使⽤用 clone 還有⼀乙個好處是會被記錄在計算圖中,即梯度回傳到副本時也會傳到源 tensor 。

另外⼀乙個常⽤用的函式就是 item() , 它可以將⼀乙個標量 tensor 轉換成⼀乙個python number:

x = torch.randn(1)

print(x)

print(x.item())

輸出tensor([2.3466])

2.3466382026672363

線性代數

pytorch總結學習系列 資料操作

在深度學習中,我們通常會頻繁地對資料進 行 操作。作為動 手學深度學習的基礎,本節將介紹如何對內 存中的資料進 行 操作。在pytorch中,torch.tensor 是儲存和變換資料的主要 工具。如果你之前 用過numpy,你會發現 tensor 和numpy的多維陣列 非常類似。然 tensor...

PyTorch學習總結 四 Utilities

這個類的例項不能手動建立。它們只能被pack padded sequence 例項化。torch.nn.utils.rnn.pack padded sequence 輸入 input seq length x batch size x input size 或 batch size x seq le...

PyTorch學習 安裝PyTorch

例如,使用的是 windows 系統,想用 pip 安裝,python 是 3.6 版的,沒有 gpu 加速,那就按上面的選,然後根據上面的提示,在 terminal 中輸入以下指令就好了 pip3 install torch 1.3.1 cpu torchvision 0.4.2 cpu ftor...