算術操作
在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...