變相增大BatchSize——梯度累積

常規訓練方式

for x,y in train_loader:pred = model(x)loss = criterion(pred, label)# 反向傳播loss.backward()# 根據新的梯度更新網絡參數optimizer.step()# 清空以往梯度,通過下面反向傳播重新計算梯度optimizer.zero_grad()

pytorch每次forward完都會得到一個用于梯度回傳的計算圖,pytorch構建的計算圖是動態的,其實在每次backward后計算圖都會從內存中釋放掉,但是梯度不會清空的。所以若不顯示的進行optimizer.zero_grad()清空過往梯度這一步操作,backward()的時候就會累加過往梯度。


梯度累加方法

accumulation_steps = 4
for i,(x,y) in enumerate(train_loader):pred = model(x)loss = criterion(pred, label)# 相當于對累加后的梯度取平均loss = loss/accumulation_steps# 反向傳播loss.backward()if (i+1) % accumulation_steps == 0:# 根據新的梯度更新網絡參數optimizer.step()# 清空以往梯度,通過下面反向傳播重新計算梯度optimizer.zero_grad()

????????代碼中設置accumulation_steps = 4,意思就是變相擴大batch_size四倍。因為代碼中每隔4次迭代才清空梯度,更新參數。

????????loss = loss/accumulation_steps,梯度累加了四次,那就要取平均,除以4。每次loss取4,其實就相當于最后將累加后的梯度除4。同時,因為累計了4個batch,那學習率也應該擴大4倍,讓更新的步子跨大點。

?看網上的帖子有討論對BN層是否有影響,因為BN的估算階段(計算batch內均值、方差)是在forward階段完成的,那真實的batch_size放大4倍效果肯定是比通過梯度累加放大4倍效果好的,畢竟計算真實的大batch_size內的均值、方差肯定更精確。

?還有討論說通過調低BN參數momentum可以得到更長序列的統計信息,應該意思是能夠記憶更久遠的統計信息(均值、方差),以逼近真實的擴大batch_size的效果。
?

參考

pytorch騷操作之梯度累加,變相增大batch size

pytorch里巧用optimizer.zero_grad增大batchsize

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213204.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tidb安裝 centos7單機集群

安裝 [rootlocalhost ~]# curl --proto https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh [rootlocalhost ~]# source .bash_profile [rootlocalhost ~]# which tiup [rootlocalhost ~]# tiup playground v6.1.0 --db 2 --pd 3 --kv 3 --host 192.168.1…

按這個套路寫的年底工作總結,運維人能少背多少鍋?

在職場中,年終工作總結是一項重要的任務,不僅有助于回顧過去一年的工作成果,也為未來設定新的目標提供了參考。在進行年終工作總結的過程中,合理的工作匯報是至關重要的一環。 一、匯報需要堅守的4個法則 01.線索必須單一 觀點&am…

js實現元素可拖拽方法

