初識 torch.Autograd | 理解pytorch網(wǎng)絡(luò)訓(xùn)練過程 | 筆記
本博文是運行 pytorch quickstart_tutorial 記錄的粗糙筆記
文章目錄
Disabling Gradient Tracking 禁止 梯度 跟蹤
默認(rèn)情況下,所有具有 requires_grad=True 的張量都在跟蹤它們的計算歷史并支持梯度計算。
但是,在某些情況下我們不需要這樣做,例如,當(dāng)我們訓(xùn)練了模型并且只想將其應(yīng)用于某些輸入數(shù)據(jù)時,即我們只想通過網(wǎng)絡(luò)進(jìn)行前向計算。
我們可以通過用 torch.no_grad() 塊包圍我們的計算代碼來停止跟蹤計算:
There are reasons you might want to disable gradient tracking【關(guān)閉梯度跟蹤的原因】:
理解 y = w * X + b
Optional Reading: Tensor Gradients and Jacobian Products【梯度和雅克比積】
什么是超參數(shù)
Optimization Loop 【迭代優(yōu)化】
Loss Function 【損失函數(shù)】
Optimizer 【 優(yōu)化器】
Saving and Loading Model Weights 【保存 加載 模型】
Saving and Loading Models with Shapes【模型網(wǎng)絡(luò)結(jié)構(gòu) 和 參數(shù) 存儲于一個 xx.pth 文件】
Exporting Model to ONNX
Disabling Gradient Tracking 禁止 梯度 跟蹤
摘自 pytorch 教程
import torch z = torch.matmul(x, w)+b print(z.requires_grad) with torch.no_grad(): z = torch.matmul(x, w)+b print(z.requires_grad)
1
2
3
4
5
6
7
8
There are reasons you might want to disable gradient tracking【關(guān)閉梯度跟蹤的原因】:
將神經(jīng)網(wǎng)絡(luò)中的某些參數(shù)標(biāo)記為凍結(jié)參數(shù),這是微調(diào)預(yù)訓(xùn)練網(wǎng)絡(luò)的一個非常常見的場景
在僅進(jìn)行前向傳遞時加快計算速度,不對張量進(jìn)行梯度跟蹤,計算會更加高效
理解 y = w * X + b
Optional Reading: Tensor Gradients and Jacobian Products【梯度和雅克比積】
摘自該文檔
In many cases, we have a scalar loss function, and we need to compute the gradient with respect to some parameters. However, there are cases when the output function is an arbitrary tensor. In this case, PyTorch allows you to compute so-called Jacobian product, and not the actual gradient.
在很多情況下,我們有一個標(biāo)量損失函數(shù),我們需要計算一些參數(shù)的梯度。 但是,有些情況下輸出函數(shù)是任意張量。 在這種情況下,PyTorch 允許您計算所謂的雅可比積,而不是實際的梯度。
什么是超參數(shù)
超參數(shù)是可調(diào)節(jié)的參數(shù),用來控制模型優(yōu)化過程, 不同的超參數(shù)值會影響模型訓(xùn)練和收斂速度;
Optimization Loop 【迭代優(yōu)化】
Loss Function 【損失函數(shù)】
當(dāng)提供一些訓(xùn)練數(shù)據(jù)時,我們未經(jīng)訓(xùn)練的網(wǎng)絡(luò)可能不會給出正確的答案。 損失函數(shù)衡量得到的結(jié)果與目標(biāo)值的不相似程度,是我們在訓(xùn)練過程中想要最小化的損失函數(shù)。 為了計算損失,我們使用給定數(shù)據(jù)樣本的輸入進(jìn)行預(yù)測,并將其與真實數(shù)據(jù)標(biāo)簽值進(jìn)行比較。
Optimizer 【 優(yōu)化器】
優(yōu)化是在每個訓(xùn)練步驟中調(diào)整模型參數(shù)以減少模型誤差的過程。 優(yōu)化算法定義了這個過程是如何執(zhí)行的(在這個例子中我們使用隨機(jī)梯度下降)。 所有優(yōu)化邏輯都封裝在優(yōu)化器對象中。 在這里,我們使用 SGD 優(yōu)化器; 此外,PyTorch 中有許多不同的優(yōu)化器可用,例如 ADAM 和 RMSProp,它們更適用于不同類型的模型和數(shù)據(jù)。
在訓(xùn)練循環(huán)中,優(yōu)化分三步進(jìn)行:
調(diào)用 optimizer.zero_grad() 來重置模型參數(shù)的梯度。 默認(rèn)情況下漸變相加;為了防止重復(fù)計算,我們在每次迭代時明確地將它們歸零。
通過調(diào)用 loss.backwards() 來反向傳播預(yù)測損失。 PyTorch 將損失的梯度存入 w.r.t. 每個參數(shù)。
一旦我們有了梯度,我們就調(diào)用 optimizer.step() 來通過向后傳遞中收集的梯度來調(diào)整參數(shù)。
Saving and Loading Model Weights 【保存 加載 模型】
Saving and Loading Models with Shapes【模型網(wǎng)絡(luò)結(jié)構(gòu) 和 參數(shù) 存儲于一個 xx.pth 文件】
Exporting Model to ONNX
PyTorch 還具有本機(jī) ONNX 導(dǎo)出支持。 然而,鑒于 PyTorch 執(zhí)行圖的動態(tài)特性,導(dǎo)出過程必須遍歷執(zhí)行圖以生成持久化的 ONNX 模型。 出于這個原因,應(yīng)該將適當(dāng)大小的測試變量傳遞給導(dǎo)出例程(在我們的例子中,我們將創(chuàng)建一個正確大小的虛擬零張量):
input_image = torch.zeros((1,3,224,224)) onnx.export(model, input_image, 'model.onnx')
1
2
pytorch 機(jī)器學(xué)習(xí) 網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。