pytorch中網路loss傳播和引數更新理解

2021-10-01 14:12:54 字數 1521 閱讀 7609

tensorflow: 228--->266

keras: 42--->56

pytorch: 87--->252

在使用pytorch中,自己有一些思考,如下:

1. loss計算和反向傳播

import torch.nn as nn

criterion = nn.mseloss().cuda()

output = model(input)

loss = criterion(output, target)

loss.backward()

通過定義損失函式:criterion,然後通過計算網路真實輸出和真實標籤之間的誤差,得到網路的損失值:loss;

最後通過loss.backward()完成誤差的反向傳播,通過pytorch的內在機制完成自動求導得到每個引數的梯度。

需要注意,在機器學習或者深度學習中,我們需要通過修改引數使得損失函式最小化或最大化,一般是通過梯度進行網路模型的引數更新,通過loss的計算和誤差反向傳播,我們得到網路中,每個引數的梯度值,後面我們再通過優化演算法進行網路引數優化更新。

2. 網路引數更新

在更新網路引數時,我們需要選擇一種調整模型引數更新的策略,即優化演算法。

優化演算法中,簡單的有一階優化演算法:

其中就是通常說的學習率,是函式的梯度;

自己的理解是,對於複雜的優化演算法,基本原理也是這樣的,不過計算更加複雜。

在pytorch中,torch.optim是乙個實現各種優化演算法的包,可以直接通過這個包進行呼叫。

optimizer = torch.optim.adam(model.parameters(), lr=0.01)

注意:1)在前面部分1中,已經通過loss的反向傳播得到了每個引數的梯度,然後再本部分通過定義優化器(優化演算法),確定了網路更新的方式,在上述**中,我們將模型的需要更新的引數傳入優化器。

2)注意優化器,即optimizer中,傳入的模型更新的引數,對於網路中有多個模型的網路,我們可以選擇需要更新的網路引數進行輸入即可,上述**,只會更新model中的模型引數。對於需要更新多個模型的引數的情況,可以參考以下**:

optimizer = torch.optim.adam([, ], lr=0.01)

3) 在優化前需要先將梯度歸零,即optimizer.zeros()。

3. loss計算和引數更新

import torch.nn as nn

import torch

criterion = nn.mseloss().cuda()

optimizer = torch.optim.adam(model.parameters(), lr=0.01)

output = model(input)

loss = criterion(output, target)

​optimizer.zero_grad()  # 將所有引數的梯度都置零

loss.backward()        # 誤差反向傳播計算引數梯度

optimizer.step()       # 通過梯度做一步引數更新

python中網路程式設計

1.使用socket 面向連線tcp 伺服器端 user bin env python from socket import from time import ctime host localhost port 5000 bufsiz 1024 addr host,port udpsersock s...

linux中網路的管理

1.ipv4 2進製32位 10進製 172.25.0.10 255.255.255.0 172.25.0.10 ip位址 255.255.255.0 子網掩碼 子網掩碼255位對應的ip位為網路位 子網掩碼0對應的ip位為主機位 圖形化 1.圖形介面 2.文字化圖形 nmtui 命令 ifconf...

Caffe中網路的繪製

1 安裝graphviz sudo apt get install graphviz 依賴庫2 安裝pydot sudo pip install pydot3 使用命令列進行網路的繪製 第乙個引數是caffe檔案中python資料夾下的draw net.py檔案 第乙個引數 網路模型的prototx...