国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Pytorch 中的optimizer使用說明

Pytorch 中的optimizer使用說明

2021-09-13 00:36gdymind Python

這篇文章主要介紹了Pytorch 中的optimizer使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

與優(yōu)化函數(shù)相關(guān)的部分在torch.optim模塊中,其中包含了大部分現(xiàn)在已有的流行的優(yōu)化方法。

如何使用Optimizer

要想使用optimizer,需要創(chuàng)建一個optimizer 對象,這個對象會保存當(dāng)前狀態(tài),并根據(jù)梯度更新參數(shù)。

怎樣構(gòu)造Optimizer

要構(gòu)造一個Optimizer,需要使用一個用來包含所有參數(shù)(Tensor形式)的iterable,把相關(guān)參數(shù)(如learning rate、weight decay等)裝進(jìn)去。

注意,如果想要使用.cuda()方法來將model移到GPU中,一定要確保這一步在構(gòu)造Optimizer之前。因為調(diào)用.cuda()之后,model里面的參數(shù)已經(jīng)不是之前的參數(shù)了。

示例代碼如下:

?
1
2
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum = 0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)

常用參數(shù)

last_epoch代表上一次的epoch的值,初始值為-1。

單獨指定參數(shù)

也可以用一個dict的iterable指定參數(shù)。這里的每個dict都必須要params這個key,params包含它所屬的參數(shù)列表。除此之外的key必須它的Optimizer(如SGD)里面有的參數(shù)。

You can still pass options as keyword arguments. They will be used as defaults, in the groups that didn't override them. This is useful when you only want to vary a single option, while keeping all others consistent between parameter groups.

這在針對特定部分進(jìn)行操作時很有用。比如只希望給指定的幾個層單獨設(shè)置學(xué)習(xí)率:

?
1
2
3
4
5
6
optim.SGD([
  {'params': model.base.parameters()},
  {'params': model.classifier.parameters(), 'lr': 0.001}
  ],
  
  lr = 0.01, momentum = 0.9)

在上面這段代碼中model.base將會使用默認(rèn)學(xué)習(xí)率0.01,而model.classifier的參數(shù)蔣歡使用0.001的學(xué)習(xí)率。

怎樣進(jìn)行單次優(yōu)化

所有optimizer都實現(xiàn)了step()方法,調(diào)用這個方法可以更新參數(shù),這個方法有以下兩種使用方法:

optimizer.step()

多數(shù)optimizer里都可以這么做,每次用backward()這類的方法計算出了梯度后,就可以調(diào)用一次這個方法來更新參數(shù)。

示例程序:

?
1
2
3
4
5
6
for input, target in dataset:
 optimizer.zero_grad()
 ouput = model(input)
 loss = loss_fn(output, target)
 loss.backward()
 optimizer.step()

optimizer.step(closure)

有些優(yōu)化算法會多次重新計算函數(shù)(比如Conjugate Gradient、LBFGS),這樣的話你就要使用一個閉包(closure)來支持多次計算model的操作。

這個closure的運(yùn)行過程是,清除梯度,計算loss,返回loss。

(這個我不太理解,因為這些優(yōu)化算法不熟悉)

示例程序:

?
1
2
3
4
5
6
7
8
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)化算法

這里就不完整介紹documentation中的內(nèi)容了,只介紹基類。具體的算法的參數(shù)需要理解它們的原理才能明白,這個改天單獨來一篇文章介紹。

Optimizer

?
1
class torch.optim.Optimizer(params, defaults)

這是所有optimizer的基類。

注意,各參數(shù)的順序必須保證每次運(yùn)行都一致。有些數(shù)據(jù)結(jié)構(gòu)就不滿足這個條件,比如dictionary的iterator和set。

參數(shù)

params(iterable)是torch.Tensor或者dict的iterable。這個參數(shù)指定了需要更新的Tensor。

defaults(dict)是一個dict,它包含了默認(rèn)的的優(yōu)化選項。

方法

?
1
add_param_group(param_group)

這個方法的作用是增加一個參數(shù)組,在fine tuning一個預(yù)訓(xùn)練的網(wǎng)絡(luò)時有用。

?
1
load_state_dict(state_dict)

這個方法的作用是加載optimizer的狀態(tài)。

?
1
state_dict()

獲取一個optimizer的狀態(tài)(一個dict)。

zero_grad()方法用于清空梯度。

step(closure)用于進(jìn)行單次更新。

Adam

?
1
class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)

補(bǔ)充:pytorch里面的Optimizer和optimizer.step()用法

當(dāng)我們想指定每一層的學(xué)習(xí)率時:

?
1
2
3
4
optim.SGD([
          {'params': model.base.parameters()},
          {'params': model.classifier.parameters(), 'lr': 1e-3}
        ], lr=1e-2, momentum=0.9)

這意味著model.base的參數(shù)將會使用1e-2的學(xué)習(xí)率,model.classifier的參數(shù)將會使用1e-3的學(xué)習(xí)率,并且0.9的momentum將會被用于所有的參數(shù)。

進(jìn)行單次優(yōu)化

所有的optimizer都實現(xiàn)了step()方法,這個方法會更新所有的參數(shù)。它能按兩種方式來使用:

?
1
optimizer.step()

這是大多數(shù)optimizer所支持的簡化版本。一旦梯度被如backward()之類的函數(shù)計算好后,我們就可以調(diào)用這個函數(shù)。

例子

?
1
2
3
4
5
6
7
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ù)多次計算函數(shù),因此你需要傳入一個閉包去允許它們重新計算你的模型。

這個閉包應(yīng)當(dāng)清空梯度,計算損失,然后返回。

例子:

?
1
2
3
4
5
6
7
8
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)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。如有錯誤或未考慮完全的地方,望不吝賜教。

原文鏈接:https://blog.csdn.net/gdymind/article/details/82708920

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人午夜视频在线播放 | 欧美三级电影在线播放 | a欧美 | 国产精品美女久久久久久久久久久 | 久久精品国产91精品亚洲高清 | 久久99精品久久久久久园产越南 | 可以免费看黄的网站 | 国产在线拍揄自揄拍视频 | 中文久久久久 | 美日韩一区 | 国产一区 欧美 | 91成人小视频 | 蜜桃视频一区二区 | 亚洲成人精品在线观看 | 全部古装三级在线播放 | 免费观看的av| 山岸逢花在线 | 成人羞羞视频免费 | 免费一级毛片免费播放 | 欧美精品91 | 欧美成年人网站 | 美日韩在线 | 国产二区视频 | 一区二区免费在线播放 | 在线视频 亚洲 | 精品久久中文字幕 | 亚洲一区欧美 | 午夜看片 | 99精品视频在线免费观看 | 欧美日韩一区二区在线播放 | 亚洲国产精品一区久久av篠田 | 国产精品一区二区久久久 | 韩日中文字幕 | 一区二区蜜桃 | 精品福利一区二区三区 | 日韩欧美中文字幕在线视频 | 黄色在线观看网站 | 国产女爽爽视频精品免费 | 欧美日韩成人精品 | 91精品综合久久久久久五月天 | 蜜桃精品在线 |