日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim

發布時間:2024/10/8 154 豆豆
生活随笔 收集整理的這篇文章主要介紹了 torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前文傳送門:

從零開始深度學習Pytorch筆記(1)——安裝Pytorch

從零開始深度學習Pytorch筆記(2)——張量的創建(上)

從零開始深度學習Pytorch筆記(3)——張量的創建(下)

從零開始深度學習Pytorch筆記(4)——張量的拼接與切分

從零開始深度學習Pytorch筆記(5)——張量的索引與變換

從零開始深度學習Pytorch筆記(6)——張量的數學運算

從零開始深度學習Pytorch筆記(7)—— 使用Pytorch實現線性回歸

從零開始深度學習Pytorch筆記(8)—— 計算圖與自動求導(上)

從零開始深度學習Pytorch筆記(9)—— 計算圖與自動求導(下)

從零開始深度學習Pytorch筆記(10)—— Dataset類

從零開始深度學習Pytorch筆記(11)—— DataLoader類

從零開始深度學習Pytorch筆記(12)—— nn.Module在該系列的上一篇,我們講解了nn.Module類,本篇我們來聊聊torch.optim。在機器學習和深度學習中,我們在訓練階段通常要不斷修改調整參數,使得損失函數最小化,優化算法是一種調整模型參數更新的策略。torch.optim是一個實現各種優化算法的包,大多數常見的的算法都能夠直接通過這個包來調用,例如隨機梯度下降,加入了動量的隨機梯度下降等等。為了使用torch.optim,你需要構建一個optimizer對象。然后,你可以設置optimizer的參數選項,比如學習率,權重衰減,等等。這個對象能夠保持當前參數狀態并基于計算得到的梯度進行參數更新。optimizer?=?optim.SGD(model.parameters(),?lr?=?0.01,?momentum=0.9)optimizer?=?optim.Adam([var1,?var2],?lr?=?0.0001)所有的optimizer都實現了step()方法,這個方法會更新所有的參數。它能按兩種方式來使用:(1)optimizer.step()這是大多數optimizer所支持的簡化版本。一旦梯度被如backward()之類的函數計算好后,我們就可以調用這個函數。#例如:for?input,?target?in?dataset:???optimizer.zero_grad()???output?=?model(input)???loss?=?loss_fn(output,?target)???loss.backward()???optimizer.step()以上代碼的含義是,在每次循環數據集迭代時,首先將優化器初始化清空梯度,然后執行前向傳播,計算損失值,誤差反向傳播,最后更新參數。(2)optimizer.step(closure)一些優化算法例如Conjugate Gradient和LBFGS需要重復多次計算函數,因此你需要傳入一個閉包去允許它們重新計算你的模型。這個閉包應當清空梯度, 計算損失,然后返回。#例如:for?input,?target?in?dataset:????def?closure():????????optimizer.zero_grad()????????output?=?model(input)????????loss?=?loss_fn(output,?target)????????loss.backward()????????return?loss????optimizer.step(closure)我們介紹幾種優化算法和使用的方法:隨機梯度下降:Stochastic Gradient Descent (SGD)SGD算法是從樣本中隨機抽出一組,訓練后按梯度更新一次,然后再抽取一組,再更新一次,在樣本量及其大的情況下,可能不用訓練完所有的樣本就可以獲得一個損失值在可接受范圍之內的模型了。opt_SGD?=?torch.optim.SGD(params,?lr=,?momentum=0,?dampening=0,?weight_decay=0,?nesterov=False)參數:params (iterable) – 待優化參數的iterable或者是定義了參數組的dictlr (float) – 學習率momentum (float, 可選) – 動量因子(默認:0)weight_decay (float, 可選) – 權重衰減(L2懲罰)(默認:0)dampening (float, 可選) – 動量的抑制因子(默認:0)nesterov (bool, 可選) – 使用Nesterov動量(默認:False)動量梯度下降:Momentum此時的梯度不再只是當前數據的梯度,而是有一定權重的之前的梯度。要是當前時刻的梯度與歷史時刻梯度方向相似,這種趨勢在當前時刻則會加強;要是不同,則當前時刻的梯度方向減弱。opt_Momentum?=?torch.optim.SGD(params,?lr=,?momentum=0.9,?dampening=0,?weight_decay=0,?nesterov=False)參數:params (iterable) – 待優化參數的iterable或者是定義了參數組的dictlr (float) – 學習率momentum (float, 可選) – 動量因子(默認:0)weight_decay (float, 可選) – 權重衰減(L2懲罰)(默認:0)dampening (float, 可選) – 動量的抑制因子(默認:0)nesterov (bool, 可選) – 使用Nesterov動量(默認:False)Adagrad優化學習率Adagrad使學習率適應不同的梯度:梯度越大越陡峭學習率越小,希望步子邁小一點(不希望越過最低點所以步子要小一點),梯度越小越平坦學習率越大希望步子邁大一點。隨著時間的推移步長會衰減到0。opt_Adagrad?=?torch.optim.Adagrad(params,?lr=0.01,?lr_decay=0,?weight_decay=0)參數:params (iterable) – 待優化參數的iterable或者是定義了參數組的dictlr (float, 可選) – 學習率(默認: 1e-2)lr_decay (float, 可選) – 學習率衰減(默認: 0)weight_decay (float, 可選) – 權重衰減(L2懲罰)(默認: 0)RMSProp(root mean square prop)因為Adagrad算法會出現提前停止的現象,所以在RMSProp算法中解決了這個問題,它采用指數加權平均的思想,只將最近的梯度進行累加計算平方。opt_RMSprop?=?torch.optim.RMSprop(params,?lr=0.01,?alpha=0.99,?eps=1e-08,?weight_decay=0,?momentum=0,?centered=False)參數:params (iterable) – 待優化參數的iterable或者是定義了參數組的dictlr (float, 可選) – 學習率(默認:1e-2)momentum (float, 可選) – 動量因子(默認:0)alpha (float, 可選) – 平滑常數(默認:0.99)eps (float, 可選) – 為了增加數值計算的穩定性而加到分母里的項(默認:1e-8)centered (bool, 可選) – 如果為True,計算中心化的RMSProp,并且用它的方差預測值對梯度進行歸一化weight_decay (float, 可選) – 權重衰減(L2懲罰)(默認: 0)Adamopt_Adam?=?torch.optim.Adam(params,?lr=0.001,?betas=(0.9,?0.999),?eps=1e-08,?weight_decay=0)參數:params (iterable) – 待優化參數的iterable或者是定義了參數組的dictlr (float, 可選) – 學習率(默認:1e-3)betas (Tuple[float, float], 可選) – 用于計算梯度以及梯度平方的運行平均值的系數(默認:0.9,0.999)eps (float, 可選) – 為了增加數值計算的穩定性而加到分母里的項(默認:1e-8)weight_decay (float, 可選) – 權重衰減(L2懲罰)(默認: 0)例子:optimizer?=?torch.optim.SGD(model.parameters(),?lr=0.1,?momentum=0.9)optimizer.zero_grad()loss_fn(model(input),?target).backward()optimizer.step()SGD 是最普通的優化器, 也可以說沒有加速效果, 而 Momentum 是 SGD 的改良版, 它加入了動量原則. 后面的 RMSprop 又是 Momentum 的升級版. 而 Adam 又是 RMSprop 的升級版。并不是越先進的優化器, 結果越佳. 我們在自己的試驗中可以嘗試不同的優化器, 找到那個最適合你數據/網絡的優化器。本文主要給出了在Pytorch中如何使用這些優化算法,并給出了可調的參數,之后有機會可以仔細講講這幾個優化算法的數學原理。歡迎關注公眾號學習之后的深度學習連載部分~歷史文章推薦閱讀:從零開始學自然語言處理(六)—— 命名實體識別從零開始學自然語言處理(五)—— 詞性標注從零開始學自然語言處理(四)—— 做 NLP 任務文本 id 化與預訓練詞向量初始化方法從零開始學自然語言處理(三)——手把手帶你實現word2vec(skip-gram)從零開始學自然語言處理(二)——手把手帶你用代碼實現word2vec從零開始學自然語言處理(一)—— jieba 分詞你不知道的Python環境管理技巧,超級好用!Python快速安裝庫的靠譜辦法你只會用Python的pip安裝包?別錯過這些好用功能!掃碼下圖關注我們不會讓你失望!喜歡記得點再看哦,證明你來看過~

總結

以上是生活随笔為你收集整理的torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。