簡介
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)
學習率
梯度下降:
可以看出,如果沒有學習率,損失值並不會收斂,很容易梯度爆炸
修正之後的公式:
學習率(learning rate)控更新的步伐
動量(Momentum)
Momentum(動量、衝量):結合當前梯度與上一次更新信息,用於當前更新
個人看法:可以看到這個式子認爲,100這個點對應的更新量是和之前的所有點的值有關,只不過裏100這個點越近的點,權值越大,有點類似於自控原理裏面的主導極點
動量值通常取0.9
常用的優化器
1.optim.SGD
2.推薦使用SGD和Adam