業務需要:Vueelement plus實現對彈框進行拖拽,并可拖拽到顯示頁面的外面,而element提供的拖拽只能在當前頁面不可超出。所以手寫了拖拽方法。 實現效果 對元素進行拖拽 拖拽方法 function dragElement(ele) {ele.addEventListener("mous…

SQL自學通之函數 :對數據的進一步處理

目錄 一、目標 二、匯總函數 COUNT SUM AVG MAX MIN VARIANCE STDDEV 三、日期/時間函數 ADD_MONTHS LAST_DAY MONTHS_BETWEEN NEW_TIME NEXT_DAY SYSDATE 四、數學函數 ABS CEIL 和FLOOR COS、 COSH 、SIN 、SINH、 TAN、 TANH EXP LN and LOG MOD POW…

【SpringBoot教程】SpringBoot 實現前后端分離的跨域訪問(Nginx)

作者簡介:大家好,我是擼代碼的羊駝,前阿里巴巴架構師,現某互聯網公司CTO 聯系v:sulny_ann(17362204968),加我進群,大家一起學習,一起進步,一起對抗…

Mybatis之核心配置文件詳解、默認類型別名、Mybatis獲取參數值的兩種方式

學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統/深入學習某技術知識點… 一個人摸索學習很難堅持,想組團高效學習… 想寫博客但無從下手,急需…

arm-none-eabi-gcc not find

解決辦法:安裝:gcc-arm-none-eabi sudo apt install gcc-arm-none-eabi; 如果上邊解決問題了就不用管了,如果解決不了,加上下面這句試試運氣: $ sudo apt-get install lsb-core看吧方正我是運氣還不錯,感…

leetcode周賽375 - 12 - 10

比賽地址 : 競賽 - 力扣 (LeetCode) t1 : 直接暴力即可 class Solution { public:int countTestedDevices(vector<int>& b) {int n b.size();int ans 0;for(int i0;i<n;i){if(b[i]>0){ans ;for(int ji1;j<n;j){b[j] max(b[j]-1,0);}}}return ans;} };…

SSL 數字證書的一些細節

參考&#xff1a;TLS/SSL 協議詳解(6) SSL 數字證書的一些細節1 證書驗證 地址&#xff1a;https://wonderful.blog.csdn.net/article/details/77867063 參考&#xff1a;TLS/SSL協議詳解 (7) SSL 數字證書的一些細節2 地址&#xff1a;https://wonderful.blog.csdn.net/articl…

Python學習筆記-類

1 定義類 類是函數的集合&#xff0c;class來定義類 pass并沒有實際含義&#xff0c;只是為了代碼能執行通過&#xff0c;不報錯而已&#xff0c;相當于在代碼種占一個位置&#xff0c;后續完善 類是對象的加工廠 2.創建對象 carCar()即是創建對象的過程 3、類的成員 3.1 實例…

福德植保無人機:綠色農業的新篇章

今天&#xff0c;我們榮幸地向您介紹福德植保無人機&#xff0c;一種改變傳統農業種植方式&#xff0c;引領綠色農業的新科技產品。福德植保無人機以其高效、環保、安全的特點&#xff0c;正逐漸成為植保行業的新寵。福德植保無人機是一種搭載了高性能發動機和精確噴灑系統的飛…

代碼隨想錄算法訓練營第四十六天 _ 動態規劃_背包問題總結。

學習目標&#xff1a; 動態規劃五部曲&#xff1a; ① 確定dp[i]的含義 ② 求遞推公式 ③ dp數組如何初始化 ④ 確定遍歷順序 ⑤ 打印遞歸數組 ---- 調試 引用自代碼隨想錄&#xff01; 本文大多數內容引用自代碼隨想錄 60天訓練營打卡計劃&#xff01; 學習內容&#xff1a; …

POJ - 2528 Mayor‘s posters

本題注意離散化的時候可能會出現區間串聯情況&#xff0c;比如 [1,10] [5,10] [1,4] 和 [1,10] [6,10] [1,4] 直接離散化的話兩者一樣&#xff0c;但是實際上是不一樣的 解決辦法是你在相鄰的差不是1的數對中再插一個數就好了 離線區間染色 查詢根節點 #include<iostrea…

ASPICE-汽車軟件開發能力評級

Automotive SPICE&#xff08;簡稱A-SPICE 或 ASPICE&#xff09;&#xff0c;全稱是“Automotive Software Process Improvement and Capacity dEtermination”&#xff0c;即“汽車軟件過程改進及能力評定”模型框架。 常被用于評估一家汽車軟件供應商的軟件開發能力&#x…

數組|73. 矩陣置零 48. 旋轉圖像

73. 矩陣置零 **題目:**給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 題目鏈接&#xff1a;矩陣置零 class Solution {public void setZeroes(int[][] matrix) {Stack<int[]> mapofzerone…

【Python必做100題】之第三題(找出100以內的奇數并打印)

思路&#xff1a; 1、定義一個空列表來存儲所有的奇數 2、判斷是奇數就追加到列表的末尾 3、打印所有的奇數 代碼如下&#xff1a; list [ ] #定義一個列表來存儲所有的奇數 for i in range (1,100):if i % 2 ! 0: #判斷是否為奇數list.append(i) #追加到列表的末尾 prin…

使用draw.io如何讓矩形單個邊框有顏色其余邊框為空白?

方法步驟: 第一步&#xff1a;用戶打開Draw.io軟件&#xff0c;并來到流程圖的編輯頁面上&#xff1b; 第二步&#xff1a;接著在左側的圖形庫中點擊矩形選項&#xff0c;成功將其添加到流程圖的繪制頁面上&#xff1b; 第三步&#xff1a;這時用戶點擊矩形并在右側窗口中點…

C++ //習題2.3 寫出以下程序運行結果。請先閱讀程序,分析應輸出的結果,然后上機驗證。

C程序設計 &#xff08;第三版&#xff09; 譚浩強 習題2.3 習題2.3 寫出以下程序運行結果。請先閱讀程序&#xff0c;分析應輸出的結果&#xff0c;然后上機驗證。 #include <iostream> using namespace std;int main(){char c1 a, c2 b, c3 c, c4 \101, c5 \116…

DL Homework 10

習題6-1P 推導RNN反向傳播算法BPTT. 習題6-2 推導公式(6.40)和公式(6.41)中的梯度 習題6-3 當使用公式(6.50)作為循環神經網絡的狀態更新公式時&#xff0c; 分析其可能存在梯度爆炸的原因并給出解決方法&#xff0e; 當然&#xff0c;因為我數學比較菜&#xff0c;我看了好半…

Vue之數據綁定

在我們Vue當中有兩種數據綁定的方法 1.單向綁定 2.雙向綁定 讓我為大家介紹一下吧&#xff01; 1、單向綁定(v-bind) 數據只能從data流向頁面 舉個例子&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…