婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > pytorch中Schedule與warmup_steps的用法說明

pytorch中Schedule與warmup_steps的用法說明

熱門標簽:手機網頁嵌入地圖標注位置 應電話機器人打電話違法嗎 天津電話機器人公司 開封語音外呼系統(tǒng)代理商 地圖標注線上如何操作 400電話辦理哪種 河北防封卡電銷卡 開封自動外呼系統(tǒng)怎么收費 電銷機器人的風險

1. lr_scheduler相關

lr_scheduler = WarmupLinearSchedule(optimizer, warmup_steps=args.warmup_steps, t_total=num_train_optimization_steps)

其中args.warmup_steps可以認為是耐心系數(shù)

num_train_optimization_steps為模型參數(shù)的總更新次數(shù)

一般來說:

num_train_optimization_steps = int(total_train_examples / args.train_batch_size / args.gradient_accumulation_steps)

Schedule用來調節(jié)學習率,拿線性變換調整來說,下面代碼中,step是當前迭代次數(shù)。

    def lr_lambda(self, step):
        # 線性變換,返回的是某個數(shù)值x,然后返回到類LambdaLR中,最終返回old_lr*x
        if step  self.warmup_steps: # 增大學習率
            return float(step) / float(max(1, self.warmup_steps))
        # 減小學習率
        return max(0.0, float(self.t_total - step) / float(max(1.0, self.t_total - self.warmup_steps)))

在實際運行中,lr_scheduler.step()先將lr初始化為0. 在第一次參數(shù)更新時,此時step=1,lr由0變?yōu)槌跏贾礽nitial_lr;在第二次更新時,step=2,上面代碼中生成某個實數(shù)alpha,新的lr=initial_lr *alpha;在第三次更新時,新的lr是在initial_lr基礎上生成,即新的lr=initial_lr *alpha。

其中warmup_steps可以認為是lr調整的耐心系數(shù)。

由于有warmup_steps存在,lr先慢慢增加,超過warmup_steps時,lr再慢慢減小。

在實際中,由于訓練剛開始時,訓練數(shù)據(jù)計算出的grad可能與期望方向相反,所以此時采用較小的lr,隨著迭代次數(shù)增加,lr線性增大,增長率為1/warmup_steps;迭代次數(shù)等于warmup_steps時,學習率為初始設定的學習率;迭代次數(shù)超過warmup_steps時,學習率逐步衰減,衰減率為1/(total-warmup_steps),再進行微調。

2. gradient_accumulation_steps相關

gradient_accumulation_steps通過累計梯度來解決本地顯存不足問題。

假設原來的batch_size=6,樣本總量為24,gradient_accumulation_steps=2

那么參數(shù)更新次數(shù)=24/6=4

現(xiàn)在,減小batch_size=6/2=3,參數(shù)更新次數(shù)不變=24/3/2=4

在梯度反傳時,每gradient_accumulation_steps次進行一次梯度更新,之前照常利用loss.backward()計算梯度。

補充:pytorch學習筆記 -optimizer.step()和scheduler.step()

optimizer.step()和scheduler.step()的區(qū)別

optimizer.step()通常用在每個mini-batch之中,而scheduler.step()通常用在epoch里面,但是不絕對,可以根據(jù)具體的需求來做。只有用了optimizer.step(),模型才會更新,而scheduler.step()是對lr進行調整。

通常我們有

optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum = 0.9)
scheduler = lr_scheduler.StepLR(optimizer, step_size = 100, gamma = 0.1)
model = net.train(model, loss_function, optimizer, scheduler, num_epochs = 100)

在scheduler的step_size表示scheduler.step()每調用step_size次,對應的學習率就會按照策略調整一次。

所以如果scheduler.step()是放在mini-batch里面,那么step_size指的是經過這么多次迭代,學習率改變一次。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Pytorch 中的optimizer使用說明
  • PyTorch中model.zero_grad()和optimizer.zero_grad()用法
  • PyTorch的Optimizer訓練工具的實現(xiàn)
  • 聊聊pytorch中Optimizer與optimizer.step()的用法

標簽:成都 江蘇 駐馬店 常州 蘭州 六盤水 宿遷 山東

巨人網絡通訊聲明:本文標題《pytorch中Schedule與warmup_steps的用法說明》,本文關鍵詞  pytorch,中,Schedule,與,warmup,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch中Schedule與warmup_steps的用法說明》相關的同類信息!
  • 本頁收集關于pytorch中Schedule與warmup_steps的用法說明的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 荥经县| 海安县| 化隆| 杨浦区| 龙川县| 永平县| 宾阳县| 连江县| 元氏县| 措美县| 高平市| 玉门市| 武邑县| 喀喇| 博乐市| 蛟河市| 永新县| 天门市| 阳城县| 体育| 罗田县| 保德县| 许昌县| 明星| 锦州市| 习水县| 府谷县| 毕节市| 上高县| 赫章县| 镇宁| 九龙城区| 长子县| 缙云县| 永丰县| 获嘉县| 文昌市| 新晃| 潮安县| 嘉鱼县| 塘沽区|