溫馨提示×

溫馨提示×

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

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

批標準化層tf.keras.layers.Batchnormalization的使用位置是什么

發(fā)布時間:2023-02-22 09:51:42 來源:億速云 閱讀:115 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“批標準化層tf.keras.layers.Batchnormalization的使用位置是什么”,在日常操作中,相信很多人在批標準化層tf.keras.layers.Batchnormalization的使用位置是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”批標準化層tf.keras.layers.Batchnormalization的使用位置是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習吧!

    批標準化層 tf.keras.layers.Batchnormalization()

    tf.keras.layers.Batchnormalization()

    重要參數(shù):

    • training:布爾值,指示圖層應(yīng)在訓(xùn)練模式還是在推理模式下運行。

    • training=True:該圖層將使用當前批輸入的均值和方差對其輸入進行標準化。

    • training=False:該層將使用在訓(xùn)練期間學(xué)習的移動統(tǒng)計數(shù)據(jù)的均值和方差來標準化其輸入。

    BatchNormalization 廣泛用于 Keras 內(nèi)置的許多高級卷積神經(jīng)網(wǎng)絡(luò)架構(gòu),比如 ResNet50、Inception V3 和 Xception。

    BatchNormalization 層通常在卷積層或密集連接層之后使用。

    批標準化的實現(xiàn)過程

    • 求每一個訓(xùn)練批次數(shù)據(jù)的均值

    • 求每一個訓(xùn)練批次數(shù)據(jù)的方差

    • 數(shù)據(jù)進行標準化

    • 訓(xùn)練參數(shù)γ,β

    • 輸出y通過γ與β的線性變換得到原來的數(shù)值

    在訓(xùn)練的正向傳播中,不會改變當前輸出,只記錄下γ與β。在反向傳播的時候,根據(jù)求得的γ與β通過鏈式求導(dǎo)方式,求出學(xué)習速率以至改變權(quán)值。

    對于預(yù)測階段時所使用的均值和方差,其實也是來源于訓(xùn)練集。比如我們在模型訓(xùn)練時我們就記錄下每個batch下的均值和方差,待訓(xùn)練完畢后,我們求整個訓(xùn)練樣本的均值和方差期望值,作為我們進行預(yù)測時進行BN的的均值和方差。

    批標準化的使用位置

    原始論文講在CNN中一般應(yīng)作用與非線性激活函數(shù)之前,但是,實際上放在激活函數(shù)之后效果可能會更好。

    # 放在非線性激活函數(shù)之前
    model.add(tf.keras.layers.Conv2D(64, (3, 3)))
    model.add(tf.keras.layers.BatchNormalization())
    model.add(tf.keras.layers.Activation('relu'))
    
    # 放在激活函數(shù)之后
    model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(tf.keras.layers.BatchNormalization())

    tf.keras.layers.BatchNormalization使用細節(jié)

    關(guān)于keras中的BatchNormalization使用,官方文檔說的足夠詳細。本文的目的旨在說明在BatchNormalization的使用過程中容易被忽略的細節(jié)。

    在BatchNormalization的Arguments參數(shù)中有trainable屬性;以及在Call arguments參數(shù)中有training。兩個都是bool類型。第一次看到有兩個參數(shù)的時候,我有點懵,為什么需要兩個?

    后來在查閱資料后發(fā)現(xiàn)了兩者的不同作用。

    1,trainable是Argument參數(shù),類似于c++中構(gòu)造函數(shù)的參數(shù)一樣,是構(gòu)建一個BatchNormalization層時就需要傳入的,至于它的作用在下面會講到。

    2,training參數(shù)時Call argument(調(diào)用參數(shù)),是運行過程中需要傳入的,用來控制模型在那個模式(train還是interfere)下運行。關(guān)于這個參數(shù),如果使用模型調(diào)用fit()的話,是可以不給的(官方推薦是不給),因為在fit()的時候,模型會自己根據(jù)相應(yīng)的階段(是train階段還是inference階段)決定training值,這是由learning——phase機制實現(xiàn)的。

    重點

    關(guān)于trainable=False:如果設(shè)置trainable=False,那么這一層的BatchNormalization層就會被凍結(jié)(freeze),它的trainable weights(可訓(xùn)練參數(shù))(就是gamma和beta)就不會被更新。

    注意:freeze mode和inference mode是兩個概念。

    但是,在BatchNormalization層中,如果把某一層BatchNormalization層設(shè)置為trainable=False,那么這一層BatchNormalization層將一inference mode運行,也就是說(meaning that it will use the moving mean and the moving variance to normalize the current batch, rather than using the mean and variance of the current batch).

    到此,關(guān)于“批標準化層tf.keras.layers.Batchnormalization的使用位置是什么”的學(xué)習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習,快去試試吧!若想繼續(xù)學(xué)習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

    向AI問一下細節(jié)

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

    AI