最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對比分析BN和dropout在預測和訓練時區(qū)別

 更新時間:2022年05月09日 15:47:59   作者:微笑sun  
這篇文章主要為大家介紹了對比分析BN和dropout在預測和訓練時區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Batch Normalization和Dropout是深度學習模型中常用的結構。

但BN和dropout在訓練和測試時使用卻不相同。

Batch Normalization

BN在訓練時是在每個batch上計算均值和方差來進行歸一化,每個batch的樣本量都不大,所以每次計算出來的均值和方差就存在差異。預測時一般傳入一個樣本,所以不存在歸一化,其次哪怕是預測一個batch,但batch計算出來的均值和方差是偏離總體樣本的,所以通常是通過滑動平均結合訓練時所有batch的均值和方差來得到一個總體均值和方差。

以tensorflow代碼實現(xiàn)為例:

def bn_layer(self, inputs, training, name='bn', moving_decay=0.9, eps=1e-5):
        # 獲取輸入維度并判斷是否匹配卷積層(4)或者全連接層(2)
        shape = inputs.shape
        param_shape = shape[-1]
        with tf.variable_scope(name):
            # 聲明BN中唯一需要學習的兩個參數(shù),y=gamma*x+beta
            gamma = tf.get_variable('gamma', param_shape, initializer=tf.constant_initializer(1))
            beta  = tf.get_variable('beat', param_shape, initializer=tf.constant_initializer(0))
            # 計算當前整個batch的均值與方差
            axes = list(range(len(shape)-1))
            batch_mean, batch_var = tf.nn.moments(inputs , axes, name='moments')
            # 采用滑動平均更新均值與方差
            ema = tf.train.ExponentialMovingAverage(moving_decay, name="ema")
            def mean_var_with_update():
                ema_apply_op = ema.apply([batch_mean, batch_var])
                with tf.control_dependencies([ema_apply_op]):           
                    return tf.identity(batch_mean), tf.identity(batch_var)
            # 訓練時,更新均值與方差,測試時使用之前最后一次保存的均值與方差
            mean, var = tf.cond(tf.equal(training,True), mean_var_with_update,
                    lambda:(ema.average(batch_mean), ema.average(batch_var)))
            # 最后執(zhí)行batch normalization
            return tf.nn.batch_normalization(inputs ,mean, var, beta, gamma, eps)

training參數(shù)可以通過tf.placeholder傳入,這樣就可以控制訓練和預測時training的值。

self.training = tf.placeholder(tf.bool, name="training")

Dropout

Dropout在訓練時會隨機丟棄一些神經元,這樣會導致輸出的結果變小。而預測時往往關閉dropout,保證預測結果的一致性(不關閉dropout可能同一個輸入會得到不同的輸出,不過輸出會服從某一分布。另外有些情況下可以不關閉dropout,比如文本生成下,不關閉會增大輸出的多樣性)。

為了對齊Dropout訓練和預測的結果,通常有兩種做法,假設dropout rate = 0.2。一種是訓練時不做處理,預測時輸出乘以(1 - dropout rate)。另一種是訓練時留下的神經元除以(1 - dropout rate),預測時不做處理。以tensorflow為例。

x = tf.nn.dropout(x, self.keep_prob)
self.keep_prob = tf.placeholder(tf.float32, name="keep_prob")

tf.nn.dropout就是采用了第二種做法,訓練時除以(1 - dropout rate),源碼如下:

binary_tensor = math_ops.floor(random_tensor)
 ret = math_ops.div(x, keep_prob) * binary_tensor
 if not context.executing_eagerly():
   ret.set_shape(x.get_shape())
 return ret

binary_tensor就是一個mask tensor,即里面的值由0或1組成。keep_prob = 1 - dropout rate。

以上就是對比分析BN和dropout在預測和訓練時區(qū)別的詳細內容,更多關于BN與dropout預測訓練對比的資料請關注腳本之家其它相關文章!

相關文章

  • python模塊離線安裝方式

    python模塊離線安裝方式

    這篇文章主要介紹了python模塊離線安裝方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python的這些庫,你知道多少?

    Python的這些庫,你知道多少?

    最近整理了一些好用的庫但是只是初級介紹,如果大家用得到的話還請自己到官網上查一下,因為東西太多我一 一介紹的話可能不太現(xiàn)實,需要的朋友可以參考下
    2021-06-06
  • Python中的遞歸函數(shù)使用詳解

    Python中的遞歸函數(shù)使用詳解

    這篇文章主要介紹了Python中的遞歸函數(shù)使用詳解,遞歸函數(shù)是指某個函數(shù)調用自己或者調用其他函數(shù)后再次調用自己,由于不能無限嵌套調用,所以某個遞歸函數(shù)一定存在至少兩個分支,一個是退出嵌套,不再直接或者間接調用自己;另外一個則是繼續(xù)嵌套,需要的朋友可以參考下
    2023-12-12
  • python替換文件中的某幾行操作技巧

    python替換文件中的某幾行操作技巧

    這篇文章主要介紹了python替換文件中的某幾行,本文介紹使用python正則庫打開文件并替換文件中某幾行數(shù)據(jù)的可行方法,需要的朋友可以參考下
    2023-09-09
  • Python中的XML庫4Suite Server的介紹

    Python中的XML庫4Suite Server的介紹

    這篇文章主要介紹了Python中的XML庫4Suite Server,來自于IBM官方網站,需要的朋友可以參考下
    2015-04-04
  • 簡單實現(xiàn)Python爬取網絡圖片

    簡單實現(xiàn)Python爬取網絡圖片

    這篇文章主要教大家如何簡單實現(xiàn)Python爬取網絡圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • WxPython開發(fā)之列表數(shù)據(jù)的自定義打印處理

    WxPython開發(fā)之列表數(shù)據(jù)的自定義打印處理

    這篇文章主要為大家詳細介紹了如何利用WxPython內置的打印數(shù)據(jù)組件實現(xiàn)列表數(shù)據(jù)的自定義打印處理,以及對記錄進行分頁等常規(guī)操作,需要的可以參考下
    2025-03-03
  • python中的列表推導淺析

    python中的列表推導淺析

    這篇文章主要介紹了python中的列表推導,需要的朋友可以參考下
    2014-04-04
  • 淺談Django QuerySet對象(模型.objects)的常用方法

    淺談Django QuerySet對象(模型.objects)的常用方法

    這篇文章主要介紹了淺談Django QuerySet對象(模型.objects)的常用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python學習筆記之字典,元組,布爾類型和讀寫文件

    Python學習筆記之字典,元組,布爾類型和讀寫文件

    這篇文章主要為大家詳細介紹了Python的字典,元組,布爾類型和讀寫文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論

呼和浩特市| 罗源县| 海阳市| 安徽省| 钦州市| 鄯善县| 玉田县| 天长市| 景东| 祁东县| 德化县| 图木舒克市| 娄烦县| 台北市| 当雄县| 溧水县| 尖扎县| 洪洞县| 文登市| 峨眉山市| 鹿泉市| 三明市| 尚义县| 玉龙| 商都县| 天峨县| 涟源市| 潜江市| 福清市| 葫芦岛市| 大宁县| 孝义市| 常德市| 无极县| 根河市| 汉川市| 溧水县| 株洲县| 马龙县| 介休市| 牡丹江市|