1. 程式人生 > 其它 >【PyTorch官方教程中文版學習筆記03】損失函式&更新權重

【PyTorch官方教程中文版學習筆記03】損失函式&更新權重

1. 損失函式

    在深度學習中,損失反映模型最後預測結果與實際真值之間的差距,可以用來分析訓練過程的好壞、模型是否收斂等,例如均方損失、交叉熵損失等。

    PyTorch中,損失函式可以看做是網路的某一層而放到模型定義中,但在實際使用時更偏向於作為功能函式而放到前向傳播過程中。

    損失函式舉例:均方誤差(mean squared error)、交叉熵誤差(cross entropy error)等使用時參考手冊torch.nn — PyTorch 1.11.0 documentation

  例項:nn.MSELoss  均方誤差

    

#接上篇神經網路
out = net(input)
net.zero_grad()
out.backward(torch.randn(
1, 10)) target = torch.randn(10) # a dummy target, for example target = target.view(1, -1) # make it the same shape as output criterion = nn.MSELoss() loss = criterion(out, target) print(loss) #輸出結果 tensor(1.7306, grad_fn=<MseLossBackward0>) “因為input和target的是隨機torch陣,所以loss結果不固定”

 

2. 反向傳播

     在神經網路的學習中,尋找最優引數(權重和偏置)時,要尋找使損失函式的值儘可能小的引數。

     為了找到使損失函式的值儘可能小的地方,需要計算引數的導數(確切地講是梯度),然後以這個導數為指引,逐步更新引數的值。

     數值微分可以計算神經網路的權重引數的梯度(嚴格來說,是損失函式關於權重引數的梯度),但是計算上比較費時間。

     誤差反向傳播法則是一個能夠高效計算權重引數的梯度的方法。

 

  •  為了實現反向傳播損失,我們所有需要做的事情僅僅是使用 loss.backward()。你需要清空現存的梯度,要不然梯度將會和現存的梯度累計到一起。
net.zero_grad() # zeroes the gradient buffers of all parameters
print('conv1.bias.grad before backward') print(net.conv1.bias.grad) loss.backward() print('conv1.bias.grad after backward') print(net.conv1.bias.grad)
#輸出
conv1.bias.grad before backward None #清空了現存梯度 conv1.bias.grad after backward tensor([
8.4274e-05, 2.4798e-03, 1.1413e-03, 2.4606e-03, 1.6488e-02, -7.1301e-03])
  • 優化器

    利用反向傳播,優化器應運而生。優化器可以更新引數即網路中的權重,進行模型優化、加速收斂。

    常用的優化器演算法SGD, Nesterov-SGD, Adam,RMSProp等。優化演算法的設計可以作為課題深層研究,目前只需要會使用現成演算法就可以。

    演算法在演算法包torch.optim。

    torch.optim — PyTorch 1.11.0 documentation

optimizer = optim.SGD(net.parameters(), lr=0.01)# create your optimizer
optimizer.zero_grad()# zero the gradient buffers
output = net(input)
loss = criterion(output, target)
loss.backward()
optimizer.step()# Does the update

    優化通常要經過好幾輪的for迴圈,訓練模型使得模型整體loss減小。

 

    

至此,我們在前篇
1.定義一個神經網路
2.處理輸入以及呼叫反向傳播

的基礎上繼續補充了:

3.計算損失值
4.更新網路中的權重

 完成了一個典型的神經網路訓練過程。

 

 參考文獻:

《Pytorch官方教程中文版 》

《 深度學習之Pytorch物體檢測實戰》

《深度學習入門:基於python的理論與實現》