亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pytorch中Schedule與warmup_steps怎么用

發布時間:2022-02-23 14:40:22 來源:億速云 閱讀:645 作者:小新 欄目:開發技術

這篇文章主要介紹了pytorch中Schedule與warmup_steps怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1. lr_scheduler相關

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

其中args.warmup_steps可以認為是耐心系數

num_train_optimization_steps為模型參數的總更新次數

一般來說:

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

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

    def lr_lambda(self, step):
        # 線性變換,返回的是某個數值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. 在第一次參數更新時,此時step=1,lr由0變為初始值initial_lr;在第二次更新時,step=2,上面代碼中生成某個實數alpha,新的lr=initial_lr *alpha;在第三次更新時,新的lr是在initial_lr基礎上生成,即新的lr=initial_lr *alpha。

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

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

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

2. gradient_accumulation_steps相關

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

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

那么參數更新次數=24/6=4

現在,減小batch_size=6/2=3,參數更新次數不變=24/3/2=4

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

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

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

optimizer.step()通常用在每個mini-batch之中,而scheduler.step()通常用在epoch里面,但是不絕對,可以根據具體的需求來做。只有用了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中Schedule與warmup_steps怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

忻州市| 灵丘县| 太康县| 宜都市| 迁安市| 南昌市| 团风县| 阜新| 建平县| 忻城县| 涞水县| 临潭县| 四子王旗| 周宁县| 德昌县| 微山县| 贵德县| 水富县| 通山县| 临夏县| 洮南市| 观塘区| 文水县| 武平县| 龙里县| 吉隆县| 法库县| 休宁县| 清丰县| 周口市| 临沂市| 会昌县| 东辽县| 贡觉县| 天等县| 吴川市| 平顶山市| 鹰潭市| 怀安县| 敦煌市| 屏南县|