如何理解EMA并解決EMA下ckpt權(quán)重與pb權(quán)重表現(xiàn)不一問題,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
浦北ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
今天用YunYang的evaluate.py評估模型的時候,意外發(fā)現(xiàn)用同樣的ckpt權(quán)重文件轉(zhuǎn)換而成的pb文件效果不一樣,使用ckpt的效果非常差,仔細研究后才發(fā)現(xiàn)是滑動平均(EMA)搞的鬼,于是便重新重溫了一下EMA。
EMA定義與原理
- EMA(ExponentialMovingAverage),也就是我們常說的滑動平均模型,一般在采用SGD(隨機梯度下降)訓(xùn)練的時候,都會用他來提高我們在測試數(shù)據(jù)的表現(xiàn),我們從[1]結(jié)合tensorflow提供的api來說一下他的定義:
- Tensorflow提供了
tf.train.ExponentialMovingAverage來實現(xiàn)滑動平均模型。在初始化ExponentialMovingAverage時,需要提供一個
衰減率(decay)。這個衰減率將用于
控制模型更新的速度,這個第二部分會告訴大家是怎么控制的。ExponentialMovingAverage對每一個變量會維護一個
影子變量(shadow variable),顧名思義,這個影子變量的初始值就是相應(yīng)變量的初始值,而每次運行變量更新時,影子變量的值就會被更新為:
- 其中,shadow_variable就是我們的影子變量,variable就是我們本次準(zhǔn)備更新的變量(也就是我們的權(quán)重),decay是衰減率。
EMA原理理解
- 上面的那個公式看似復(fù)雜,其實很容易理解,
其實EMA就是把每一次梯度下降更新后的權(quán)重值和前一次的權(quán)重值進行了一種“聯(lián)系”,這種聯(lián)系讓我們的模型更新還需要看上一次更新的臉色,沒那么“隨意”。具體舉個例子來說:比如上一次的權(quán)重值shadow_variable為4,衰減率decay為0.999,這次經(jīng)過SGD準(zhǔn)備更新的權(quán)重值variable為5,那么我們新更新的權(quán)重值就是0.999×4+0.001×5=4.001,我們可以看到采用EMA之后的更新明顯受限于上一次更新的權(quán)重。
- 經(jīng)過上面那個例子,我們也可以明白decay決定了模型更新的速度,
decay越大模型越趨于穩(wěn)定(穩(wěn)定的意思就是和上一次更新的權(quán)重值相差不大),在實際應(yīng)用中,decay一般會設(shè)成非常接近1的數(shù)(比如0.999或者0.9999)。當(dāng)然為了使得模型訓(xùn)練前期可以更新得更快,ExponentialMovingAverage也提供了一個num_updates參數(shù)來動態(tài)設(shè)置decay的大小,這里就不多說了。
ckpt和pb保存不同的原因
- 眾所周知,pb權(quán)重是由ckpt轉(zhuǎn)換而來,他們的表現(xiàn)理論上是一致的,那我們的EMA終究是怎么干擾了我們ckpt的表現(xiàn)呢?這個要從tensorflow讀取使用變量的滑動平均值的方式說起:tensorflow通過tf.train.ExponentialMovingAverage的variables_to_restore()函數(shù)獲取變量重命名字典,這說明如果我們通過saver = tf.train.Saver(ema_obj.variables_to_restore())后saver.resore來恢復(fù)讀取權(quán)重文件的話(ema_obj是我們定義好的一個滑動平均的類),
我們讀取的將會是我們本來最后一次準(zhǔn)備更新的權(quán)重,而不是我們的影子變量,也正是因為這個重命名機制從而導(dǎo)致了我們的ckpt和pb表現(xiàn)不同的關(guān)鍵。
- 解決方法很簡單,只需要刪掉saver里面的ema_obj.variables_to_restore()就可以解決。
看完上述內(nèi)容,你們掌握如何理解EMA并解決EMA下ckpt權(quán)重與pb權(quán)重表現(xiàn)不一問題的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站名稱:如何理解EMA并解決EMA下ckpt權(quán)重與pb權(quán)重表現(xiàn)不一問題
本文來源:
http://weahome.cn/article/pssipj.html