亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PyTorch中model.zero_grad與optimizer.zero_grad的使用

發布時間:2020-06-26 13:43:12 來源:億速云 閱讀:2027 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關PyTorch中model.zero_grad與optimizer.zero_grad的使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

廢話不多說,直接上代碼吧~

model.zero_grad()
optimizer.zero_grad()

首先,這兩種方式都是把模型中參數的梯度設為0

當optimizer = optim.Optimizer(net.parameters())時,二者等效,其中Optimizer可以是Adam、SGD等優化器

def zero_grad(self):
 """Sets gradients of all model parameters to zero."""
 for p in self.parameters():
  if p.grad is not None:
  p.grad.data.zero_()

補充知識:Pytorch中的optimizer.zero_grad和loss和net.backward和optimizer.step的理解

引言

一般訓練神經網絡,總是逃不開optimizer.zero_grad之后是loss(后面有的時候還會寫forward,看你網絡怎么寫了)之后是是net.backward之后是optimizer.step的這個過程。

real_a, real_b = batch[0].to(device), batch[1].to(device)

fake_b = net_g(real_a)
optimizer_d.zero_grad()

# 判別器對虛假數據進行訓練
fake_ab = torch.cat((real_a, fake_b), 1)
pred_fake = net_d.forward(fake_ab.detach())
loss_d_fake = criterionGAN(pred_fake, False)

# 判別器對真實數據進行訓練
real_ab = torch.cat((real_a, real_b), 1)
pred_real = net_d.forward(real_ab)
loss_d_real = criterionGAN(pred_real, True)

# 判別器損失
loss_d = (loss_d_fake + loss_d_real) * 0.5

loss_d.backward()
optimizer_d.step()

上面這是一段cGAN的判別器訓練過程。標題中所涉及到的這些方法,其實整個神經網絡的參數更新過程(特別是反向傳播),具體是怎么操作的,我們一起來探討一下。

參數更新和反向傳播

PyTorch中model.zero_grad與optimizer.zero_grad的使用

上圖為一個簡單的梯度下降示意圖。比如以SGD為例,是算一個batch計算一次梯度,然后進行一次梯度更新。這里梯度值就是對應偏導數的計算結果。顯然,我們進行下一次batch梯度計算的時候,前一個batch的梯度計算結果,沒有保留的必要了。所以在下一次梯度更新的時候,先使用optimizer.zero_grad把梯度信息設置為0。

我們使用loss來定義損失函數,是要確定優化的目標是什么,然后以目標為頭,才可以進行鏈式法則和反向傳播。

調用loss.backward方法時候,Pytorch的autograd就會自動沿著計算圖反向傳播,計算每一個葉子節點的梯度(如果某一個變量是由用戶創建的,則它為葉子節點)。使用該方法,可以計算鏈式法則求導之后計算的結果值。

optimizer.step用來更新參數,就是圖片中下半部分的w和b的參數更新操作。

上述就是小編為大家分享的PyTorch中model.zero_grad與optimizer.zero_grad的使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建阳市| 黎城县| 吕梁市| 安塞县| 都昌县| 寿光市| 焉耆| 南召县| 潜江市| 长汀县| 武山县| 保康县| 双鸭山市| 西安市| 永清县| 桑植县| 伊宁市| 淮南市| 都匀市| 天镇县| 淮阳县| 丽江市| 邹城市| 郑州市| 海晏县| 黑河市| 泽州县| 阿荣旗| 延庆县| 陈巴尔虎旗| 齐齐哈尔市| 三门县| 于都县| 盈江县| 临泽县| 独山县| 盘锦市| 深泽县| 铜鼓县| 蒲城县| 方山县|