Pytorch反向求導更新網絡參數的方法

今天小編就爲大家分享一篇Pytorch反向求導更新網絡參數的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

方法一:手動計算變量的梯度,然後更新梯度

import torch
from torch.autograd import Variable
# 定義參數
w1 = Variable(torch.FloatTensor([1,2,3]),requires_grad = True)
# 定義輸出
d = torch.mean(w1)
# 反向求導
d.backward()
# 定義學習率等參數
lr = 0.001
# 手動更新參數
w1.data.zero_() # BP求導更新參數之前,需先對導數置0
w1.data.sub_(lr*w1.grad.data)

一個網絡中通常有很多變量,如果按照上述的方法手動求導,然後更新參數,是很麻煩的,這個時候可以調用torch.optim

方法二:使用torch.optim

import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.optim as optim
# 這裏假設我們定義了一個網絡,爲net
steps = 10000
# 定義一個optim對象
optimizer = optim.SGD(net.parameters(), lr = 0.01)
# 在for循環中更新參數
for i in range(steps):
 optimizer.zero_grad() # 對網絡中參數當前的導數置0
 output = net(input) # 網絡前向計算
 loss = criterion(output, target) # 計算損失
 loss.backward() # 得到模型中參數對當前輸入的梯度
 optimizer.step() # 更新參數

注意:torch.optim只用於參數更新和對參數的梯度置0,不能計算參數的梯度,在使用torch.optim進行參數更新之前,需要寫前向與反向傳播求導的代碼

以上這篇Pytorch反向求導更新網絡參數的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章