torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim
生活随笔
收集整理的這篇文章主要介紹了
torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前文傳送門:
從零開始深度學(xué)習(xí)Pytorch筆記(1)——安裝Pytorch
從零開始深度學(xué)習(xí)Pytorch筆記(2)——張量的創(chuàng)建(上)
從零開始深度學(xué)習(xí)Pytorch筆記(3)——張量的創(chuàng)建(下)
從零開始深度學(xué)習(xí)Pytorch筆記(4)——張量的拼接與切分
從零開始深度學(xué)習(xí)Pytorch筆記(5)——張量的索引與變換
從零開始深度學(xué)習(xí)Pytorch筆記(6)——張量的數(shù)學(xué)運(yùn)算
從零開始深度學(xué)習(xí)Pytorch筆記(7)—— 使用Pytorch實(shí)現(xiàn)線性回歸
從零開始深度學(xué)習(xí)Pytorch筆記(8)—— 計(jì)算圖與自動(dòng)求導(dǎo)(上)
從零開始深度學(xué)習(xí)Pytorch筆記(9)—— 計(jì)算圖與自動(dòng)求導(dǎo)(下)
從零開始深度學(xué)習(xí)Pytorch筆記(10)—— Dataset類
從零開始深度學(xué)習(xí)Pytorch筆記(11)—— DataLoader類
從零開始深度學(xué)習(xí)Pytorch筆記(12)—— nn.Module在該系列的上一篇,我們講解了nn.Module類,本篇我們來聊聊torch.optim。在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中,我們?cè)谟?xùn)練階段通常要不斷修改調(diào)整參數(shù),使得損失函數(shù)最小化,優(yōu)化算法是一種調(diào)整模型參數(shù)更新的策略。torch.optim是一個(gè)實(shí)現(xiàn)各種優(yōu)化算法的包,大多數(shù)常見的的算法都能夠直接通過這個(gè)包來調(diào)用,例如隨機(jī)梯度下降,加入了動(dòng)量的隨機(jī)梯度下降等等。為了使用torch.optim,你需要構(gòu)建一個(gè)optimizer對(duì)象。然后,你可以設(shè)置optimizer的參數(shù)選項(xiàng),比如學(xué)習(xí)率,權(quán)重衰減,等等。這個(gè)對(duì)象能夠保持當(dāng)前參數(shù)狀態(tài)并基于計(jì)算得到的梯度進(jìn)行參數(shù)更新。optimizer?=?optim.SGD(model.parameters(),?lr?=?0.01,?momentum=0.9)optimizer?=?optim.Adam([var1,?var2],?lr?=?0.0001)所有的optimizer都實(shí)現(xiàn)了step()方法,這個(gè)方法會(huì)更新所有的參數(shù)。它能按兩種方式來使用:(1)optimizer.step()這是大多數(shù)optimizer所支持的簡(jiǎn)化版本。一旦梯度被如backward()之類的函數(shù)計(jì)算好后,我們就可以調(diào)用這個(gè)函數(shù)。#例如:for?input,?target?in?dataset:???optimizer.zero_grad()???output?=?model(input)???loss?=?loss_fn(output,?target)???loss.backward()???optimizer.step()以上代碼的含義是,在每次循環(huán)數(shù)據(jù)集迭代時(shí),首先將優(yōu)化器初始化清空梯度,然后執(zhí)行前向傳播,計(jì)算損失值,誤差反向傳播,最后更新參數(shù)。(2)optimizer.step(closure)一些優(yōu)化算法例如Conjugate Gradient和LBFGS需要重復(fù)多次計(jì)算函數(shù),因此你需要傳入一個(gè)閉包去允許它們重新計(jì)算你的模型。這個(gè)閉包應(yīng)當(dāng)清空梯度, 計(jì)算損失,然后返回。#例如: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)我們介紹幾種優(yōu)化算法和使用的方法:隨機(jī)梯度下降:Stochastic Gradient Descent (SGD)SGD算法是從樣本中隨機(jī)抽出一組,訓(xùn)練后按梯度更新一次,然后再抽取一組,再更新一次,在樣本量及其大的情況下,可能不用訓(xùn)練完所有的樣本就可以獲得一個(gè)損失值在可接受范圍之內(nèi)的模型了。opt_SGD?=?torch.optim.SGD(params,?lr=,?momentum=0,?dampening=0,?weight_decay=0,?nesterov=False)參數(shù):params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dictlr (float) – 學(xué)習(xí)率momentum (float, 可選) – 動(dòng)量因子(默認(rèn):0)weight_decay (float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn):0)dampening (float, 可選) – 動(dòng)量的抑制因子(默認(rèn):0)nesterov (bool, 可選) – 使用Nesterov動(dòng)量(默認(rèn):False)動(dòng)量梯度下降:Momentum此時(shí)的梯度不再只是當(dāng)前數(shù)據(jù)的梯度,而是有一定權(quán)重的之前的梯度。要是當(dāng)前時(shí)刻的梯度與歷史時(shí)刻梯度方向相似,這種趨勢(shì)在當(dāng)前時(shí)刻則會(huì)加強(qiáng);要是不同,則當(dāng)前時(shí)刻的梯度方向減弱。opt_Momentum?=?torch.optim.SGD(params,?lr=,?momentum=0.9,?dampening=0,?weight_decay=0,?nesterov=False)參數(shù):params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dictlr (float) – 學(xué)習(xí)率momentum (float, 可選) – 動(dòng)量因子(默認(rèn):0)weight_decay (float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn):0)dampening (float, 可選) – 動(dòng)量的抑制因子(默認(rèn):0)nesterov (bool, 可選) – 使用Nesterov動(dòng)量(默認(rèn):False)Adagrad優(yōu)化學(xué)習(xí)率Adagrad使學(xué)習(xí)率適應(yīng)不同的梯度:梯度越大越陡峭學(xué)習(xí)率越小,希望步子邁小一點(diǎn)(不希望越過最低點(diǎn)所以步子要小一點(diǎn)),梯度越小越平坦學(xué)習(xí)率越大希望步子邁大一點(diǎn)。隨著時(shí)間的推移步長(zhǎng)會(huì)衰減到0。opt_Adagrad?=?torch.optim.Adagrad(params,?lr=0.01,?lr_decay=0,?weight_decay=0)參數(shù):params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dictlr (float, 可選) – 學(xué)習(xí)率(默認(rèn): 1e-2)lr_decay (float, 可選) – 學(xué)習(xí)率衰減(默認(rèn): 0)weight_decay (float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)RMSProp(root mean square prop)因?yàn)锳dagrad算法會(huì)出現(xiàn)提前停止的現(xiàn)象,所以在RMSProp算法中解決了這個(gè)問題,它采用指數(shù)加權(quán)平均的思想,只將最近的梯度進(jìn)行累加計(jì)算平方。opt_RMSprop?=?torch.optim.RMSprop(params,?lr=0.01,?alpha=0.99,?eps=1e-08,?weight_decay=0,?momentum=0,?centered=False)參數(shù):params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dictlr (float, 可選) – 學(xué)習(xí)率(默認(rèn):1e-2)momentum (float, 可選) – 動(dòng)量因子(默認(rèn):0)alpha (float, 可選) – 平滑常數(shù)(默認(rèn):0.99)eps (float, 可選) – 為了增加數(shù)值計(jì)算的穩(wěn)定性而加到分母里的項(xiàng)(默認(rèn):1e-8)centered (bool, 可選) – 如果為True,計(jì)算中心化的RMSProp,并且用它的方差預(yù)測(cè)值對(duì)梯度進(jìn)行歸一化weight_decay (float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)Adamopt_Adam?=?torch.optim.Adam(params,?lr=0.001,?betas=(0.9,?0.999),?eps=1e-08,?weight_decay=0)參數(shù):params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dictlr (float, 可選) – 學(xué)習(xí)率(默認(rèn):1e-3)betas (Tuple[float, float], 可選) – 用于計(jì)算梯度以及梯度平方的運(yùn)行平均值的系數(shù)(默認(rèn):0.9,0.999)eps (float, 可選) – 為了增加數(shù)值計(jì)算的穩(wěn)定性而加到分母里的項(xiàng)(默認(rèn):1e-8)weight_decay (float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 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 是最普通的優(yōu)化器, 也可以說沒有加速效果, 而 Momentum 是 SGD 的改良版, 它加入了動(dòng)量原則. 后面的 RMSprop 又是 Momentum 的升級(jí)版. 而 Adam 又是 RMSprop 的升級(jí)版。并不是越先進(jìn)的優(yōu)化器, 結(jié)果越佳. 我們?cè)谧约旱脑囼?yàn)中可以嘗試不同的優(yōu)化器, 找到那個(gè)最適合你數(shù)據(jù)/網(wǎng)絡(luò)的優(yōu)化器。本文主要給出了在Pytorch中如何使用這些優(yōu)化算法,并給出了可調(diào)的參數(shù),之后有機(jī)會(huì)可以仔細(xì)講講這幾個(gè)優(yōu)化算法的數(shù)學(xué)原理。歡迎關(guān)注公眾號(hào)學(xué)習(xí)之后的深度學(xué)習(xí)連載部分~歷史文章推薦閱讀:從零開始學(xué)自然語言處理(六)—— 命名實(shí)體識(shí)別從零開始學(xué)自然語言處理(五)—— 詞性標(biāo)注從零開始學(xué)自然語言處理(四)—— 做 NLP 任務(wù)文本 id 化與預(yù)訓(xùn)練詞向量初始化方法從零開始學(xué)自然語言處理(三)——手把手帶你實(shí)現(xiàn)word2vec(skip-gram)從零開始學(xué)自然語言處理(二)——手把手帶你用代碼實(shí)現(xiàn)word2vec從零開始學(xué)自然語言處理(一)—— jieba 分詞你不知道的Python環(huán)境管理技巧,超級(jí)好用!Python快速安裝庫的靠譜辦法你只會(huì)用Python的pip安裝包?別錯(cuò)過這些好用功能!掃碼下圖關(guān)注我們不會(huì)讓你失望!喜歡記得點(diǎn)再看哦,證明你來看過~總結(jié)
以上是生活随笔為你收集整理的torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恒生指数期货如何交易
- 下一篇: 脑电信号特征提取算法c语言_应用深度学习