BatchNormalization的相關注意點

2021-10-21 17:46:46 字數 905 閱讀 7582

今天重新學習了batchnormalization,發現遺漏的小知識還是不少的,今天的學習主要是參考了這位大佬的一篇文章:keras batchnormalization的坑(training引數和 momentum引數)

根據了解,總結如下:

batch,即每個epoch訓練的樣本數,最好不要小於100個,因為:

使用權重滑動平均法時,若將衰減率momentum設定為0.99,最後moving_mean的值越約等於最後100個mean的加權,若我們設定的batch數量遠遠小於100時,momentum還使用預設值0.99的話,幾乎不會通過每個批次更新,也就導致了訓練集使用的mean是每個批次的均值,而測試集使用的mean幾乎等於初值,產生很大差異!(方差也一樣),訓練時和測試時的mean和var差異太大這個坑就是因為這個原因

如果使用batchnormalization,那麼訓練的batch_size最好就不要太小。如果顯示卡不足以使用大的batch_size,那麼可以考慮選擇group normalization,這個對小批次訓練較為友好。batchnormalization與group normalization的對比圖如下:根據部分個人見解,batch和momentum之間的關係大致為:batch * (1 - momentum ) = 1。即如果batch=10時,那麼momentum 最好就取0.9;batch=50時,那麼momentum 最好就取0.98;當batch大於等於100時,一般就按預設值就行了,預設值一般為0.99。當然,具體實際情況得看你的工程決定。

陣列相關注意

一維陣列 如 a 10 注意事項 1.常量表示式中不能包括變數,如 int i scanf d i int a i 是不可行的。2.陣列元素的下標從0開始,如定義 int a 10 最大下標值為9 常見錯誤有 for i 1 i 10 i 迴圈變數從1開始,變到10 a i i 下標從1開始,變到1...

DllMain相關注意事項

1 在dllmain的dll process attach分支中,盡量只呼叫kernel32.dll中的函式。因為其他系統api可能依賴於其他dll,而那些dll有可能還沒有被載入到程序空間中且依賴於當前dllmain所在的dll,這樣會導致迴圈依賴 其實,在使用者程序中呼叫其他系統模組的api一般...

git相關注意事項

git的相關注意事項 git add 新增所有修改到暫存區。git reset head file add之後發現錯誤,撤銷 add的檔案到暫存區。git add file後進行 git commit m 修改某某檔案 後發現錯誤 要撤銷。解決方式 git log 檢視提交到暫存區的 commit ...