国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

有關(guān)optimizer.param_groups用法的示例分析

這篇具有很好參考價(jià)值的文章主要介紹了有關(guān)optimizer.param_groups用法的示例分析。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Optimizer

optimizer.param_groups用法的示例分析

日期:2022年7月25日

pytorch版本: 1.11.0

對于param_groups的探索

optimizer.param_groups: 是一個(gè)list,其中的元素為字典;

optimizer.param_groups[0]:長度為7的字典,包括[‘params’, ‘lr’, ‘betas’, ‘eps’, ‘weight_decay’, ‘amsgrad’, ‘maximize’]這7個(gè)參數(shù);

下面用的Adam優(yōu)化器創(chuàng)建了一個(gè)optimizer變量:

>>> optimizer.param_groups[0].keys()
>>> dict_keys(['params', 'lr', 'betas', 'eps', 'weight_decay', 'amsgrad', 'maximize'])

可以自己把訓(xùn)練參數(shù)分別賦予不同的學(xué)習(xí)率,這樣子list里就不止一個(gè)元素了,而是多個(gè)字典了。

  • params 是一個(gè)list[…],里面存放參數(shù)

    >>> len(optimizer.param_groups[0]['params'])
    >>> 48
    >>> optimizer.param_groups[0]['params'][0]
    >>> 
    Parameter containing:
    tensor([[ 0.0212, -0.1151,  0.0499,  ..., -0.0807, -0.0572,  0.1166],
            [-0.0356, -0.0397, -0.0980,  ...,  0.0690, -0.1066, -0.0583],
            [ 0.0238,  0.0316, -0.0636,  ...,  0.0754, -0.0891,  0.0258],
            ...,
            [ 0.0603, -0.0173,  0.0627,  ...,  0.0152, -0.0215, -0.0730],
            [-0.1183, -0.0636,  0.0381,  ...,  0.0745, -0.0427, -0.0713],
    
  • lr 是學(xué)習(xí)率

    >>> optimizer.param_groups[0]['lr']
    >>> 0.0005
    
  • betas 是一個(gè)元組(…),與動量相關(guān)

    >>> optimizer.param_groups[0]['betas']
    >>> (0.9, 0.999)
    
  • eps

    >>> optimizer.param_groups[0]['eps']
    >>> 1e-08
    
  • weight_decay 是一個(gè)int變量

    >>> optimizer.param_groups[0]['weight_decay']
    >>> 0
    
  • amsgrad是一個(gè)bool變量

    >>> optimizer.param_groups[0]['amsgrad']
    >>> False
    
  • maximize 是一個(gè)bool變量

    >>> optimizer.param_groups[0]['maximize']
    >>> False
    

以網(wǎng)上的例子來繼續(xù)試驗(yàn):

import torch
import torch.optim as optim


w1 = torch.randn(3, 3)
w1.requires_grad = True
w2 = torch.randn(3, 3)
w2.requires_grad = True
o = optim.Adam([w1])
print(o.param_groups)

# 輸出
>>> 
[{'params': [tensor([[-0.1002,  0.3526, -1.2212],
        			 [-0.4659,  0.0498, -0.2905],
        			 [ 1.1862, -0.6085,  0.4965]], requires_grad=True)],
  'lr': 0.001, 
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'weight_decay': 0,
  'amsgrad': False,
  'maximize': False}]

以下主要是Optimizer這個(gè)類有個(gè)add_param_group的方法

# Per the docs, the add_param_group method accepts a param_group parameter that is a dict. Example of use:

import torch
import torch.optim as optim


w1 = torch.randn(3, 3)
w1.requires_grad = True
w2 = torch.randn(3, 3)
w2.requires_grad = True
o = optim.Adam([w1])
print(o.param_groups)

# 輸出
>>> [{'params': [tensor([[-1.5916, -1.6110, -0.5739],
        [ 0.0589, -0.5848, -0.9199],
        [-0.4206, -2.3198, -0.2062]], requires_grad=True)], 'lr': 0.001, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False, 'maximize': False}]


o.add_param_group({'params': w2})
print(o.param_groups)

# 輸出
>>> [{'params': [tensor([[-1.5916, -1.6110, -0.5739],
        [ 0.0589, -0.5848, -0.9199],
        [-0.4206, -2.3198, -0.2062]], requires_grad=True)], 'lr': 0.001, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False, 'maximize': False}, 
     {'params': [tensor([[-0.5546, -1.2646,  1.6420],
        [ 0.0730, -0.0460, -0.0865],
        [ 0.3043,  0.4203, -0.3607]], requires_grad=True)], 'lr': 0.001, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False, 'maximize': False}]


平時(shí)寫代碼如何動態(tài)修改學(xué)習(xí)率(常規(guī)操作)

for param_group in optimizer.param_groups:
    param_group["lr"] = lr 

補(bǔ)充:pytorch中的優(yōu)化器總結(jié)

SGD優(yōu)化器為例:

from torch import nn as nn
import torch as t
from torch.autograd import Variable as V
from torch import optim  # 優(yōu)化器

# 定義一個(gè)LeNet網(wǎng)絡(luò)
class LeNet(t.nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.features = t.nn.Sequential(
            t.nn.Conv2d(3, 6, 5),
            t.nn.ReLU(),
            t.nn.MaxPool2d(2, 2),
            t.nn.Conv2d(6, 16, 5),
            t.nn.ReLU(),
            t.nn.MaxPool2d(2, 2)
        )
        # 由于調(diào)整shape并不是一個(gè)class層,
        # 所以在涉及這種操作(非nn.Module操作)需要拆分為多個(gè)模型
        self.classifiter = t.nn.Sequential(
            t.nn.Linear(16*5*5, 120),
            t.nn.ReLU(),
            t.nn.Linear(120, 84),
            t.nn.ReLU(),
            t.nn.Linear(84, 10)
        )
        
    def forward(self, x):
        x = self.features(x)
        x = x.view(-1, 16*5*5)
        x = self.classifiter(x)
        return x

net = LeNet()

# 通常的step優(yōu)化過程
optimizer = optim.SGD(params=net.parameters(), lr=1)
optimizer.zero_grad()  # 梯度清零,相當(dāng)于net.zero_grad()

input = V(t.randn(1, 3, 32, 32))
output = net(input)
output.backward(output)  
optimizer.step()  # 執(zhí)行優(yōu)化

為不同的子網(wǎng)絡(luò)參數(shù)不同的學(xué)習(xí)率,finetune常用,使分類器學(xué)習(xí)率參數(shù)更高,學(xué)習(xí)速度更快(理論上)。

1.經(jīng)由構(gòu)建網(wǎng)絡(luò)時(shí)劃分好的模組進(jìn)行學(xué)習(xí)率設(shè)定,

# 為不同子網(wǎng)絡(luò)設(shè)置不同的學(xué)習(xí)率,在finetune中經(jīng)常用到
# 如果對某個(gè)參數(shù)不指定學(xué)習(xí)率,就使用默認(rèn)學(xué)習(xí)率
optimizer = optim.SGD(
    [{'params': net.features.parameters()},  # 學(xué)習(xí)率為1e-5
     {'params': net.classifiter.parameters(), 'lr': 1e-2}], lr=1e-5
)

2.以網(wǎng)絡(luò)層對象為單位進(jìn)行分組,并設(shè)定學(xué)習(xí)率

# 只為兩個(gè)全連接層設(shè)置較大的學(xué)習(xí)率,其余層的學(xué)習(xí)率較小
# 以層為單位,為不同層指定不同的學(xué)習(xí)率

# 提取指定層對象
special_layers = nn.ModuleList([net.classifiter[0], net.classifiter[3]])
# 獲取指定層參數(shù)id
special_layers_params = list(map(id, special_layers.parameters()))
# 獲取非指定層的參數(shù)id
base_params = filter(lambda p: id(p) not in special_layers_params, net.parameters())

optimizer = t.optim.SGD([
    {'params': base_params},
    {'params': special_layers.parameters(), 'lr': 0.01}], lr=0.001)

參考:
https://blog.csdn.net/weixin_43593330/article/details/108490956
https://www.cnblogs.com/hellcat/p/8496727.html
https://www.yisu.com/zixun/456082.html文章來源地址http://www.zghlxwxcb.cn/news/detail-414351.html

到了這里,關(guān)于有關(guān)optimizer.param_groups用法的示例分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Python_requests學(xué)習(xí)筆記(三)】requests模塊中params參數(shù)用法

    【Python_requests學(xué)習(xí)筆記(三)】requests模塊中params參數(shù)用法

    此篇文章中介紹requests模塊中的查詢參數(shù)params的詳細(xì)用法和使用環(huán)境。 1、params參數(shù)介紹 requests模塊發(fā)送請求時(shí),有兩種攜帶參數(shù)的方法:1、params 2、data 其中, params在get請求中使用,data在post請求中使用 params的數(shù)據(jù)類型為字典類型。 2、params參數(shù)作用 對url地址中的查詢參數(shù)進(jìn)

    2024年02月08日
    瀏覽(50)
  • Python正則表達(dá)式中g(shù)roup與groups的用法詳解

    Python正則表達(dá)式中g(shù)roup與groups的用法詳解

    本文主要介紹了Python正則表達(dá)式中g(shù)roup與groups的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 目錄 在Python中,正則表達(dá)式的group和groups方法是非常有用的函數(shù),用于處理匹配結(jié)果

    2024年02月01日
    瀏覽(20)
  • 詳解Python正則表達(dá)式中g(shù)roup與groups的用法

    詳解Python正則表達(dá)式中g(shù)roup與groups的用法

    在Python中,正則表達(dá)式的group和groups方法是非常有用的函數(shù),用于處理匹配結(jié)果的分組信息。 group方法是re.MatchObject類中的一個(gè)函數(shù),用于返回匹配對象的整個(gè)匹配結(jié)果或特定的分組匹配結(jié)果。而groups方法同樣是re.MatchObject類中的函數(shù),它返回的是所有分組匹配結(jié)果組成的元組

    2024年02月13日
    瀏覽(16)
  • torch之optimizer.step() 與 scheduler.step() 的用法

    ??首先需要明確optimzier優(yōu)化器的作用, 形象地來說,優(yōu)化器就是需要根據(jù)網(wǎng)絡(luò)反向傳播的梯度信息來更新網(wǎng)絡(luò)的參數(shù),以起到降低loss函數(shù)計(jì)算值的作用,這也是機(jī)器學(xué)習(xí)里面最一般的方法論。 ??optimizer.step()通常用在每個(gè)mini-batch之中,可以根據(jù)具體的需求來做。只有用了

    2024年02月16日
    瀏覽(24)
  • Vue3:有關(guān)v-model的用法

    Vue3:有關(guān)v-model的用法

    目錄 前言: 回憶基本的原生用法: 原生input的封裝: 自定義v-model參數(shù): 對el-input的二次封裝: 多個(gè)v-model進(jìn)行綁定: v-model修飾符: v-model自定義參數(shù)與自定義修飾符的結(jié)合: ? ? ? ? 提起v-model,想必都不陌生,作為vue的經(jīng)典語法,幫助我們在編寫項(xiàng)目的時(shí)候,省了很多很多

    2024年02月05日
    瀏覽(28)
  • Mysql group by使用示例

    Mysql group by使用示例

    總數(shù)據(jù): 索引情況:

    2024年02月11日
    瀏覽(25)
  • MySQL 中 Group By 的用法

    Group By 是一種 SQL 查詢語句,常用于根據(jù)一個(gè)或多個(gè)列對查詢結(jié)果進(jìn)行分組。在 Group By 子句中指定的列將成為分組依據(jù),而在 Select 子句中指定的列必須是聚合函數(shù)(例如 SUM、AVG、COUNT 等)或分組列。 Group By 的語法如下:? SELECT column_name(s) FROM table_name WHERE condition GROUP BY co

    2024年02月13日
    瀏覽(23)
  • Hive之grouping sets用法詳解

    GROUPING SETS: 根據(jù)不同的維度組合進(jìn)行聚合,等價(jià)于將不同維度的GROUP BY結(jié)果集進(jìn)行UNION ALL GROUPING__ID:表示結(jié)果屬于哪一個(gè)分組集合,屬于虛字段 關(guān)于grouping sets的使用,通俗的說,grouping sets是一種將多個(gè)group by 邏輯寫在一個(gè)sql語句中的便利寫法。 說明: 1、select子句中的G

    2024年02月02日
    瀏覽(17)
  • GROUP BY和HAVING用法介紹

    GROUP BY和HAVING用法介紹

    一、group by用法 “group by”就是對數(shù)據(jù)進(jìn)行分組,然后針對分組后的數(shù)據(jù)進(jìn)行處理。 如: 返回結(jié)果實(shí)際上就是根據(jù)C進(jìn)行分類匯總。 二、group by 和 having 1、having必須和group by一起用,且在group by后面,但是group可以單獨(dú)用來分組 2、group by、having、order by的使用順序:group by 、

    2024年02月15日
    瀏覽(21)
  • 路由,vue-router的基本用法,vue-router的常見用法$route.params、$router.push、$router.replace、$router.go

    路由,vue-router的基本用法,vue-router的常見用法$route.params、$router.push、$router.replace、$router.go

    路由(英文: router)就是 對應(yīng)關(guān)系 。 SPA指的是一個(gè)web網(wǎng)站只有唯一的一個(gè)HTML頁面, 所有組件的展示與切換 都在這唯一的一個(gè)頁面內(nèi)完成。此時(shí), 不同組件之間的切換 需要通過 前端路由 來實(shí)現(xiàn)。 *結(jié)論:*在SPA項(xiàng)目中, 不同功能之間的切換 ,要 依賴于前端路由 來完成! 通俗

    2024年01月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包