PyTorch官方中文文档:torch.optim 优化器参数
- step(closure) 進(jìn)行單次優(yōu)化 (參數(shù)更新). 參數(shù): closure (callable) –...~
- 參數(shù): params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的...~
- 參數(shù): params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的...~
?
torch.optim
?
torch.optim是一個(gè)實(shí)現(xiàn)了各種優(yōu)化算法的庫(kù)。大部分常用的方法得到支持,并且接口具備足夠的通用性,使得未來(lái)能夠集成更加復(fù)雜的方法。
?
如何使用optimizer
?
為了使用torch.optim,你需要構(gòu)建一個(gè)optimizer對(duì)象。這個(gè)對(duì)象能夠保持當(dāng)前參數(shù)狀態(tài)并基于計(jì)算得到的梯度進(jìn)行參數(shù)更新。
?
構(gòu)建
?
為了構(gòu)建一個(gè)Optimizer,你需要給它一個(gè)包含了需要優(yōu)化的參數(shù)(必須都是Variable對(duì)象)的iterable。然后,你可以設(shè)置optimizer的參
數(shù)選項(xiàng),比如學(xué)習(xí)率,權(quán)重衰減,等等。
?
例子:
?
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)
?
為每個(gè)參數(shù)單獨(dú)設(shè)置選項(xiàng)
?
Optimizer也支持為每個(gè)參數(shù)單獨(dú)設(shè)置選項(xiàng)。若想這么做,不要直接傳入Variable的iterable,而是傳入dict的iterable。每一個(gè)dict都分別定
義了一組參數(shù),并且包含一個(gè)param鍵,這個(gè)鍵對(duì)應(yīng)參數(shù)的列表。其他的鍵應(yīng)該optimizer所接受的其他參數(shù)的關(guān)鍵字相匹配,并且會(huì)被用于對(duì)這組參數(shù)的
優(yōu)化。
?
注意:
?
你仍然能夠傳遞選項(xiàng)作為關(guān)鍵字參數(shù)。在未重寫這些選項(xiàng)的組中,它們會(huì)被用作默認(rèn)值。當(dāng)你只想改動(dòng)一個(gè)參數(shù)組的選項(xiàng),但其他參數(shù)組的選項(xiàng)不變時(shí),這是
非常有用的。
?
例如,當(dāng)我們想指定每一層的學(xué)習(xí)率時(shí),這是非常有用的:
?
optim.SGD([{'params': model.base.parameters()},{'params': model.classifier.parameters(), 'lr': 1e-3}], lr=1e-2, momentum=0.9)
?
這意味著model.base的參數(shù)將會(huì)使用1e-2的學(xué)習(xí)率,model.classifier的參數(shù)將會(huì)使用1e-3的學(xué)習(xí)率,并且0.9的momentum將會(huì)被用于所
有的參數(shù)。
?
進(jìn)行單次優(yōu)化
?
所有的optimizer都實(shí)現(xiàn)了step()方法,這個(gè)方法會(huì)更新所有的參數(shù)。它能按兩種方式來(lái)使用:
?
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()
?
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 lossoptimizer.step(closure)
?
算法
?
class torch.optim.Optimizer(params, defaults) [source]
?
Base class for all optimizers.
?
參數(shù):
?
-
- params (iterable) ——?
Variable?或者?dict的iterable。指定了什么參數(shù)應(yīng)當(dāng)被優(yōu)化。
- params (iterable) ——?
?
-
- defaults —— (dict):包含了優(yōu)化選項(xiàng)默認(rèn)值的字典(一個(gè)參數(shù)組沒(méi)有指定的參數(shù)選項(xiàng)將會(huì)使用默認(rèn)值)。
?
?
load_state_dict(state_dict) [source]
?
加載optimizer狀態(tài)
?
參數(shù):
?
state_dict (dict) —— optimizer的狀態(tài)。應(yīng)當(dāng)是一個(gè)調(diào)用state_dict()所返回的對(duì)象。
?
state_dict() [source]
?
以dict返回optimizer的狀態(tài)。
?
它包含兩項(xiàng)。
?
-
- state – 一個(gè)保存了當(dāng)前優(yōu)化狀態(tài)的dict。optimizer的類別不同,state的內(nèi)容也會(huì)不同。
?
-
- param_groups – 一個(gè)包含了全部參數(shù)組的dict。
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
zero_grad() [source]
?
清空所有被優(yōu)化過(guò)的Variable的梯度.
?
class torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)[source]
?
實(shí)現(xiàn)Adadelta算法。
?
它在ADADELTA: An Adaptive Learning Rate Method.中被提出。
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- rho (
float, 可選) – 用于計(jì)算平方梯度的運(yùn)行平均值的系數(shù)(默認(rèn):0.9)
- rho (
?
-
- eps (
float, 可選) – 為了增加數(shù)值計(jì)算的穩(wěn)定性而加到分母里的項(xiàng)(默認(rèn):1e-6)
- eps (
?
-
- lr (
float, 可選) – 在delta被應(yīng)用到參數(shù)更新之前對(duì)它縮放的系數(shù)(默認(rèn):1.0)
- lr (
?
-
- weight_decay (
float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)
- weight_decay (
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0)[source]
?
實(shí)現(xiàn)Adagrad算法。
?
它在?Adaptive Subgradient Methods for Online Learning and Stochastic Optimization中被提出。
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- lr (
float, 可選) – 學(xué)習(xí)率(默認(rèn): 1e-2)
- lr (
?
-
- lr_decay (
float, 可選) – 學(xué)習(xí)率衰減(默認(rèn): 0)
- lr_decay (
?
-
- weight_decay (
float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)
- weight_decay (
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]
?
實(shí)現(xiàn)Adam算法。
?
它在Adam: A Method for Stochastic Optimization中被提出。
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- lr (
float, 可選) – 學(xué)習(xí)率(默認(rèn):1e-3)
- lr (
?
-
- betas (Tuple[
float,?float], 可選) – 用于計(jì)算梯度以及梯度平方的運(yùn)行平均值的系數(shù)(默認(rèn):0.9,0.999)
- betas (Tuple[
?
-
- eps (
float, 可選) – 為了增加數(shù)值計(jì)算的穩(wěn)定性而加到分母里的項(xiàng)(默認(rèn):1e-8)
- eps (
?
-
- weight_decay (
float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)
- weight_decay (
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]
?
實(shí)現(xiàn)Adamax算法(Adam的一種基于無(wú)窮范數(shù)的變種)。
?
它在Adam: A Method for Stochastic Optimization中被提出。
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- lr (
float, 可選) – 學(xué)習(xí)率(默認(rèn):2e-3)
- lr (
?
-
- betas (Tuple[
float,?float], 可選) – 用于計(jì)算梯度以及梯度平方的運(yùn)行平均值的系數(shù)
- betas (Tuple[
?
-
- eps (
float, 可選) – 為了增加數(shù)值計(jì)算的穩(wěn)定性而加到分母里的項(xiàng)(默認(rèn):1e-8)
- eps (
?
-
- weight_decay (
float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)
- weight_decay (
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)[source]
?
實(shí)現(xiàn)平均隨機(jī)梯度下降算法。
?
它在Acceleration of stochastic approximation by averaging中被提出。
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- lr (
float, 可選) – 學(xué)習(xí)率(默認(rèn):1e-2)
- lr (
?
-
- lambd (
float, 可選) – 衰減項(xiàng)(默認(rèn):1e-4)
- lambd (
?
-
- alpha (
float, 可選) – eta更新的指數(shù)(默認(rèn):0.75)
- alpha (
?
-
- t0 (
float, 可選) – 指明在哪一次開(kāi)始平均化(默認(rèn):1e6)
- t0 (
?
-
- weight_decay (
float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)
- weight_decay (
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-05, tolerance_change=1e-09, history_size=100, line_search_fn=None)[source]
?
實(shí)現(xiàn)L-BFGS算法。
?
警告
?
這個(gè)optimizer不支持為每個(gè)參數(shù)單獨(dú)設(shè)置選項(xiàng)以及不支持參數(shù)組(只能有一個(gè))
?
警告
?
目前所有的參數(shù)不得不都在同一設(shè)備上。在將來(lái)這會(huì)得到改進(jìn)。
?
注意
?
這是一個(gè)內(nèi)存高度密集的optimizer(它要求額外的param_bytes * (history_size + 1)?個(gè)字節(jié))。如果它不適應(yīng)內(nèi)存,嘗試減小history size,或者使用不同的算法。
?
參數(shù):
?
-
- lr (
float) – 學(xué)習(xí)率(默認(rèn):1)
- lr (
?
-
- max_iter (
int) – 每一步優(yōu)化的最大迭代次數(shù)(默認(rèn):20))
- max_iter (
?
-
- max_eval (
int) – 每一步優(yōu)化的最大函數(shù)評(píng)價(jià)次數(shù)(默認(rèn):max * 1.25)
- max_eval (
?
-
- tolerance_grad (
float) – 一階最優(yōu)的終止容忍度(默認(rèn):1e-5)
- tolerance_grad (
?
-
- tolerance_change (
float) – 在函數(shù)值/參數(shù)變化量上的終止容忍度(默認(rèn):1e-9)
- tolerance_change (
?
-
- history_size (
int) – 更新歷史的大小(默認(rèn):100)
- history_size (
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)[source]
?
實(shí)現(xiàn)RMSprop算法。
?
由G. Hinton在他的課程中提出.
?
中心版本首次出現(xiàn)在Generating Sequences With Recurrent Neural Networks.
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- lr (
float, 可選) – 學(xué)習(xí)率(默認(rèn):1e-2)
- lr (
?
-
- momentum (
float, 可選) – 動(dòng)量因子(默認(rèn):0)
- momentum (
?
-
- alpha (
float, 可選) – 平滑常數(shù)(默認(rèn):0.99)
- alpha (
?
-
- eps (
float, 可選) – 為了增加數(shù)值計(jì)算的穩(wěn)定性而加到分母里的項(xiàng)(默認(rèn):1e-8)
- eps (
?
-
- centered (
bool, 可選) – 如果為True,計(jì)算中心化的RMSProp,并且用它的方差預(yù)測(cè)值對(duì)梯度進(jìn)行歸一化
- centered (
?
-
- weight_decay (
float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn): 0)
- weight_decay (
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))[source]
?
實(shí)現(xiàn)彈性反向傳播算法。
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- lr (
float, 可選) – 學(xué)習(xí)率(默認(rèn):1e-2)
- lr (
?
-
- etas (Tuple[
float,?float], 可選) – 一對(duì)(etaminus,etaplis), 它們分別是乘法的增加和減小的因子(默認(rèn):0.5,1.2)
- etas (Tuple[
?
-
- step_sizes (Tuple[
float,?float], 可選) – 允許的一對(duì)最小和最大的步長(zhǎng)(默認(rèn):1e-6,50)
- step_sizes (Tuple[
?
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)[source]
?
實(shí)現(xiàn)隨機(jī)梯度下降算法(momentum可選)。
?
Nesterov動(dòng)量基于On the importance of initialization and momentum in deep learning中的公式.
?
參數(shù):
?
-
- params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
?
-
- lr (
float) – 學(xué)習(xí)率
- lr (
?
-
- momentum (
float, 可選) – 動(dòng)量因子(默認(rèn):0)
- momentum (
?
-
- weight_decay (
float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn):0)
- weight_decay (
?
-
- dampening (
float, 可選) – 動(dòng)量的抑制因子(默認(rèn):0)
- dampening (
?
-
- nesterov (
bool, 可選) – 使用Nesterov動(dòng)量(默認(rèn):False)
- nesterov (
?
?
例子:
?
>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
>>> optimizer.zero_grad()
>>> loss_fn(model(input), target).backward()
>>> optimizer.step()
?
Note
?
帶有動(dòng)量/Nesterov的SGD的實(shí)現(xiàn)稍微不同于Sutskever等人以及其他框架中的實(shí)現(xiàn)。
?
考慮動(dòng)量的具體情況,更新可以寫成
?
v=ρ?v+g
?
p=p?lr?v
?
其中,p、g、v和ρ分別是參數(shù)、梯度、速度和動(dòng)量。
?
這跟Sutskever等人以及其他框架的實(shí)現(xiàn)是相反的,它們采用這樣的更新
?
v=ρ?v+lr?g
?
p=p?v
?
Nesterov的版本也類似地被修改了。
?
step(closure) [source]
?
進(jìn)行單次優(yōu)化 (參數(shù)更新).
?
參數(shù):
?
-
- closure (
callable) – 一個(gè)重新評(píng)價(jià)模型并返回loss的閉包,對(duì)于大多數(shù)參數(shù)來(lái)說(shuō)是可選的。
- closure (
?
?
艾伯特(http://www.aibbt.com/)國(guó)內(nèi)第一家人工智能門戶
?
?
?
以上就是:PyTorch官方中文文檔:torch.optim?的全部?jī)?nèi)容。
本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng)和用戶投稿,如有侵權(quán)請(qǐng)聯(lián)系我們刪除,謝謝。
Email:server@01hai.com
?
總結(jié)
以上是生活随笔為你收集整理的PyTorch官方中文文档:torch.optim 优化器参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: How does SGD weight_
- 下一篇: Pycharm中Python PEP8