TensorFlow實現‘批標準歸一化’詳解

卷首語:

首先,筆者在這里祝大家新年快樂!!!今天我們來探討的問題是BN層在TensorFlow中的實現,以實踐為主,理論方面會跳過一些不易被理解的部分,讓大家可以快速搭建并投入使用。

在文章的最后我也會給出相應的效果對比,猶豫要不要學習的讀者可以先看看最后在做決定~

在訓練模型時,我們經常會在一些需要調整的參數上浪費時間:學習率,學習衰減率,正則……

況且即便我們調整了很多次參數,也未必見得可以提高模型的訓練效果,甚至還有可能產生梯度消失等等一系列令人頭疼的問題。

但是,這種現象在Inception-v2中就已經發生了改變。在Inception模型升級時引入了一種新的網絡層“Batch Normalization”

比較官方的公式,不懂的讀者可以直接忽略

為了降低學習難度,筆者在這里給出一個精簡的公式

BN公式

下面,讓我們對公式逐一地進行分解(注:有微積分基礎的讀者想必就不用我多說了,可以跳過理論這段)

均值與方差

均值(mean):

首先,讓我們假設一數組:X = [1,2,3,4,5]

mean = 數組和/數量

mean = (1+2+3+4+5)/5

mean = 3

方差(variance):

讓我們繼續使用上一數組X

variance = (X12+ X22++ Xn2)/ n

variance = (12+ 22 + 32 + 42 + 52)/ 5

variance = (1 + 4 + 9 + 1 6 + 2 5 )/ 5

variance =? 45 / 5

variance =? 9

在TensorFlow中,該公式內的“均值”與“方差”可通過tf.nn.moments()函數來計算

內部參數

x:輸入進行計算的張量

axes:需要計算的維度

name:命名

keep_dims:是否保持維度

TensorFlow實現

縮放與偏移

在公式中,我們可以將“縮放”與“偏移”理解為兩組可被訓練的Weights

縮放(scale):

在定義scale時一般初始化為0,維度必須和mean的一致

TensorFlow實現

偏移(offset):

定義offset的情況和scale基本一致,但要注意的是offset一般情況下初始化為1

TensorFlow實現

按照上面所講的,公式中的內容我們已經解析完全,接下來我們只需要套用一個現成的函數:

TensorFlow實現

神來一筆:Variance_epsilon

在上面的函數中,我們將“輸入”“均值”“方差”“偏移”“縮放”都添加了進去,最后還有個參數:variance_epsilon = 0.001

這個參數的作用在官方解釋為:A small float number to avoid dividing by 0.

大概的意思就是需設定一個浮點數用來避免除以0產生的梯度爆炸

雖然在方差被除等于零是幾率很小的事,可在幾十層甚至幾百層的神經網絡里,計算量也要大的驚人,根據墨菲定律:會出錯的事總會出錯

滑動平均與滑動方差

注:BN層在訓練與測試時所用的滑動平均和滑動方差不同

申請滑動平均與滑動方差(這里就應該不用我多敘述了,純基礎范圍,不太理解的可以去找一下關于滑動平均的博文):

TensorFlow實現

計算滑動平均與滑動方差:

TensorFlow實現

存儲優化參數:

TensorFlow實現
TensorFlow實現

如此一來,在進行網絡訓練時,將is_training設為True;測試網絡時設為False即可。

精簡代碼

在前文中我們寫了很多行代碼才實現了BN層的基本功能。

但是,我們完全可以用一行代碼進行!

下面三種函數都可以實現BN層,因為都是封裝好的函數,有興趣的讀者完全可以自行測試。

TensorFlow實現

有BN層的仿Lenet-5模型前趨關系代碼:

前趨關系

關于詳細如何實現BN層的,可以參考我給出的實例代碼,基于MNIST數據集非常簡單:https://pan.baidu.com/s/11cnPkDAiuOFN4wgUv-l7_w

卷尾語萬般不愿,終于還是開學了...希望這學習的學習能有所提高!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,791評論 6 545
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,795評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,943評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,057評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,773評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,106評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,082評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,282評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,793評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,507評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,741評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,220評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,929評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,325評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,661評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,482評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,702評論 2 380