Pytorch優化器-Optimizer

簡介

pytorch優化器:管理並更新模型中可學習參數的值,是的模型輸出更接近真實標籤。

導數:函數在指定座標軸上的變化率
方向導數:指定方向上的變化率
梯度:一個向量,方向爲方向導數取得最大值的方向
在這裏插入圖片描述

pytorch中的optimizer

基本屬性:

  • default:優化器超參數
  • state:參數的緩存,如momentum的緩存
  • param_groups:管理的參數組
  • _step_count:記錄更新次數,學習率調整中使用

在這裏插入圖片描述

基本方法

  • zero_grad():清空所管理參數的梯度
    pytorch特性:張量梯度不會自動清零 需要在使用完梯度之後需要清零
  • step():實行一步參數更新
  • add_param_group():添加參數組
  • state_dict():獲取優化器當前狀態信息字典
  • load_state_dict():加載狀態信息字典
    後兩個方法,用於模型斷點狀態訓練
optimizer=optim.SGD(net.parameters(),lr=LR,momentum=0,9) #選擇優化器
scheduler=torch.optim.lr_scheduler.StepLR(optimizer,step_size=10,gamma=0.1) #設施學習率下降策略

保存優化器信息

torch.save(optimizer.state_dict(),os.path.join(BASE_DIR,"optimizer_state_dict.pkl"))


##lode sate_dict
state=torch.load(os.path.join(BASE_DR,"optimizer_state_dict.pkl"))
optimizer.load_sate_dict(state)

學習率

梯度下降:Wi+1=Wig(Wi)W_{i+1}=W_{i}-g(W_{i})
y=f(x)=4x2y=f(x)=8xy=f(x)=4*x^2 \\ y'=f'(x)=8*x

x0=2,y0=16,f(x0)=16x1=x0f(x0)=216=14x1=14,y1=784,f(x1)=112x2=x1f(x1)=14+112=98,y2=38416....x_{0}=2,y_0=16,f'(x_0)=16 \\ x_1=x_0-f'(x_0)=2-16=-14 \\ x_1=-14,y_1=784,f'(x_1)=-112 \\ x_2=x_1-f'(x_1)=-14+112=98,y_2=38416 ....

可以看出,如果沒有學習率,損失值並不會收斂,很容易梯度爆炸
修正之後的公式:Ww+1=WiLRg(Wi)W_{w+1}=W_{i}-LR*g(W_i)

學習率(learning rate)控更新的步伐

動量(Momentum)

Momentum(動量、衝量):結合當前梯度與上一次更新信息,用於當前更新

:vt=vt1+(1β)θt指數加權平均:v_t=v_{t-1}+(1-\beta)*\theta_t

在這裏插入圖片描述
個人看法:可以看到這個式子認爲,100這個點對應的更新量是和之前的所有點的值有關,只不過裏100這個點越近的點,權值越大,有點類似於自控原理裏面的主導極點
在這裏插入圖片描述
動量值通常取0.9

常用的優化器

1.optim.SGD
在這裏插入圖片描述

在這裏插入圖片描述

2.推薦使用SGD和Adam

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