PyTorch常見的優化器

2021-10-10 16:41:55 字數 3718 閱讀 4661

用法pytorch學習率調整策略通過torch.optim.lr_scheduler介面實現。torch.optim是乙個實現了各種優化演算法的庫。大部分常用的方法得到支援,並且介面具備足夠的通用性,使得未來能夠整合更加複雜的方法。

參考連線:

首先需要構建乙個optimizer物件。這個物件能夠保持當前引數狀態並基於計算得到的梯度進行引數更新。當然構建的optimizer,必須是variable物件的iterable,而且是可以傳入優化引數的型別。例如可以設定學習率,權重衰減,等等。

optimizer = optim.sgd(model.parameters(

), lr =

0.01

, momentum=

0.9)

optimizer = optim.adam(

[var1, var2]

, lr =

0.0001

)

當我們想指定每一層的學習率時,我們可以這樣做,不要直接傳入variable的iterable,而是傳入dict的iterable。每乙個dict都分別定 義了一組引數,並且包含乙個param鍵,這個鍵對應引數的列表。其他的鍵應該optimizer所接受的其他引數的關鍵字相匹配,並且會被用於對這組引數的 優化。

# model.base的引數將會使用1e-2的學習率,model.classifier的引數將會使用1e-3的學習率,並且0.9的momentum將會被用於所 有的引數。

optim.sgd([,

], lr=1e-

2, momentum=

0.9)

所有的optimizer都實現了step()方法,這個方法會更新所有的引數。它能按兩種方式來使用:

optimizer.step(

)

一旦梯度被如backward()之類的函式計算好後,我們就可以呼叫這個函式。

for

input

, target in dataset:

optimizer.zero_grad(

) output = model(

input

) loss = loss_fn(output, target)

loss.backward(

) optimizer.step(

)

一些優化演算法例如conjugate gradient和lbfgs需要重複多次計算函式,因此你需要傳入乙個閉包去允許它們重新計算你的模型。這個閉包應當清空梯度, 計算損失,然後返回。

class torch.optim.adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)[source]params (iterable) – 待優化引數的iterable或者是定義了引數組的dict

rho (float, 可選) – 用於計算平方梯度的執行平均值的係數(預設:0.9)

eps (float, 可選) – 為了增加數值計算的穩定性而加到分母裡的項(預設:1e-6)

lr (float, 可選) – 在delta被應用到引數更新之前對它縮放的係數(預設:1.0)

weight_decay (float, 可選) – 權重衰減(l2懲罰)(預設: 0)

params (iterable)

待優化引數的iterable或者是定義了引數組的dict

rho (float, 可選)

用於計算平方梯度的執行平均值的係數(預設:0.9)

lr (float, 可選)

為了增加數值計算的穩定性而加到分母裡的項(預設:1e-6)

weight_decay (float, 可選)

權重衰減(l2懲罰)(預設: 0)

PyTorch自定義優化器

簡單粗暴的方法直接更新引數 def myopt pre pre儲存當前梯度與歷史梯度方向是否一致的資訊 lr lr儲存各層各引數學習率 vdw vdw儲存各層各引數動量 y pred net x loss loss func y pred,y net.zero grad loss.backward ...

Pytorch框架學習(11) 優化器

pytorch的優化器 管理並更新模型中可學習引數的值,使得模型輸出更接近真實標籤 基本方法 optim.sgd 隨機梯度下降法 optim.adagrad 自適應學習率梯度下降法 optim.rmsprop adagrad的改進 optim.adadelta adagrad的改進 optim.ad...

Pytorch中adam優化器的引數問題

之前用的adam優化器一直是這樣的 alpha optim torch.optim.adam model.alphas config.alpha lr,betas 0.5,0.999 weight decay config.alpha weight decay 沒有細想內部引數的問題,但是最近的工作...