什麼是PyTorch?
PyTorch是一個基於Torch的Python機器學習庫。它類似於numpy但具有強大的GPU支持。它由Facebook的AI Research Group於2016年開發.PyTorch提供動態計算圖,以便您可以在autograd的幫助下隨時修改圖形。Pytorch在某些情況下比其他框架更快,但您將在後面的其他部分討論。
PyTorch的優點和缺點
好處
1. 簡單庫
PyTorch代碼很簡單。它很容易理解,您可以立即使用該庫。例如,請查看下面的代碼段:
如上所述,您可以輕鬆定義網絡模型,無需經過多少培訓即可快速理解代碼。
2. 動態計算圖
Pytorch提供動態計算圖(DAG)。計算圖是一種在圖模型或理論(如節點和邊)中表達數學表達式的方法。節點將進行數學運算,並且邊緣是Tensor,它將被饋送到節點並在Tensor中攜帶節點的輸出。
DAG是一種圖形,可以保持任意形狀,並且能夠在不同的輸入圖形之間進行操作。每次迭代,都會創建一個新圖形。因此,可以使用相同的圖形結構或創建具有不同操作的新圖形,或者我們可以將其稱為動態圖形。
3. 更好的性能
社區和研究人員,基準和比較框架,以了解哪一個更快。深度學習框架和GPU上的GitHub repo 報告說,PyTorch在每秒處理的圖像方面比其他框架更快。
如下所示,使用vgg16和resnet152進行比較
4. 原生Python
PyTorch更基於python。例如,如果要訓練模型,可以使用本機控制流(例如循環和遞歸),而無需添加更多特殊變量或會話以便能夠運行它們。這對培訓過程非常有幫助。
Pytorch還實現了Imperative Programming,更靈活。因此,可以在計算過程中列印出張量值。
使用PyTorch進行圖像分類
學習深度學習基礎知識的一種流行方法是使用MNIST數據集。它是深度學習中的"Hello World"。該數據集包含0-9的手寫數字,總共60,000個訓練樣本和10,000個測試樣本,這些樣本已標記為28x28像素。
圖像分類
步驟1)預處理數據
在開始培訓過程之前,您需要了解數據。在第一步中,您將使用torchvision模塊加載數據集。Torchvision將加載數據集並根據網絡的適當要求(例如形狀和規範化圖像)轉換圖像。
變換函數將圖像轉換為張量並對值進行標準化。函數torchvision.transforms.MNIST將下載目錄中的數據集(如果它不可用),必要時設置數據集以進行培訓並執行轉換過程。
要顯示數據集,可以使用data_iterator獲取下一批圖像和標籤。您可以使用matplot繪製這些圖像及其相應的標籤。正如您在下面看到的我們的圖像和標籤。
步驟2)網絡模型配置
現在,您將為圖像分類創建一個簡單的神經網絡。在這裡,我們向您介紹在PyTorch中創建網絡模型的另一種方法。我們將使用nn.Sequential來創建序列模型,而不是創建nn.Module的子類。
這是我們網絡模型的輸出
網絡解釋
1. 順序是第一層是Conv2D層,輸入形狀為1,輸出形狀為10,內核大小為5
2. 接下來,一個MaxPool2D圖層
3. ReLU激活功能
4. Dropout圖層可以降低概率值。
5. 然後是第二個Conv2d,輸入形狀為10,最後一層,輸出形狀為20,內核大小為5
6. 接下來是MaxPool2d層
7. ReLU激活功能。
8. 之後,在將張量饋入"線性"圖層之前,將展平張量
9. 線性層將使用softmax激活函數在第二個線性層映射輸出
步驟3)訓練模型
在開始培訓過程之前,需要設置標準和優化器功能。對於標準,您將使用CrossEntropyLoss。對於Optimizer,您將使用SGD,學習率為0.001,動量為0.9。
import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
正向過程將採用輸入形狀並將其傳遞給第一個conv2d層。然後從那裡,它將被輸入maxpool2d並最終進入ReLU激活功能。在第二個conv2d層中將發生相同的過程。之後,輸入將被重新整形為(-1,320)並輸入fc層以預測輸出。
現在,您將開始培訓過程。您將遍歷我們的數據集2次或使用2的紀元,並列印每2000批次的當前損失。
枚舉器將獲得下一個輸入元組和相應的標籤。在我們將輸入提供給網絡模型之前,我們需要清除之前的漸變。這是必需的,因為在後向過程(反向傳播過程)之後,將累積梯度而不是被替換。然後,我們將根據預期輸出的預測輸出計算損失。之後,將進行反向傳播以計算梯度,最後,將更新參數。
這是培訓過程的輸出
[1, 1] loss: 0.002 [1, 1001] loss: 2.302 [1, 2001] loss: 2.295 [1, 3001] loss: 2.204 [1, 4001] loss: 1.930 [1, 5001] loss: 1.791 [1, 6001] loss: 1.756 [1, 7001] loss: 1.744 [1, 8001] loss: 1.696 [1, 9001] loss: 1.650 [1, 10001] loss: 1.640 [1, 11001] loss: 1.631 [1, 12001] loss: 1.631 [1, 13001] loss: 1.624 [1, 14001] loss: 1.616 [2, 1] loss: 0.001 [2, 1001] loss: 1.604 [2, 2001] loss: 1.607 [2, 3001] loss: 1.602 [2, 4001] loss: 1.596 [2, 5001] loss: 1.608 [2, 6001] loss: 1.589 [2, 7001] loss: 1.610 [2, 8001] loss: 1.596 [2, 9001] loss: 1.598 [2, 10001] loss: 1.603 [2, 11001] loss: 1.596 [2, 12001] loss: 1.587 [2, 13001] loss: 1.596 [2, 14001] loss: 1.603
步驟4)測試模型
訓練模型後,您需要使用其他圖像集進行測試或評估。我們將為test_loader使用迭代器,它將生成一批將傳遞給訓練模型的圖像和標籤。將顯示預測輸出並與預期輸出進行比較。
不知不覺,就學完了Pytorch的快速入門。
作為本章結束語,和標題呼應,是不是真的難以置信的簡單啊!