介紹
PyTorch是一個非常有可能改變深度學習領域前景的Python庫。我嘗試使用了幾星期PyTorch,然後被它的易用性所震驚,在我使用過的各種深度學習庫中,PyTorch是最靈活、最容易掌握的。
PyTorch的概述
PyTorch的創始人說過他們創作的一個準則——他們想成為當務之急。這意味着我們可以立即執行計算。這正好符合Python的程式設計方法,不需要完成全部代碼才能運作,可以輕松的運作部分代碼并實時檢查。對于我來說把它作為一個神經網絡調試器是一件非常幸福的事。
PyTorch是一個基于Python的庫,用來提供一個具有靈活性的深度學習開發平台。PyTorch的工作流程非常接近Python的科學計算庫——numpy。
現在你可能會問,為什麼我們要用PyTorch來建立深度學習模型呢?我可以列出三件有助于回答的事情:
·易于使用的API—它就像Python一樣簡單。
·Python的支援—如上所述,PyTorch可以順利地與Python資料科學棧內建。它非常類似于numpy,甚至注意不到它們的差别。
·動态計算圖—取代了具有特定功能的預定義圖形,PyTorch為我們提供了一個架構,以便可以在運作時建構計算圖,甚至在運作時更改它們。在不知道建立神經網絡需要多少記憶體的情況下這非常有價值。
PyTorch的其他一些優點還包括:多gpu支援,自定義資料加載器和簡化的預處理器。
自從2016年1月釋出以來,許多研究人員将其作為一種“go-to”庫,因為它可以輕松地建構新穎的甚至是極其複雜的圖形。雖說如此,PyTorch仍有一段時間沒有被大多數資料科學實踐者采用,因為它是新的而且處于“正在建設”的狀态。
PyTorch基礎概念
PyTorch 是一個建立在 Torch 庫之上的 Python 包,旨在加速深度學習應用。
PyTorch 提供一種類似 NumPy 的抽象方法來表征張量(或多元數組,标量是零級張量、向量是一階張量,矩陣是二階張量),它可以利用 GPU 來加速訓練。在神經網絡中Torch可以替換Numpy。
而PyTorch相比TensorFlow,其最大的優點是建立的神經網絡是動态的,相比靜态的TensorFlow,它能更加有效地去處理一些問題,比如RNN變化時間長度的輸出,TensorFlow相比PyTorch的有點在于分布式訓練上。
Tensor和Numpy之間的轉換(Numpy橋)
import torch
import numpy as np
np_data = np.arange(6).reshape((2, 3))
torch_data = torch.from_numpy(np_data)
tensor2array = torch_data.numpy()
print(
'\nnumpy', np_data,
'\ntorch', torch_data,
'\ntensor2array', tensor2array
)
運作結果:
numpy [[0 1 2]
[3 4 5]]
torch tensor([[0, 1, 2],
[3, 4, 5]], dtype=torch.int32)
tensor2array [[0 1 2]
[3 4 5]]
張量
張量(Tensor)是線性代數中的一種資料結構,是向量和矩陣的推廣,我們可以在張量上進行算術運算。
import torch
x = torch.ones(2,3,4)
print(x)
輸出:
tensor([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
- Tensor與numpy的Array之間的互相轉換時,要時刻注意Tensor和numpy的Array共享潛在的記憶體,改變其中任一值,另外一個也會相應改變
- 如果安裝了GPU版(CUDA張量)的Pytorch,可将張量轉移到GPU上進行計算,進而可以提高運算效率