tensorflow中使用Batch Normalization


在深度學習中為了提高訓練速度,經常會使用一些正正則化方法,如L2、dropout,后來Sergey Ioffe 等人提出Batch Normalization方法,可以防止數據分布的變化,影響神經網絡需要重新學習分布帶來的影響,會降低學習速率,訓練時間等問題。提出使用batch normalization方法,使輸入數據分布規律保持一致。實驗證明可以提升訓練速度,提高識別精度。下面講解一下在Tensorflow中如何使用Batch Normalization

有關Batch Normalization詳細內容請查看論文:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

 

關鍵函數

tf.layers.batch_normalization、tf.contrib.layers.batch_norm

這兩個函數用法一致,以 tf.layers.batch_normalization 為例進行講解

layer1_conv = tf.layers.batch_normalization(layer1_conv,axis=0,training=in_training)

其中 axis 參數表示沿着哪個軸進行正則化,一般而言Tensor是[batch, width_x, width_y, channel],如果是[width_x, width_y, channel,batch]則axis應該設為3

 

1 在訓練階段

訓練的時候需要注意兩點,(1)輸入參數training=True,(2)計算loss時,要添加以下代碼(即添加update_ops到最后的train_op中)。這樣才能計算μ和σ的滑動平均(測試時會用到)

 update_op = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
  with tf.control_dependencies(update_op):
    train_op = optimizer.minimize(loss)

 

2 在測試階段

測試時需要注意一點,輸入參數training=False,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM